反序列化System.Drawing.Color值 - 内置方法?

时间:2012-11-02 15:07:16

标签: c# colors deserialization

我想知道.Net Framework中是否已有一个方法用于从包含RGB三元组的字符串中实例化Color值,如下所示:

  

“166,103,208”

如果Color存储在我的应用程序的app.config中,它将存储为字符串。我想知道.Net如果可能的话,如何将这些字符串值反序列化为Colors。

3 个答案:

答案 0 :(得分:2)

不要认为.NET本身可以做到这一点(如果Color有Parse方法会很好)

试试这个

string[] strValues = "166, 103, 208".Split(',');
byte[] numValues = new byte[3];
for(int index = 0; index < numValues.Length; index++)
{
    numValues[index] = Byte.Parse(strValues[index]);
}
Color result = Color.FromArgb(numValues[0], numValues[1], numValues[2]);

答案 1 :(得分:2)

As of request,我将此作为答案)

如何使用ColorTranslator class而不是将其写为三个字节?

使用ToHtmlFromHtml methods以HTML格式存储并以HTML格式而不是字节格式回读,您可以使用内置的内容,尽管根据定义它不是“序列化”

一个例子可能是:

// "Deserialize" from a given string.
Color myColor = ColorTranslator.FromHtml("#45A3C7");

// "Serialize" to a string.
string htmlColor = ColorTranslator.ToHtml(Color.Red);

答案 2 :(得分:1)

使用SplitBitConverter

string rgb = "166, 103, 208";
var c = Color.FromArgb(BitConverter.ToInt32(rgb.Split(',')
    .Select(s => byte.Parse(s))
    .Reverse().Concat(new byte[] { 0 })
    .ToArray(), 0));