如何将数字转换为argb值
本文关键字:argb 转换 数字 | 更新日期: 2023-09-27 18:09:45
如何将数字转换为argb
值,使
0 -> 0,0,0,0
1 -> 0,0,0,1
...
(16^8)-1 -> 255,255,255,255
,反之亦然
0,0,0,0 -> 0
0,0,0,1 -> 1
...
255,255,255,255 -> (16^8)-1
谢谢
作为上述答案的附加解,给定下面的示例代码,(16^8)-1
的结果为23
。你希望它是白色的。这样做有什么特别的原因吗?参考Color
这就是你要做的:
int argb = (16 ^ 8) - 1; //Result is 23 any reason for this?
如果我们使用相同的颜色转换的Color
对象。
Color c = Color.FromArgb(255, 255, 255, 255);
c.ToArgb(); //We get -1
我们将得到相同的结果与这个解决方案:
int v = (c.A << 24) + (c.R << 16) + (c.G << 8) + c.B; //Result is -1
还原:
int a = (v >> 24) & 0xFF;
int r = (v >> 16) & 0xFF;
int g = (v >> 8) & 0xFF;
int b = (v) & 0xFF;
试着检查上面的参考(和实验),如果这将符合您的需要。
完全忽略系统方法,您可以实现一个自定义方法来完成您在c#中的要求,如下所示:
public static long argbToLong(int a, int r, int g, int b)
{
new[] { a, r, g, b }.Select((v, i) => new { Name = "argb"[i].ToString(), Value = v }).ToList()
.ForEach(arg =>
{
if (arg.Value > 255 || arg.Value < 0)
throw new ArgumentOutOfRangeException(arg.Name, arg.Name + " must be between or equal to 0-255");
});
long al = (a << 24) & 0xFF000000;
long rl = (r << 16) & 0x00FF0000;
long gl = (g << 8) & 0x0000FF00;
long bl = b & 0x000000FF;
return al | rl | gl | bl;
}
public static Tuple<int, int, int, int> longToArgb(long argb)
{
var max = Math.Pow(16, 8) - 1;
if (argb < 0 || argb > max)
throw new ArgumentOutOfRangeException("argb", "argb must be between or equal to 0-" + max);
int a = (int)((argb & 0xFF000000) >> 24);
int r = (int)((argb & 0x00FF0000) >> 16);
int g = (int)((argb & 0x0000FF00) >> 8);
int b = (int)(argb & 0x000000FF);
return new Tuple<int, int, int, int>(a, r, g, b);
}
不确定是什么语言,因为c#和Java都有标记
您可以使用8位偏移的位运算符。例如,在RGB中255,255,128
to integer将是(255 << 16) + (255 << 8) + (128)
如果你需要另一个八位字符,只需加上<<24 . .像(a << 24) + (r << 16) + (g << 8) + b
..