Color myColor=Color.Red;
myColor.A;
myColor.B;
myColor.G;
myColor.R;

解决方案 »

  1.   

    分别对应的值说明如下:
    myColor.A:alpha
    myColor.B:blue
    myColor.G:green
    myColor.R:red
      

  2.   

    直接也行
    Color.Red.A;
    Color.Red.B;
    Color.Red.G;
    Color.Red.R;
      

  3.   

    现在是用Color结构如何给变量BrushColor赋一个值。
      

  4.   

    OLE_COLOR BrushColor //VB中定义
    uint BrushColor;     //C#中应该这样定义,只是这同别人提供的ColorDialog MyDialog = new ColorDialog();
    if (MyDialog.ShowDialog() == DialogResult.OK)
    {
       this.label1.BackColor = MyDialog.Color;
    }
    BrushColor = Fun(this.label1.BackColor);//转换函数
    uint Fun(System.Drawing.Color color)
    {
       //如何写
    }
      

  5.   

    这样就行了
    brushColor=(uint)Color.Red.ToArgb();
      

  6.   

    先开始我也以为这样,其实不行Color.Red.ToArgb()的值是-65536,(uint)Color.Red.ToArgb()的值为4294901760,我研究了一下,brushColor值应该在0-16777215(2的24次方减1),早就超出了!
      

  7.   

    myColor.A:alpha
    myColor.B:blue
    myColor.G:green
    myColor.R:red
      

  8.   

    其实alpha这个值是新加的,以前的Color没有这个值,取来(uint)Color.Red.ToArgb(),把第一个字节去掉就行了。
      

  9.   

    也不对,(uint)Color.Red.ToArgb(),把第一个字节去掉的值是268369920,也超出了,真不知怎么办?brushColor = System.Drawing.Color.Red.R这倒行,只是这是特例,不合要求。
      

  10.   

    以前C的Color由RGB组成,每个值的范围0-255,应该是8位,3个颜色应该是24位。
      

  11.   

    所以,“brushColor值应该在0-16777215(2的24次方减1)”,“把第一个字节去掉的值是268369920”,268369920>16777215,也不对。
      

  12.   

    不知你是否知道brushColor的结构,如果知道可以进行相应的处理。
      

  13.   

    System.Drawing.ColorTranslator.ToOle(color)即可
      

  14.   

    我查了OLE_COLOR,也是32为的,说明如下:
    OLE_COLOR
    The OLE_COLOR data type is used for properties that return colors. When a property is declared as OLE_COLOR, the Properties window will display a color-picker dialog that allows the user to select the color for the property visually, rather than having to remember the numeric equivalent.An example of the use of OLE_COLOR can be found in "Exposing Properties of Constituent Controls."OLE_COLOR is treated internally as a Long.说说你想用它做什么,说不定换个方式也可以。
      

  15.   

    我知道了答案,原来OLE_COLOR,它的颜色表示成16进制如ABCDEF,其中AB表示蓝色,CD表示绿色,而EF表示红色,这正与System.Drawing.Color表示的相反,所以开始怎么算也不对。根据此法我写完了那个函数如下://将C#中的Color结构转换为VB中OLE_COLOR
    uint To_OLEColor(System.Drawing.Color color)
    {
    //提取三原色值
    return (uint)(color.B*65536 + color.G*256 + color.R);
    }作用与System.Drawing.ColorTranslator.ToOle(color)是一样,怎么我找了半天就没找到这个函数呢?真是差劲,以后要好好学习,谢谢Knight94(愚翁)和hzg_yujia(雨佳)的真忱帮助。
      

  16.   

    //将VB中OLE_COLOR转换为C#中的Color结构
    System.Drawing.Color To_CSColor(uint color)
    {
    //转换成16进制
    string s = System.Convert.ToString((int)color,16);  int intR = 0;
    int intG = 0;
    int intB = 0; //视情况将三原色提取出来
    if (s.Length <= 2)
    {
    intR = System.Convert.ToInt32(s,16);
    intG = 0;
    intB = 0;
    }
    else if (s.Length <= 4)
    {
    intR = System.Convert.ToInt32(s.Remove(0,s.Length-2),16);
    intG = System.Convert.ToInt32(s.Remove(s.Length-2,2),16);
    intB = 0;
    }
    else if (s.Length <=6)
    {
    intR = System.Convert.ToInt32(s.Remove(0,s.Length-2),16);
    intG = System.Convert.ToInt32(s.Remove(0,s.Length-4).Remove(2,2),16);
    intB = System.Convert.ToInt32(s.Remove(s.Length-4,4),16);
    }
    else
    {
    MessageBox.Show("转换颜色有错!");
    } return System.Drawing.Color.FromArgb(255,intR,intG,intB);
    }