1
string color = @"Color [A=255, R=245, G=243, B=244]";
Color pixelColor = bitmap.GetPixel(x, y);
Color newColor = Color.FromArgb(color);
bitmap.SetPixel(x, y, newColor);

Color オブジェクトとして使用できるように、カラー文字列を変換するにはどうすればよいですか?

4

3 に答える 3

3

このColorクラスは、次の 2 つの方法でのみカスタム カラー オブジェクトを作成できます。

  • KnownColorWindows テーマ要素またはシステム カラーを表す既知の色名の 1 つを (文字列として、または列挙を介して) 使用する
  • コンポーネントに整数値を使用します。

それ以外の場合は、自分でデータを解析し、色の A、R、G、および B コンポーネントを抽出する必要があります。[]あなたの場合、 の内部にあるものを抽出し、 で分割してから,、 を使用Int32.Parse()して個々の値を読み取りたいと思うでしょう。文字列が常に同じ形式であると仮定すると、次のようになります。

var elements = color.Substring(7, color.Length - 8)
    .Split(',')
    .Select(x => x.Split('='))
    .ToDictionary(x => x[0].Trim(), x => x[1].Trim());

var components = new int[] 
{
   int.Parse(elements["A"]),
   int.Parse(elements["R"]),
   int.Parse(elements["G"]),
   int.Parse(elements["B"])
};

var newColor = Color.FromArgb(components[0], components[1], components[2], components[3]);

もちろん、適切なエラーチェックなども行います。

于 2013-05-08T03:00:40.640 に答える
2

@Michael Edenfield に同意します。彼のコードに小さな改善を提案してください。

var elements = color.Substring(7, color.Length - 8)
            .Split(',')
            .Select(x => x.Split('='))
            .ToDictionary(x => x[0].Trim(), x => int.Parse(x[1]));

var newColor = Color.FromArgb(elements["A"], elements["R"], elements["G"], elements["B"]);
于 2013-05-08T03:14:34.397 に答える
1

String.SubstringメソッドとString.IndexOfメソッドを使用して情報を抽出することもできます。データがある程度予測可能な形式である限り、機能します。

char[] trimChars = new char[] { ',', ' ' };
byte A, R, G, B;
string color = @"Color [A=255, R=245, G=243, B=244]";

byte.TryParse((color.Substring(color.IndexOf('A') + 2, 3)).Trim(trimChars), out A);
byte.TryParse((color.Substring(color.IndexOf('R') + 2, 3)).Trim(trimChars), out R);
byte.TryParse((color.Substring(color.IndexOf('G') + 2, 3)).Trim(trimChars), out G);
byte.TryParse((color.Substring(color.IndexOf('B') + 2, 3)).Trim(trimChars), out B);

Color newColor = Color.FromArgb(A,R,G,B);
于 2013-05-08T03:21:11.753 に答える