次のような RGB トリプレットを含む文字列から Color 値をインスタンス化するための .Net Framework の一部であるメソッドが既に存在するかどうかを知りたいです。
「166、103、208」
Color がアプリケーションの app.config に保存されている場合、それは文字列として保存されます。可能であれば、.Net がそのような文字列値を逆シリアル化して色に戻す方法を知りたいです。
次のような RGB トリプレットを含む文字列から Color 値をインスタンス化するための .Net Framework の一部であるメソッドが既に存在するかどうかを知りたいです。
「166、103、208」
Color がアプリケーションの 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]);
(リクエストの時点で、これを回答にしています)
3 バイトとして記述する代わりに、ColorTranslator
クラスを使用するのはどうですか?
ToHtml
メソッドとFromHtml
メソッドを使用して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));