如何将System.Windows.Media.Color对象序列化为sRGB字符串?

dth*_*her 15 wpf serialization colors

我需要将WPF应用程序中使用的颜色序列化到数据库.我想使用sRGB值,因为他们对我们这些在过去几年中进行Web开发的人更熟悉.

如何从System.Windows.Media.Color对象获取ARGB字符串(如#FFFFFFFF)?

更新:我被MSDN上的文档误导了.正如下面提到的@Kris,该ToString()方法的文档不正确.虽然它说ToString()"使用ScRGB通道创建颜色的字符串表示",但如果使用该FromARGB()方法创建颜色,它实际上将返回ARGB十六进制格式的字符串.我想这是一个没有文档记录的功能.

请参阅http://msdn.microsoft.com/en-us/library/ms606572.aspx

Kri*_*is 19

如果使用Color.FromRgb或Color.FromArgb而不是FromScRgb创建颜色,则应从ToString获取十六进制字符串结果.

如果你想手动完成

string.Format("#{0:X2}{1:X2}{2:X2}{3:X2}", c.A, c.R, c.G, c.B);
Run Code Online (Sandbox Code Playgroud)

你可以使用int.Parse(,NumberStyles.HexNumber)来反过来.

注意sRGB和scRGB指的是不同的颜色空间,请确保使用您想要的颜色空间.


Ant*_*eth 8

你也可以这样做:

string myHex = new ColorConverter().ConvertToString(myColor);
Run Code Online (Sandbox Code Playgroud)


Phi*_*son 5

我创建了一个结构来处理转换和序列化。它为我解决了两个问题:它是可序列化的,并且可以纠正拼写;)

[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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

只使用Colour你会使用的地方System.Windows.Media.Color

  • 这叫做讽刺。 (8认同)