从 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;
最好的方法是什么?
可以将字符串转换为无符号的 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
不包含有效的uint
,uint.Parse
可能会引发异常。最好使用 uint.TryParse
并进行一些错误处理。
更新 感谢 Flat Eric 的提示:不要只使用 int.Parse
而是uint.Parse
,因为值可能大于 2147483648(就像示例一样),因此不适合有符号的 int。
看看Color.FromArgb
.下面是 MSDN 文章。它返回一个Color
,允许您访问a,r,g和b值。