我想知道.Net框架中是否已经有一种方法可以从包含RGB三元组的字符串中实例化颜色值,如下所示:
“166、103、208”
如果颜色存储在我的应用程序的 app.config 中,它会存储为字符串。如果可能的话,我想知道.Net 如何将这些字符串值反序列化回颜色。
我想知道.Net框架中是否已经有一种方法可以从包含RGB三元组的字符串中实例化颜色值,如下所示:
“166、103、208”
如果颜色存储在我的应用程序的 app.config 中,它会存储为字符串。如果可能的话,我想知道.Net 如何将这些字符串值反序列化回颜色。
不要认为 .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]);
(根据要求,我将其作为答案)
使用ColorTranslator
类而不是将其写为三个字节怎么样?
通过使用ToHtml
andFromHtml
方法以 HTML 格式存储并以 HTML 格式而不是字节格式回读,您可以使用内置的东西,尽管它不是每个定义的“序列化”。
一个例子可能是:
// "Deserialize" from a given string.
Color myColor = ColorTranslator.FromHtml("#45A3C7");
// "Serialize" to a string.
string htmlColor = ColorTranslator.ToHtml(Color.Red);
使用Split
和BitConverter
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));