设置System.Drawing.Color值

您好如何在System.Drawing.Color.G设置RGB值?

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

 Property or indexer 'System.Drawing.Color.G' cannot be assigned toit is read only 

我只需要通过分配自定义RGB值来创build一个Color对象

您可以使用静态的FromArgb方法创build一个颜色:

 Color redColor = Color.FromArgb(255, 0, 0); 

您也可以使用以下重载指定alpha。

Color结构是不可变的 (因为所有的结构都应该是真实的),这意味着一旦创build了特定的实例,其属性的值就不能被改变。

相反,您需要使用所需的属性值创build结构的实例。 由于您要使用其分量RGB值创build颜色,因此需要使用FromArgb方法 :

 Color myColor = Color.FromArgb(100, 150, 75); 

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

 var newColor = Color.FromArgb(0xCC,0xBB,0xAA); 

您可以进行扩展,只更改一个颜色组件

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

那么你可以使用这个:

  yourColor = yourColor.ChangeG(100); 

你可以这样做:

 Color c = Color.FromArgb(red, green, blue); //red, green and blue are integer variables containing red, green and blue components 
 using System; using System.Drawing; public struct MyColor { private byte a, r, g, b; public byte A { get { return this.a; } } public byte R { get { return this.r; } } public byte G { get { return this.g; } } public byte B { get { return this.b; } } public MyColor SetAlpha(byte value) { this.a = value; return this; } public MyColor SetRed(byte value) { this.r = value; return this; } public MyColor SetGreen(byte value) { this.g = value; return this; } public MyColor SetBlue(byte value) { this.b = value; return this; } public int ToArgb() { return (int)(A << 24) || (int)(R << 16) || (int)(G << 8) || (int)(B); } public override string ToString () { return string.Format ("[MyColor: A={0}, R={1}, G={2}, B={3}]", A, R, G, B); } public static MyColor FromArgb(byte alpha, byte red, byte green, byte blue) { return new MyColor().SetAlpha(alpha).SetRed(red).SetGreen(green).SetBlue(blue); } public static MyColor FromArgb(byte red, byte green, byte blue) { return MyColor.FromArgb(255, red, green, blue); } public static MyColor FromArgb(byte alpha, MyColor baseColor) { return MyColor.FromArgb(alpha, baseColor.R, baseColor.G, baseColor.B); } public static MyColor FromArgb(int argb) { return MyColor.FromArgb(argb & 255, (argb >> 8) & 255, (argb >> 16) & 255, (argb >> 24) & 255); } public static implicit operator Color(MyColor myColor) { return Color.FromArgb(myColor.ToArgb()); } public static implicit operator MyColor(Color color) { return MyColor.FromArgb(color.ToArgb()); } }