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只能通过两种方式创建自定义颜色对象:

  • KnownColor使用代表 Windows 主题元素或系统颜色的知名颜色名称之一(作为字符串或通过枚举)
  • 使用组件的整数值。

其他任何事情,您都需要自己解析数据并提取颜色的 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.SubstringString.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 回答