设置System.Drawing.Color值

| 您好如何在
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
对象     
已邀请:
您可以使用静态的FromArgb方法创建颜色:
Color redColor = Color.FromArgb(255, 0, 0);
您还可以使用以下重载指定Alpha。     
Color
结构是不变的(因为所有结构都应该如此),这意味着一旦创建了特定实例,就无法更改其属性值。 相反,您需要使用所需的属性值创建结构的新实例。由于要使用其分量RGB值创建颜色,因此需要使用
FromArgb
方法:
Color myColor = Color.FromArgb(100, 150, 75);
    
您必须使用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);
    
您可以这样做:
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());
        }
    }
    

要回复问题请先登录注册