我需要将WPF应用程序中使用的颜色序列化到数据库中。我想使用sRGB值,因为他们对我们这些在过去几年中进行Web开发的人更熟悉。
如何从System.Windows.Media.Color对象获取ARGB字符串(如#FFFFFFFF)?
更新:我被MSDN上的文档误导了。正如下面提到的@Kris,ToString()
方法的文档不正确。虽然它说ToString()“使用ScRGB通道创建颜色的字符串表示”,但如果颜色是使用FromARGB()
方法创建的,它实际上将返回ARGB十六进制格式的字符串。我想这是一个没有文档记录的功能。
答案 0 :(得分:18)
如果使用Color.FromRgb或Color.FromArgb而不是FromScRgb创建颜色,则应从ToString获取十六进制字符串结果。
如果你想手动完成
string.Format("#{0:X2}{1:X2}{2:X2}{3:X2}", c.A, c.R, c.G, c.B);
你可以使用int.Parse(,NumberStyles.HexNumber)来反过来。
注意sRGB和scRGB指的是不同的颜色空间,请确保使用你想要的颜色空间。
答案 1 :(得分:8)
你也可以这样做:
string myHex = new ColorConverter().ConvertToString(myColor);
答案 2 :(得分:4)
我创建了一个处理转换和序列化的结构。它解决了我的两个问题:它是可序列化的,它可以纠正拼写;)
[Serializable]
public struct Colour
{
public byte A;
public byte R;
public byte G;
public byte B;
public Colour(byte a, byte r, byte g, byte b)
{
A = a;
R = r;
G = g;
B = b;
}
public Colour(Color color)
: this(color.A, color.R, color.G, color.B)
{
}
public static implicit operator Colour(Color color)
{
return new Colour(color);
}
public static implicit operator Color(Colour colour)
{
return Color.FromArgb(colour.A, colour.R, colour.G, colour.B);
}
}
只需使用Colour
,否则您将使用System.Windows.Media.Color
答案 3 :(得分:2)
如果您的目的是序列化为文件并反序列化回颜色对象,我认为您最好将颜色转换为Int32,反之亦然。将Int32序列化/反序列化并不聪明。如果这是你的目的,这里是代码: 颜色到Int32:
byte[] color = new byte[4];
color[0] = Color.B;
color[1] = Color.G;
color[2] = Color.R;
color[3] = Color.A;
Int32 intColor = System.BitConverter.ToInt32(color, 0);
Int32 To Color:
byte[] bytes = System.BitConverter.GetBytes(intColor);
Color =new System.Windows.Media.Color(){B= bytes[0], G=bytes[1], R=bytes[2], A=bytes[3]};
答案 4 :(得分:1)
这个答案适用于GDI颜色,而不是WPF,所以可能没什么帮助。
您可以像这样获取HTML颜色字符串(和背面)
System.Drawing.Color c = System.Drawing.ColorTranslator.FromHtml("#F5F7F8");
String strHtmlColor = System.Drawing.ColorTranslator.ToHtml(c);
here是MSDN文档。
答案 5 :(得分:0)
您可以从Color实例中获取A,R,G和B值作为字节,因此您只需将字节转换为十六进制并将十六进制值连接为字符串。
答案 6 :(得分:0)
System.Windows.Media.Color toString()方法有inbuild实现,它给出了颜色的十六进制代码。
它自己的类接口的片段
//
// Summary:
// Creates a string representation of the color using the sRGB channels.
//
// Returns:
// The string representation of the color. The default implementation represents
// the System.Byte values in hex form, prefixes with the # character, and starts
// with the alpha channel. For example, the System.Windows.Media.Color.ToString()
// value for System.Windows.Media.Colors.AliceBlue is #FFF0F8FF.
public override string ToString();