【问题标题】:C# Color FromString (as in opposite of ToString)? [closed]C# Color FromString(与 ToString 相反)? [关闭]
【发布时间】: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); } }

标签: c# colors


【解决方案1】:

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

让序列化程序在诸如它们的列表之类的东西上为您执行此操作会更容易,而不是手动转换或解析数据,尤其是在有多个数据的情况下。大多数序列化程序都非常快速且易于使用。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-31
      • 1970-01-01
      • 1970-01-01
      • 2013-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多