C# 如何在字符串中存储颜色?
如果颜色是人类可读的格式,我希望以字符串形式存储,如果不是,则以ToArgb()形式存储 颜色是红色,然后存储在“红色”字符串中,如果颜色是绿色的某个变体,则存储为“ff40ff80” 在运行时,我想将此字符串转换回Color类对象?您很幸运。该方法将为您执行以下操作: 返回值 类型:C# 如何在字符串中存储颜色?,c#,.net,string,colors,rgb,C#,.net,String,Colors,Rgb,如果颜色是人类可读的格式,我希望以字符串形式存储,如果不是,则以ToArgb()形式存储 颜色是红色,然后存储在“红色”字符串中,如果颜色是绿色的某个变体,则存储为“ff40ff80” 在运行时,我想将此字符串转换回Color类对象?您很幸运。该方法将为您执行以下操作: 返回值 类型:System.String 如果颜色是通过使用FromName方法或fromnowncolor方法从预定义颜色创建的,则为该颜色名称的字符串;否则,将显示由ARGB组件名称及其值组成的字符串 就像科迪·格雷(Cod
System.String
如果颜色是通过使用FromName
方法或fromnowncolor
方法从预定义颜色创建的,则为该颜色名称的字符串;否则,将显示由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);
}
我只记得有几个问题,这取决于颜色是如何写为字符串的。对于每一个,框架中都存在一些类,但它们在名称空间中被分割开来(如ColorTranslator
)
请注意,如果您只需调用
Color.FromName(Color.FromArgb(3,4,5,6).ToString())
您将得到一个带有名称的颜色,但argb值均为零 我发现上面提到的解决方案在从颜色到字符串再到颜色的过程中效果不好。它们取决于颜色是否是预定义的,是否有名称。下面的代码适用于我
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);
要从颜色转换为字符串:
string ConvertColorToString(Color color)
{
return Convert.ToString(color.ToArgb())
}
要从字符串转换为颜色:
Color ConvertStringToColor(string s)
{
return Color.FromArgb(Convert.ToInt32(s))
}
通过将颜色转换为32位ARGB整数表示,颜色语义在转换过程中得以保留。从
System.String
解析回System.Drawing.color
可以使用System.Drawing.colorplator.FromHtml
(无需使用.ToString()
您也可以执行System.Drawing.colorplator.ToHtml
)