如何在字符串中存储颜色?

时间:2012-01-12 09:59:30

标签: c# .net string colors rgb

我想将Color存储在字符串中(如果它们是人类可读格式)和ToArgb()(如果不是)。

颜色为红色,然后将其存储在“红色”字符串中,如果颜色为绿色变体,则存储为“ff40ff80”。

在运行时我想将此字符串转换回Color类Object?

4 个答案:

答案 0 :(得分:4)

你很幸运。 Color.ToString()方法会为您执行此操作:

  

返回值

     

输入:System.String

     

如果使用FromName方法或FromKnownColor方法从预定义颜色创建颜色,则为此颜色的名称的字符串;否则,一个由ARGB组件名称及其值组成的字符串。

答案 1 :(得分:3)

就像Cody Gray已经说过从颜色中获取信息非常简单。问题是让它恢复原状。

所以也许这会给你一些起点。它没有经过测试,但是你应该就如何解决它提出一些想法。

public Color FromString(string name)
{
    if(String.IsNullOrWhitespace(name))
    {
        throw new ArgumentException("name");
    }

    KnownColor knownColor;

    if(Enum.TryParse(name, out knownColor))
    {
        return Color.FromKnownColor(knownColor);
    }

    return ColorTranslator.FromHtml(name);
}

我只记得有几个问题,取决于颜色如何写成字符串。对于每个在框架中存在一些类,但它们在命名空间周围被分割(如ColorTranslator)。

请注意,如果您只是致电Color.FromName(Color.FromArgb(3,4,5,6).ToString()),您将获得一个带名字的颜色,但argb值全部为零!

答案 2 :(得分:3)

Color color = Color.Red;
string colorName = color.Name; // this gives you the ability to switch back to Color through Color.FromName()
Color sameColor = Color.FromName(colorName);

答案 3 :(得分:0)

我发现提到的解决方案在从 Color 到 string 再到 Color 的过程中不能有效地工作。它们取决于颜色是否是预定义的并且是否有名称。以下代码对我有用。

从颜色到字符串:

string ConvertColorToString(Color color)
{
    return Convert.ToString(color.ToArgb())
}

从字符串到颜色:

Color ConvertStringToColor(string s)
{
    return Color.FromArgb(Convert.ToInt32(s))
}

通过将颜色转换为 32 位 ARGB 整数表示,在转换过程中保留了颜色语义。