C#Color FromString(与ToString相反)?

时间:2016-09-05 17:21:20

标签: c# colors

我是C#新手,试图将C#颜色保存到文件中。当我将颜色写为.ToString()时,它就会出现,例如:

Color [Red]
Color [A=255, R=128, G=128, B=255]

这是Color的.ToString()默认值,但是在很多工作中读取它,因为它有时是RGB,有时候是单词。虽然这可以通过字符串解析和一些努力来处理,但我想知道是否有一种初学者友好的方式来转换“颜色[A = 255,R = 128,G = 128,B = 255]”或“颜色” [红色]“一步返回C#颜色对象,或者首先将其写入文件的更好方式(假设文件结构没有限制)。

编辑:

我刚刚意识到我的问题可能与此问题重复:Load and save Color value

老实说,我仍然不理解可序列化的解决方案,我不熟悉可序列化的对象。

这是我正在使用的当前“初学者”解决方案:

outfile.WriteLine( col.R + "," + col.G + "," + col.B );

将信息放在单个字符串“255,127,0”等中,然后在文件读取我做:

var colorStr = infile.ReadLine().Split(',');
Color clr = Color.FromArgb(colorStr[0], colorStr[1], colorStr[2]);

这不处理alpha,并且它不是最佳的,但是为了初学者试图以一种容易读回并向老师的帮助解释的方式将颜色输出到.txt文件,这有是我能找到的“最简单”的解决方案。

感谢用户Andreas的发帖。

2 个答案:

答案 0 :(得分:2)

您可以使用TypeDescriptor.GetConverter与不变字符串进行转换。这种格式在序列化器和导出方法中经常使用,因为它可以进行往返:

using System.ComponentModel;
...
Color c = Color.FromArgb(205,240,248,250);
string data = TypeDescriptor.GetConverter(typeof(Color)).
                                ConvertToInvariantString(c);
Console.WriteLine(data);

Color c2 = (Color)TypeDescriptor.GetConverter(typeof(Color)).
                                ConvertFromInvariantString(data);
Console.WriteLine(c2.ToString());

输出:

  

205,240,248,250
  颜色[A = 205,R = 240,G = 248,B = 250]

如果A值为255,则会在字符串中省略该部分。

让序列化程序更容易为你做这样的事情,而不是手动转换或解析数据,特别是如果有几个。大多数序列化器都非常快速且易于使用。

答案 1 :(得分:1)

只是做: Color.FromArgb(255, 128, 128, 255);