2

我想知道.Net框架中是否已经有一种方法可以从包含RGB三元组的字符串中实例化颜色值,如下所示:

“166、103、208”

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

4

3 回答 3

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]);
于 2012-11-02T15:18:02.407 回答
2

根据要求,我将其作为答案)

使用ColorTranslator而不是将其写为三个字节怎么样?

通过使用ToHtmlandFromHtml方法以 HTML 格式存储并以 HTML 格式而不是字节格式回读,您可以使用内置的东西,尽管它不是每个定义的“序列化”。

一个例子可能是:

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

// "Serialize" to a string.
string htmlColor = ColorTranslator.ToHtml(Color.Red);
于 2012-11-02T16:13:00.693 回答
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));
于 2012-11-02T16:21:49.143 回答