2010-07-30 50 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,這是在上述交回答回以及。