Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将颜色字符串转换为颜色对象?_C#_Bitmap - Fatal编程技术网

C# 如何将颜色字符串转换为颜色对象?

C# 如何将颜色字符串转换为颜色对象?,c#,bitmap,C#,Bitmap,如何转换颜色字符串以便将其用作颜色对象?类只能通过两种方式创建自定义颜色对象: 使用一个众所周知的颜色名称(作为字符串或通过KnownColor枚举)表示Windows主题元素或系统颜色 使用组件的整数值 如果需要其他任何东西,您将需要自己解析数据并提取颜色的A、R、G和B分量。在您的情况下,您可能希望提取[]中的内容,在,上拆分它们,然后使用Int32.Parse()读取各个值。假设字符串始终采用相同的格式,如下所示: string color = @"Color [A=255, R=24

如何转换颜色字符串以便将其用作颜色对象?

类只能通过两种方式创建自定义颜色对象:

  • 使用一个众所周知的颜色名称(作为字符串或通过
    KnownColor
    枚举)表示Windows主题元素或系统颜色
  • 使用组件的整数值
如果需要其他任何东西,您将需要自己解析数据并提取颜色的A、R、G和B分量。在您的情况下,您可能希望提取
[]
中的内容,在
上拆分它们,然后使用
Int32.Parse()
读取各个值。假设字符串始终采用相同的格式,如下所示:

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

  • 使用一个众所周知的颜色名称(作为字符串或通过
    KnownColor
    枚举)表示Windows主题元素或系统颜色
  • 使用组件的整数值
如果需要其他任何东西,您将需要自己解析数据并提取颜色的A、R、G和B分量。在您的情况下,您可能希望提取
[]
中的内容,在
上拆分它们,然后使用
Int32.Parse()
读取各个值。假设字符串始终采用相同的格式,如下所示:

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);

当然,通过正确的错误检查等。

同意@Michael Edenfield的观点,只需对他的代码提出一点小小的改进:

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]);

同意@Michael Edenfield的观点,只需对其代码提出一点改进建议:

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]);
您还可以使用和方法提取信息。只要您的数据是某种可预测的格式,它就可以工作

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"]);
您还可以使用和方法提取信息。只要您的数据是某种可预测的格式,它就可以工作

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"]);