从 ARGB 编号中获取单色值

本文关键字:获取 单色值 编号 ARGB | 更新日期: 2023-09-27 18:33:20

我正在学习C#,我试图解决的以下问题是获取存储为字符串的数字并获取a,r,g,b值。

所以我想从

string s = "4280427042";

int a = 255;
int r = 22;
int g = 22;
int b = 22;

最好的方法是什么?

从 ARGB 编号中获取单色值

可以将字符串转换为无符号的 32 位整数,然后使用 BitConverter 获取单个字节,如下所示:

string s = "4280427042";
uint argb = Convert.ToUInt32(s);
byte[] values = BitConverter.GetBytes(argb);
int a = values[3];
int r = values[2];
int g = values[1];
int b = values[0];

引用此 MSDN 参考:

GetBytes 方法返回的数组中的字节顺序取决于计算机体系结构是小端还是大端。

这意味着您需要注意字节的顺序。您可以使用BitConverter.IsLittleEndian来帮助您。

您可以使用

Color.FromArgb()并访问单个值,如下所示:

string s = "4280427042";
Color color = Color.FromArgb((int)uint.Parse(s));
int a = color.A;
int r = color.R;
int g = color.G;
int b = color.B;

请注意,如果string不包含有效的uintuint.Parse可能会引发异常。最好使用 uint.TryParse 并进行一些错误处理。

更新 感谢 Flat Eric 的提示:不要只使用 int.Parse 而是uint.Parse ,因为值可能大于 2147483648(就像示例一样),因此不适合有符号的 int。

看看Color.FromArgb .下面是 MSDN 文章。它返回一个Color,允许您访问a,r,g和b值。