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

本文关键字:字符串 存储 颜色 | 更新日期: 2023-09-27 18:20:16

如果Color是Human Readable格式,我想将其存储在字符串中,如果不是,我想存储ToArgb()。

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

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

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

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);

你很幸运。Color.ToString()方法将为您做到这一点:

返回值

类型:System.String

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

就像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);
}

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

请注意,如果您简单地调用Color.FromName(Color.FromArgb(3,4,5,6).ToString()),您将得到一个带有名称的颜色,但argb值都为零!

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

从颜色到字符串:

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

从字符串到颜色:

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

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