如何将颜色存储在字符串中
本文关键字:字符串 存储 颜色 | 更新日期: 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整数表示,可以在转换过程中保留颜色语义。