设置系统。绘图。颜色值

如何在 System.Drawing.Color.G中设置 R G B值?

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

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

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

223830 次浏览

您可以使用静态 来自 Argb方法创建一种颜色:

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

还可以使用 跟随超载指定 alpha。

Color结构是 永恒不变(所有结构都应该是这样) ,这意味着一旦创建了特定的实例,就不能更改其属性的值。

相反,您需要使用所需的属性值创建结构的 新的实例。因为您希望使用组件 RGB 值创建颜色,所以需要使用 FromArgb:

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

你可以这样做:

Color c = Color.FromArgb(red, green, blue); //red, green and blue are integer variables containing red, green and blue components

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

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