Установите значения System.Drawing.Color - PullRequest
70 голосов
/ 16 мая 2011

Привет, как установить R G B значения в System.Drawing.Color.G?

, что похоже на System.Drawing.Color.G=255;, не разрешено, потому что оно доступно только для чтения

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

Мне просто нужно создать Color Объект, назначив пользовательские R G B значения

Ответы [ 6 ]

127 голосов
/ 16 мая 2011

Вы можете создать цвет, используя статический FromArgb метод:

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

Вы также можете указать альфа, используя после перегрузки .

11 голосов
/ 16 мая 2011

Структура Color неизменна (как и должно быть на самом деле для всех структур), что означает, что значения ее свойств не могут быть изменены после создания этого конкретного экземпляра.

Вместо этого вам нужно создать новый экземпляр структуры со значениями свойств, которые вы хотите. Поскольку вы хотите создать цвет, используя его значения RGB, вам необходимо использовать метод FromArgb :

Color myColor = Color.FromArgb(100, 150, 75);
9 голосов
/ 16 мая 2011

Вы должны использовать метод Color.FromArgb для создания новой структуры цвета

var newColor = Color.FromArgb(0xCC,0xBB,0xAA);
4 голосов
/ 16 мая 2011

Вы можете сделать расширение, чтобы просто изменить один компонент цвета

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);
2 голосов
/ 16 мая 2011

Вы можете сделать:

Color c = Color.FromArgb(red, green, blue); //red, green and blue are integer variables containing red, green and blue components
1 голос
/ 14 ноября 2013
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());
        }
    }
...