How do I get the color from a hexadecimal color code using .NET?
如何从十六进制颜色代码(如
我正在读取一个文件,并获得一个十六进制颜色代码。我需要为十六进制颜色代码创建相应的
我假设这是一个argb代码…你是指
1 2 3 | using System.Windows.Media; Color color = (Color)ColorConverter.ConvertFromString("#FFDFD991"); |
假设您是指HTML类型的RGB代码(称为十六进制代码,如ffcc66),请使用colortranslator类:
1 | System.Drawing.Color col = System.Drawing.ColorTranslator.FromHtml("#FFCC66"); |
但是,如果使用的是argb十六进制代码,则可以使用system.windows.media命名空间中的colorconverter类:
1 2 | Color col = ColorConverter.ConvertFromString("#FFDFD991") as Color; //or = (Color) ColorConverter.ConvertFromString("#FFCC66") ; |
如果您不想使用颜色转换器,您可以很容易地使用:
1 2 3 | string colorcode ="#FFFFFF00"; int argb = Int32.Parse(colorcode.Replace("#",""), NumberStyles.HexNumber); Color clr = Color.FromArgb(argb); |
颜色代码只是argb值的十六进制表示。
编辑
如果需要使用4个值而不是单个整数,则可以使用此值(组合多个注释):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | string colorcode ="#FFFFFF00"; colorcode = colorcode.TrimStart('#'); Color col; // from System.Drawing or System.Windows.Media if (colorcode.Length == 6) col = Color.FromArgb(255, // hardcoded opaque int.Parse(colorcode.Substring(0,2), NumberStyles.HexNumber), int.Parse(colorcode.Substring(2,2), NumberStyles.HexNumber), int.Parse(colorcode.Substring(4,2), NumberStyles.HexNumber)); else // assuming length of 8 col = Color.FromArgb( int.Parse(colorcode.Substring(0, 2), NumberStyles.HexNumber), int.Parse(colorcode.Substring(2, 2), NumberStyles.HexNumber), int.Parse(colorcode.Substring(4, 2), NumberStyles.HexNumber), int.Parse(colorcode.Substring(6, 2), NumberStyles.HexNumber)); |
注1:数字样式在System.Globalization中。注2:请提供您自己的错误检查(颜色代码应该是6或8个字符的十六进制值)
还有一个简单的小扩展方法:
1 2 3 4 5 6 7 8 9 10 | static class ExtensionMethods { public static Color ToColor(this uint argb) { return Color.FromArgb((byte)((argb & -16777216)>> 0x18), (byte)((argb & 0xff0000)>> 0x10), (byte)((argb & 0xff00) >> 8), (byte)(argb & 0xff)); } } |
使用中:
1 | Color color = 0xFFDFD991.ToColor(); |
下面的三个变体给出了完全相同的颜色。最后一个具有在Visual Studio 2010 IDE中突出显示的优点(可能是正在执行的Resharper),使用适当的颜色。
1 2 3 4 5 | var cc1 = System.Drawing.ColorTranslator.FromHtml("#479DEE"); var cc2 = System.Drawing.Color.FromArgb(0x479DEE); var cc3 = System.Drawing.Color.FromArgb(0x47, 0x9D, 0xEE); |
1 2 3 4 5 6 7 8 9 10 11 12 | private Color FromHex(string hex) { if (hex.StartsWith("#")) hex = hex.Substring(1); if (hex.Length != 6) throw new Exception("Color not valid"); return Color.FromArgb( int.Parse(hex.Substring(0, 2), System.Globalization.NumberStyles.HexNumber), int.Parse(hex.Substring(2, 2), System.Globalization.NumberStyles.HexNumber), int.Parse(hex.Substring(4, 2), System.Globalization.NumberStyles.HexNumber)); } |
您可以使用以下代码:
1 | Color color = System.Drawing.ColorTranslator.FromHtml("#FFDFD991"); |
我需要将十六进制颜色代码转换为system.drawing.color,特别是在wpf表单上使用一种爱丽丝蓝的阴影作为背景,然后发现找到答案的时间比预期的要长:
1 | using System.Windows.Media; |
——
1 2 | System.Drawing.Color myColor = System.Drawing.ColorTranslator.FromHtml("#EFF3F7"); this.Background = new SolidColorBrush(System.Windows.Media.Color.FromArgb(myColor.A, myColor.R, myColor.G, myColor.B)); |
如果您想使用Windows应用商店应用程序,请按照@hans kesting和@jink answer进行操作:
1 2 3 4 5 6 | string colorcode ="#FFEEDDCC"; int argb = Int32.Parse(colorcode.Replace("#",""), NumberStyles.HexNumber); tData.DefaultData = Color.FromArgb((byte)((argb & -16777216) >> 0x18), (byte)((argb & 0xff0000) >> 0x10), (byte)((argb & 0xff00) >> 8), (byte)(argb & 0xff)); |
对于任何试图从十六进制颜色代码转换为系统颜色的人来说,这篇文章已经成为他们关注的焦点。因此,我想我应该添加一个全面的解决方案来处理6位(rgb)和8位(argb)十六进制值。
默认情况下,根据Microsoft,当从RGB值转换为argB值时
The alpha value is implicitly 255 (fully opaque).
这意味着,通过将ff添加到6位(rgb)十六进制颜色代码,它将成为8位argb十六进制颜色代码。因此,可以创建一个简单的方法来处理a rgb和rgb十六进制,并将它们转换为适当的颜色结构。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public static System.Drawing.Color GetColorFromHexValue(string hex) { string cleanHex = hex.Replace("0x","").TrimStart('#'); if (cleanHex.Length == 6) { //Affix fully opaque alpha hex value of FF (225) cleanHex ="FF" + cleanHex; } int argb; if (Int32.TryParse(cleanHex, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out argb)) { return System.Drawing.Color.FromArgb(argb); } //If method hasn't returned a color yet, then there's a problem throw new ArgumentException("Invalid Hex value. Hex must be either an ARGB (8 digits) or RGB (6 digits)"); } |
这是受到汉斯·凯斯廷回答的启发。
您可以看到Silverlight/WPF将椭圆设置为十六进制颜色,以便使用十六进制值:
1 | your_contorl.Color = DirectCast(ColorConverter.ConvertFromString("#D8E0A627"), Color) |
使用
1 | System.Drawing.Color.FromArgb(myHashCode); |
最基本的就是:
1 | Color.ParseColor("#ff43a047") |
WPF:
1 2 3 4 5 6 7 | using System.Windows.Media; //hex to color Color color = (Color)ColorConverter.ConvertFromString("#7AFF7A7A"); //color to hex string hexcolor = color.ToString(); |
如果你指的是像
如果需要根据颜色的十六进制值获取颜色,请遵循Odd的建议。