- 16进制色字符串转ARGB
做Web的都喜欢用16进制字符串标识颜色,比如“#F5F5F5”这类的,自然这个到了Silverlight/WPF中就要用ARGB表示:“#FFF5F5F5”(前两位标识Alpha,即透明度)。这在XAML中没有任何问题,可是如果我们想在代码中设置颜色呢,或者是从XML中读取的相关值呢?
这里提供一个代码片段,帮助我们将16进制字符串转为ARGB色
/// <summary> /// color扩展方法, /// </summary> public static class ColorOpr { public static Color ToColor(this string colorName) { if (colorName.StartsWith("#")) colorName = colorName.Replace("#", string.Empty); int v = int.Parse(colorName, System.Globalization.NumberStyles.HexNumber); return new Color() { A = Convert.ToByte((v >> 24) & 255), R = Convert.ToByte((v >> 16) & 255), G = Convert.ToByte((v >> 8) & 255), B = Convert.ToByte((v >> 0) & 255) }; } }
之后需要调用扩展方法
Rectangle rectangle = new Rectangle(); rectangle.Fill = new SolidColorBrush("#FFF5F5F5".ToColor());
- Color转Int32
看到这里你可能要问了,Color转int有啥用啊?其实如果你在用一些现有的图像库的时候,它们经常将Color表现为一个int值。在这种情况下,ARGB值是通过其AARRGGBB的byte的顺序用32位int表现的。这里我们可以做如下转换:
public static int ToArgb(this Color color) { int argb = color.A << 24; argb += color.R << 16; argb += color.G << 8; argb += color.B; return argb; }