2010-07-30 85 views
1

可能重复:
How do I invert a colour?C#相反的颜色

是否有可能找到相反的颜色对于给定的RGB组合?例如,我在基本应用程序中有以下内容。

myColor red = new myColor(0, true), green = new myColor(0, true), blue = new myColor(0, true), theColor; 
    Random rand = new Random(DateTime.Now.Millisecond); 
    int color = 0; 
    void timer_Tick(object sender, EventArgs e) 
    { 
     switch (color) 
     { 
      case 0: theColor = red; break; 
      case 1: theColor = green; break; 
      case 2: theColor = blue; break; 
     } 

     if (theColor.Up) 
     { 
      theColor.Value += 0.01F; 
      if (theColor.Value + 0.01F > 1) { theColor.Up = false; color = rand.Next(3); } 
     } 
     else if (!theColor.Up) 
     { 
      theColor.Value -= 0.01F; 
      if (theColor.Value - 0.01F < 0) { theColor.Up = true; color = rand.Next(3); } 
     } 
     label1.Text = red.Value + Environment.NewLine + green.Value + Environment.NewLine + blue.Value; 
     FadeBackground(red.Value, green.Value, blue.Value); 
    } 
    void FadeBackground(float red, float green, float blue) 
    { 
     BackColor = Color.FromArgb((int)((1 - red) * 255), (int)((1 - green) * 255), (int)((1 - blue) * 255)); 
     label1.ForeColor = BackColor; 
     //label1.BackColor; 
    } 
    class myColor 
    { 
     public myColor(float value, bool up) 
     { 
      Value = value; 
      Up = up; 
     } 
     public float Value; 
     public bool Up; 
    } 

但我希望能够更改标签的背景颜色,使其始终与任何背景相反或相反。

在此先感谢,我希望这是有道理的。

+0

相反的颜色? #888888的反义词是什么? FFFFFF和00000与它距离相等......我真的不知道相反的颜色是什么.. – 2010-07-30 20:11:41

+0

无论背景是什么颜色,您都想确保阅读标签,对吗? – Justin 2010-07-30 20:12:50

回答

1

可以将RGB值转换成Hue, Saturation, Lighting(HSL)的值,用公式here。然后,您只需将Hue左右移动180度,但不要单独进行饱和度和光照。最后转换成back

This是一个很好的指导。

+0

现在,我真的很好奇,如果这转动#888888 180度,它的土地本身.. – 2010-07-30 20:15:44

+0

由于这里'var_Max'和'var_Min'是相同的(88),它结束HSL'(0,0 ,88/255)'。现在,将H移动180度到0.5,但这一步实际上毫无意义,因为由于0饱和度,转换回RGB的公式只是'R = L * 255,G = L * 255 ,B = L * 255',所以你回到'#888888'。所以,是的,它确实存在。 ...哦。我刚刚听到那个笑话。那只是个玩笑?该死的,我浪费了几分钟时间打出这个评论! > = F – Stephen 2010-07-30 21:00:54

0

相反的颜色是白色的RGB值少的颜色的RGB值:

例如,如果颜色是100-100-100然后对面是155-155-155。

+0

检查一个色轮,你会发现这种方法不**总是工作。它只适用于某些值。这是因为RGB不是一个正确的循环表示。 HSL是。 – Stephen 2010-07-30 20:14:08

2
  1. 您将需要将您的颜色转换为HSV。 As seen in this SO question

  2. 获取相对180度的色调值:

    色调=(色调+ 0.5F)%1.0F

  3. 转换你颜色从HSV到RGB,这是在上述交回答回以及。