如何从十六进制颜色代码(例如#FFDFD991)获取颜色?
我正在读取一个文件,并获得一个十六进制颜色代码。我需要创建相应的 System.Windows.Media.Color 实例来表示该十六进制颜色代码。在框架中是否有内置方法可以实现这一点?
我假设你指的是ARGB代码... 你是指 System.Drawing.Color 还是 System.Windows.Media.Color?后者例如在WPF中使用。我还没有看到任何人提到它,所以以防万一,如果你正在寻找它:
using System.Windows.Media;
Color color = (Color)ColorConverter.ConvertFromString("#FFDFD991");
Color.FromArgb方法可能更容易。如果使用浮点数透明度,需要乘以255。 - ThorarinSystem.Drawing.Color col = System.Drawing.ColorTranslator.FromHtml("#FFCC66");
如果你使用的是ARGB十六进制代码,你可以使用System.Windows.Media命名空间中的ColorConverter类:
Color col = ColorConverter.ConvertFromString("#FFDFD991") as Color;
//or = (Color) ColorConverter.ConvertFromString("#FFCC66") ;
如果您不想使用ColorTranslator,也可以轻松地完成:
string colorcode = "#FFFFFF00";
int argb = Int32.Parse(colorcode.Replace("#", ""), NumberStyles.HexNumber);
Color clr = Color.FromArgb(argb);
颜色代码只是ARGB值的十六进制表示。
编辑
如果需要使用4个值而不是单个整数,可以使用以下方法(结合几条评论):
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:NumberStyles位于System.Globalization命名空间中。
注意2:请提供您自己的错误检查(colorcode应该是6或8个字符的十六进制值)。
colorcode = colorcode.Replace("#", "")后,直接使用int a = byte.parse(colorcode.Substring(0,2), NumberStyles.HexNumber);进行转换,对于r、g和b也是同样的操作。不要忘记将 Substring 的第一个参数 - 索引 - 分别替换为2(对于r),4(对于g)和6(对于b)。 - M. Mimpen以下三个变体的颜色完全相同。最后一个的好处是在 Visual Studio 2010 IDE 中可以以正确的颜色进行突出显示(可能是 ReSharper 在起作用)。
var cc1 = System.Drawing.ColorTranslator.FromHtml("#479DEE");
var cc2 = System.Drawing.Color.FromArgb(0x479DEE);
var cc3 = System.Drawing.Color.FromArgb(0x47, 0x9D, 0xEE);
System.Windows.Media.Color。 - Sinatr还有这个简洁的扩展方法:
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));
}
}
使用中:
Color color = 0xFFDFD991.ToColor();
& 0xFF操作,而无需使用所有这些不同的值来进行&运算。 - NyergudsColor.FromArgb 没有一个简单接受 Int32 的重载吗?我的意思是,System.Drawing.Color 有这个功能。 - Nyerguds我需要将一个十六进制颜色代码转换为System.Drawing.Color,具体来说是Alice Blue的一种背景颜色用于WPF表单上,并发现寻找答案比预期花费了更长的时间:
using System.Windows.Media;
抱歉,我不是一个翻译程序,但是我可以告诉你这段代码只包含一个空的段落元素。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));
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));
}
您可以使用以下代码:
Color color = System.Drawing.ColorTranslator.FromHtml("#FFDFD991");
如果您想使用Windows Store应用程序进行操作,请参考@Hans Kesting和@Jink的答案:
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));
在ASP.NET中:
color_black = (Color)new ColorConverter().ConvertFromString("#FF76B3");
ColorConverter 可在 System.Drawing 和 System.Windows.Media 中使用。您指的是哪一个(两者都与 ASP.NET 无关)? - Klaus GütterSystem.Drawing 中的 ColorConverter 可以在 ASP.NET 中使用。 - Khalil Youssefi
Color.FromHex("#FFDFD991")。 - benscabbia