C#字符串的颜色(与ToString相反)?

C#字符串的颜色(与ToString相反)?,c#,colors,C#,Colors,我是C#新手,尝试将C#颜色保存到文件中。当我将颜色写为.ToString()时,它会显示为,例如: Color [Red] Color [A=255, R=128, G=128, B=255] 这是颜色的.ToString()默认值,但要想读回它需要大量的工作,因为它有时是RGB,有时是单词。虽然这可以通过字符串解析和一些努力来处理,但我想知道是否有一种初学者友好的方法可以将“Color[a=255,R=128,G=128,B=255]”或“Color[Red]”一步转换回C#Color对象

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

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

编辑:

我刚刚意识到我的问题可能是这个问题的重复:

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

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

outfile.WriteLine( col.R + "," + col.G + "," + col.B );
它将信息以单个字符串“255127,0”等形式输出,然后在文件上读取I do:

var colorStr = infile.ReadLine().Split(',');
Color clr = Color.FromArgb(colorStr[0], colorStr[1], colorStr[2]);
这不能处理alpha,也不是最优的,但是对于一个初学者来说,这是我能找到的“最简单”的解决方案,他试图以一种容易读入并向老师解释的方式将颜色输出到.txt文件中

感谢用户Andreas的发帖。

只需执行以下操作:
Color.FromArgb(255、128、128、255)

只需执行以下操作:
Color.FromArgb(255、128、128、255)

您可以使用
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,它将忽略字符串中的该部分


让序列化程序在它们的列表上为您这样做比手动转换或解析数据更容易,特别是在有多个数据的情况下。大多数序列化程序都非常快速且易于使用。

您可以使用
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,它将忽略字符串中的该部分


让序列化程序在它们的列表上为您这样做比手动转换或解析数据更容易,特别是在有多个数据的情况下。大多数序列化程序都非常快速且易于使用。

不应使用
ToString
进行序列化。
[Serializable]公共类SerColor{public byte Red{get;set;}公共字节Green{get;set;}公共字节Blue{get;set;}公共字节Alpha{get;set;}公共SerColor(){公共色(色c){Red=c.R;Green=c.G;Blue=c.B;Alpha=c.A;}公共色(色c){return System.Drawing.Color.FromArgb(c.Alpha,c.Red,c.Green,c.Blue);}
不应使用
ToString
进行序列化。
[Serializable]公共类SerColor{public byte Red{get;set;}public byte Green{get;set;}public byte Blue{get;set;}public byte Alpha{get;set;}public SerColor(){}public SerColor(Color c){Red=c.R;Green=c.G;Blue=c.B;Alpha=c.A;}public Color(SerColor c){返回系统.Drawing.Color.FromArgb(c.Alpha,c.Red,c.Green,c.Blue);}