.NET中颜色的转换方法总结 博客分类: WPF开发 c#wpf
程序员文章站
2024-03-21 21:48:22
...
1,AGRB字符串"#FF00AFDB"转Color
法一:System.Drawing.ColorTranslator类
ColorTranslator还可以将Color转成Html的颜色代码,但是Alpha值将会丢失,如"#FF00AFDB"将会变成"#00AFDB"
法二:System.Drawing.ColorConverter类
备注:对于WPF,对应的是System.Windows.Media.ColorConverter,ConvertFromString也变成了静态方法
法三:将"#FF00AFDB"转换成int型的ARGB数字,再利用构造函数构建
2,已知颜色的名字创建Color,如red,green等
3,不知道颜色的名字,可以用系统定义的颜色,如下面几种方式
4,Color转Int32
看到这里你可能要问了,Color转int有啥用啊?其实如果你在用一些现有的图像库的时候,它们经常将Color表现为一个int值。
在这种情况下,ARGB值是通过其AARRGGBB的byte的顺序用32位int表现的。这里我们可以做如下转换:
法一:System.Drawing.ColorTranslator类
Color color = ColorTranslator.FromHtml("#FF00AFDB");
ColorTranslator还可以将Color转成Html的颜色代码,但是Alpha值将会丢失,如"#FF00AFDB"将会变成"#00AFDB"
法二:System.Drawing.ColorConverter类
ColorConverter colorConverter = new ColorConverter(); Color color = (Color)colorConverter.ConvertFromString("#FF00AFDB");
备注:对于WPF,对应的是System.Windows.Media.ColorConverter,ConvertFromString也变成了静态方法
Color color = (Color)ColorConverter.ConvertFromString("#FF00AFDB");
法三:将"#FF00AFDB"转换成int型的ARGB数字,再利用构造函数构建
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());
2,已知颜色的名字创建Color,如red,green等
Color color = Color.FromName("red");
3,不知道颜色的名字,可以用系统定义的颜色,如下面几种方式
Color color = Color.FromKnownColor(KnownColor.ActiveBorder); Color color = Color.Red; Color color = SystemColors.ButtonFace;
4,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; }以下是这两个方法的一个综合应用:
Rectangle rectangle = new Rectangle(); SolidColorBrush scb = new SolidColorBrush(); scb.Color = "#FFF5F5F5".ToColor(); rectangle.Fill = scb; MessageBox.Show(scb.Color.ToArgb().ToString());