设置System.Drawing.Color值

Sud*_*ha 76 .net c# colors immutability system.drawing.color

您好如何设置R G BSystem.Drawing.Color.G

这是System.Drawing.Color.G=255;不允许的,因为它是只读的

Property or indexer 'System.Drawing.Color.G' cannot be assigned toit is read only
Run Code Online (Sandbox Code Playgroud)

我只需要Color通过分配自定义R G B值来创建一个Object

Dar*_*rov 134

您可以使用静态FromArgb方法创建颜色:

Color redColor = Color.FromArgb(255, 0, 0);
Run Code Online (Sandbox Code Playgroud)

您还可以使用以下重载指定alpha .


Cod*_*ray 11

Color结构是不变的(就像所有的结构确实应该),这意味着一旦该特定实例已创建其属性的值不能改变.

相反,您需要使用所需的属性值创建结构的实例.由于您要使用其组件RGB值创建颜色,因此您需要使用以下FromArgb方法:

Color myColor = Color.FromArgb(100, 150, 75);
Run Code Online (Sandbox Code Playgroud)

  • @Dariusz我在这个问题上看不到[c]标签.我一直在编写C代码,我只是不像我编写C#代码那样编写代码... (9认同)
  • -1表示"因为所有结构都应该是".祝你写一些C代码好运. (2认同)

Via*_*ukh 9

您必须使用Color.FromArgb方法来创建新的颜色结构

var newColor = Color.FromArgb(0xCC,0xBB,0xAA);
Run Code Online (Sandbox Code Playgroud)


Ste*_*cya 5

您可以进行扩展以仅更改一种颜色组件

static class ColorExtension
{
    public static Color ChangeG(Color this color,byte g) 
    {
        return Color.FromArgb(color.A,color.R,g,color.B);
    }
}
Run Code Online (Sandbox Code Playgroud)

那么你可以使用这个:

  yourColor = yourColor.ChangeG(100);
Run Code Online (Sandbox Code Playgroud)

  • 是的,但不要这样做。它隐藏了一个事实,即您实际上正在创建结构的新实例,这对于尚未了解不变性的人来说非常令人困惑。对于这样做的人来说相当无用。 (4认同)