2009-06-12 93 views
1

我添加了以下代碼。但它產生了16種顏色。但是我需要16種顏色在「紅色」和「卡其色」之間。我不需要漸變流程。我的顏色看起來像漸變流。我的顏色不能彼此靠近。因爲我將在圖表欄中使用此代碼返回值。他們彼此太靠近了。顏色選擇器不給漸變外觀

static class Program 
    { 

     [STAThread] 
     static void Main() 
     { 
      Form form = new Form(); 
      Color start = Color.Red, end = Color.Khaki; 
      for (int i = 0; i < 16; i++) 
      { 
       int r = Interpolate(start.R, end.R, 15, i), 
        g = Interpolate(start.G, end.G, 15, i), 
        b = Interpolate(start.B, end.B, 15, i); 

       Button button = new Button(); 
       button.Dock = DockStyle.Top; 
       button.BackColor = Color.FromArgb(r, g, b); 
       form.Controls.Add(button); 
       button.BringToFront(); 
      } 

      Application.Run(form); 
     } 
     static int Interpolate(int start, int end, int steps, int count) 
     { 
      float s = start, e = end, final = s + (((e - s)/steps) * count); 
      return (int)final; 
     } 
    }
+0

我想你需要在這裏重寫這個問題。代碼很清楚,但我不知道你真正想要什麼。 – Noldorin 2009-06-12 13:38:39

+0

上面的代碼將生成「紅色」和「卡其間」之間的16種顏色。你是說你想要不同的顏色分佈,而不是線性漸變?你必須讓問題更清楚。 – 2009-06-12 13:50:18

回答

2

問題的修訂文本是相當清楚的:你想在紅色和卡其色「之間的」漸變16種顏色,其中任何之間的視覺差異兩種顏色在視覺上比您選擇的顏色更重要。或許一個更好的標題是「我可以用什麼算法在紅色和卡其間生成16種視覺上獨特的顏色?」

我不認爲有一個。紅色(255,255,0)和卡其色(255,240,230)只是沒有那麼不同:RGB差值=(0,15,-230)

如果將它分成16個等於步驟就像你所做的那樣,由此產生的顏色足夠接近,就像你說的那樣看起來像一個漸變。如果您要使用不等於的步驟(可能是對數刻度),那麼結果會更糟,至少在您的範圍的一端。

我認爲你需要或者一)選擇不同的端點或B)選擇離散的顏色,但不嘗試你的端點

或者你可能想看看this thread如何選擇不同顏色之間得到它們。