c# .net colors immutability system.drawing.color

c# - Establecer valores System.Drawing.Color



.net colors (6)

Hola, ¿cómo establecer los valores RGB en System.Drawing.Color.G ?

que es como System.Drawing.Color.G=255; no está permitido porque es de solo lectura

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

solo necesito crear un Color Object asignando valores RGB personalizados


Debe usar el método Color.FromArgb para crear una nueva estructura de color

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


La estructura de Color es inmutable (como todas las estructuras realmente deberían serlo), lo que significa que los valores de sus propiedades no se pueden cambiar una vez que se haya creado esa instancia en particular.

En su lugar, debe crear una nueva instancia de la estructura con los valores de propiedad que desee. Como desea crear un color con los valores RGB de su componente, debe usar el método FromArgb :

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


Podrías hacerlo:

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


Puede crear un color usando el método estático FromArgb :

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

También puede especificar el alfa utilizando la siguiente sobrecarga .


Puede hacer que la extensión simplemente cambie un componente de color

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

entonces puedes usar esto:

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