【发布时间】:2016-09-05 17:21:20
【问题描述】:
我是 C# 新手,正在尝试将 C# 颜色保存到文件中。当我将颜色写为 .ToString() 时,它会显示为,例如:
Color [Red]
Color [A=255, R=128, G=128, B=255]
这是 Color 的 .ToString() 默认值,但由于它有时是 RGB 有时是一个单词,所以需要大量工作才能将其读回。虽然这可以通过字符串解析和一些努力来处理,但我想知道是否有一种适合初学者的方式来转换“Color [A=255, R=128, G=128, B=255]”或“Color [Red]" 一步回到 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 的发帖。
【问题讨论】:
-
你不应该使用
ToString进行序列化。 -
[Serializable] public class 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 Color(SerColor c) { return System.Drawing.Color.FromArgb(c.Alpha, c.Red, c.Green, c.Blue); } }