如何从十六进制颜色代码(例如#FFDFD991)中获得颜色?
我正在读取一个文件,并得到一个十六进制的颜色代码。我需要为十六进制颜色代码创建相应的System.Windows.Media.Color实例。框架中是否有一个内置的方法来做到这一点?
如何从十六进制颜色代码(例如#FFDFD991)中获得颜色?
我正在读取一个文件,并得到一个十六进制的颜色代码。我需要为十六进制颜色代码创建相应的System.Windows.Media.Color实例。框架中是否有一个内置的方法来做到这一点?
当前回答
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));
}
其他回答
你可以使用ColorConverter.ConvertFromString(string)方法将你的字符串(十六进制)转换为颜色。
示例:(这适用于ARGB,如“#FF1E1E1E”。
Control.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#1E1E1E"));
在asp.net:
color_black = (Color)new ColorConverter().ConvertFromString("#FF76B3");
假设你是指HTML类型的RGB代码(称为十六进制代码,如#FFCC66),使用ColorTranslator类:
System.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") ;
XNA / Monogame (Microsoft.Xna.Framework.Color)。 适用于6或8(带alpha)字符的十六进制字符串 可能还有更好的替代方案(位屏蔽/移位)。
using Microsoft.Xna.Framework;
using System.Globalization;
public static class ColorBuilder
{
public static Color FromHex(string color)
{
var hex = color.Replace("#", string.Empty);
var h = NumberStyles.HexNumber;
var r = int.Parse(hex.Substring(0, 2), h);
var g = int.Parse(hex.Substring(2, 2), h);
var b = int.Parse(hex.Substring(4, 2), h);
var a = 255;
if (hex.Length == 8)
{
a = int.Parse(hex.Substring(6, 2), h);
}
return new Color(r, g, b, a);
}
}
//create a blue color
var color = ColorBuilder.FromHex("#2733C5"); //or ColorBuilder.FromHex("2733C5");
//create a blue color with 50% alpha
var colorTrans = ColorBuilder.FromHex("#2733C580");
我在我的项目中使用了ColorDialog。ColorDialog有时返回“Red”,“Fhushia”,有时返回“fff000”。我这样解决了这个问题也许能帮到别人。
SolidBrush guideLineColor;
if (inputColor.Any(c => char.IsDigit(c)))
{
string colorcode = inputColor;
int argbInputColor = Int32.Parse(colorcode.Replace("#", ""), NumberStyles.HexNumber);
guideLineColor = new SolidBrush(Color.FromArgb(argbInputColor));
}
else
{
Color col = Color.FromName(inputColor);
guideLineColor = new SolidBrush(col);
}
InputColor是ColorDialog的返回值。
谢谢大家回答这个问题。这对我帮助很大。