using System.Windows.Media;
//hex to color
Color color = (Color)ColorConverter.ConvertFromString("#7AFF7A7A");
//color to hex
string hexcolor = color.ToString();
0
还有这个简洁的小扩展方法:
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));
}
}
下面的三个变体给出完全相同的颜色 . 最后一个具有在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);
3
如果您不想使用ColorTranslator,可以轻松完成:
string colorcode = "#FFFFFF00";
int argb = Int32.Parse(colorcode.Replace("#", ""), NumberStyles.HexNumber);
Color clr = Color.FromArgb(argb);
colorcode只是ARGB值的十六进制表示 .
EDIT
如果您需要使用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));
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)");
}
14 回答
使用
WPF:
还有这个简洁的小扩展方法:
正在使用:
如果您想使用Windows应用商店应用,请关注@Hans Kesting和@Jink回答:
下面的三个变体给出完全相同的颜色 . 最后一个具有在Visual Studio 2010 IDE中突出显示的好处(也许是正在使用它的ReSharper),具有适当的颜色 .
如果您不想使用ColorTranslator,可以轻松完成:
colorcode只是ARGB值的十六进制表示 .
EDIT
如果您需要使用4个值而不是单个整数,则可以使用此值(组合多个注释):
Note 1 :NumberStyles位于System.Globalization中 .
Note 2 :请提供您自己的错误检查(颜色代码应为6或8个字符的十六进制值)
对于试图从十六进制颜色代码转换为系统颜色的任何人来说,这篇文章已成为一个转折点 . 因此,我想我会添加一个处理6位(RGB)和8位(ARGB)十六进制值的综合解决方案 .
默认情况下,根据Microsoft,从RGB转换为ARGB值时
这意味着通过将FF添加到6位(RGB)十六进制颜色代码,它将成为8位ARGB十六进制颜色代码 . 因此,可以创建一个简单的方法来处理ARGB和RGB十六进制,并将它们转换为适当的Color结构 .
这是受到Hans Kesting的回答的启发 .
我需要将HEX颜色代码转换为System.Drawing.Color,特别是作为WPF表单背景的Alice Blue的阴影,发现找到答案需要比预期更长的时间:
您可以使用以下代码:
您可以看到Silverlight/WPF sets ellipse with hexadecimal colour使用十六进制值:
如果你的意思是
.GetHashCode()
中的HashCode,那我就回去了 . 散列函数不是双向的,你可以只使用'forward',而不是返回 .如果您需要根据颜色的十六进制值获取颜色,请遵循Oded的建议 .
假设您的意思是HTML类型的RGB代码(称为十六进制代码,例如#FFCC66),请使用ColorTranslator类:
但是,如果您使用的是ARGB十六进制代码,则可以使用System.Windows.Media命名空间中的ColorConverter类:
我'm assuming that'是ARGB代码......你是指
System.Drawing.Color
还是System.Windows.Media.Color
?例如,后者用于WPF . 我还没有看到有人提到它,所以万一你正在寻找它: