我会将Color保存为
colorObj.ToString()
然后保存为颜色[A = 255,R = 255,G = 255,B = 128]
现在如何将此字符串转换回颜色?
我已经通过将RGB存储在整数值中来解决问题但是该值是负的并且在有人从代码中应用它之前没有意义。这些[A = 255,R = 255,G = 255,B = 128] ARGB值更具可读性。
答案 0 :(得分:4)
您可以将颜色存储(并加载)为HTML值,例如#FFDFD991
。然后使用System.Drawing.ColorTranslator.ToHtml()
和System.Drawing.ColorTranslator.FromHtml()
。另请参阅this question。
答案 1 :(得分:1)
在Jontata的回答中,这就是我想出来的。
它是Unity用户的一个很好的解决方案,因为它不需要绘图库。我只是制作自己的ToString函数以便于转换。
功能:
public static string colorToString(Color color){
return color.r + "," + color.g + "," + color.b + "," + color.a;
}
public static Color stringToColor(string colorString){
try{
string[] colors = colorString.Split (',');
return new Color (float.Parse(colors [0]), float.Parse(colors [1]), float.Parse(colors [2]), float.Parse(colors [3]));
}catch{
return Color.white;
}
}
用法:
Color red = new Color(1,0,0,1);
string redStr = colorToString(red);
Color convertedColor = stringToColor(redStr); //convertedColor will be red
答案 2 :(得分:0)
不那么优雅的解决方案可能是拆分字符串并提取您需要的值。类似的东西:
var p = test.Split(new char[]{',',']'});
int A = Convert.ToInt32(p[0].Substring(p[0].IndexOf('=') + 1));
int R = Convert.ToInt32(p[1].Substring(p[1].IndexOf('=') + 1));
int G = Convert.ToInt32(p[2].Substring(p[2].IndexOf('=') + 1));
int B = Convert.ToInt32(p[3].Substring(p[3].IndexOf('=') + 1));
必须有更好的方法来做到这一点,这是首先想到的。
答案 3 :(得分:0)
如果您首先将Color转换为Int ColorTranslator.ToWin32(Color win32Color) 然后将该Int转换为String, 然后只需将其转换回Int并将该int转换回Color via ColorTranslator.FromWin32(Color win32Color)
//
Color CColor = Color.FromArgb(255, 20, 200, 100);
int IColor;
String SString;
//from color to string
IColor = ColorTranslator.ToWin32(CColor);
SString = IColor.ToString();
//from string to color
IColor = int.Parse(SString);
CColor = ColorTranslator.FromWin32(IColor);