如何将数字转换为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
由于
答案 0 :(得分:0)
您可以使用8位偏移的按位运算符。例如,RGB 255,255,128
到整数将是(255 << 16) + (255 << 8) + (128)
如果您需要另一个八位字节,只需添加&lt;&lt; 24 ..喜欢(a << 24) + (r << 16) + (g << 8) + b
..
答案 1 :(得分:0)
作为上述答案的补充解决方案,根据下面的示例代码,(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;
如果符合您的需要,请尝试检查上述参考(和实验)。
答案 2 :(得分:0)
完全忽略系统方法,您可以实现一个自定义方法来执行您在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。