2017-07-19 81 views
-1

該程序目前正在用爲其選擇的顏色填充圖表,一旦圖表超出給定顏色的限制,它會隨機選取一種顏色。如何隨機獲取不同於以前顏色陰影的顏色?

有沒有一種可行的方法來獲取顏色,而不會像以前那樣獲得顏色?

代碼:

public List<string> getColors(int columns) 
{ 
    List<string> colors = new List<string>(); 
    colors.Add("\"rgba(77,77,77,0.8)\""); 
    colors.Add("\"rgba(241,88,84,0.8)\""); 
    colors.Add("\"rgba(93,165,218,0.8)\""); 
    colors.Add("\"rgba(96,189,104,0.8)\""); 
    colors.Add("\"rgba(222,207,63,0.8)\""); 
    colors.Add("\"rgba(178,118,178,0.8)\""); 
    colors.Add("\"rgba(187,253,241,0.8)\""); 
    colors.Add("\"rgba(178,145,47,0.8)\""); 
    if (columns > colors.Count) 
    { 
     Color c = GetRandomColour(); 
     colors.Add(String.Format("\"rgba({0},{1},{2},0.8)\"", 
        c.R.ToString(), c.G.ToString(), c.B.ToString())); 
    } 
    return colors; 
} 

private static readonly Random rand = new Random(); 

private Color GetRandomColour() 
{ 
    return Color.FromArgb(rand.Next(256), rand.Next(256), rand.Next(256)); 
} 
+2

相同的陰影對你意味着什麼? (100,100,100)與(100,100,101)不同? – Enigmativity

+1

如果您想要生成類似的顏色,我會建議使用HSV古色,因爲您可以控制特定的變量,ang通過移動(色調只是一點點)生成相似的陰影,將飽和度和黑暗度移動更多 – Ernis

+1

填充一個具有合適顏色選擇的數組(不僅僅是您擁有的八個顏色,確保每種顏色與其他顏色都不相同),將該數組進行洗牌,然後從該數組中選擇它們。請參閱標記的重複數據以混洗數組。如果您只是嘗試直接挑選顏色並將其與您已選擇的顏色進行比較以確保沒有重複或密集陰影,則會浪費大量CPU時間選擇顏色。 –

回答

0

您可以實現這樣的事情

public List<string> getColors(int columns) 
    { 
     List<string> colors = new List<string>(); 
     colors.Add("\"rgba(77,77,77,0.8)\""); 
     colors.Add("\"rgba(241,88,84,0.8)\""); 
     colors.Add("\"rgba(93,165,218,0.8)\""); 
     colors.Add("\"rgba(96,189,104,0.8)\""); 
     colors.Add("\"rgba(222,207,63,0.8)\""); 
     colors.Add("\"rgba(178,118,178,0.8)\""); 
     colors.Add("\"rgba(187,253,241,0.8)\""); 
     colors.Add("\"rgba(178,145,47,0.8)\""); 
     if (columns > colors.Count) 
     { 
      while (true) 
      { 
       Color c = GetRandomColour(); 
       string cs = String.Format("\"rgba({0},{1},{2},0.8)\"", c.R.ToString(), c.G.ToString(), c.B.ToString()); 
       if (!colors.Contains(cs)) 
       { 
        colors.Add(cs); 
        break; 
       } 
      } 
     } 
     return colors; 
    } 
0

你可以初始化列表方法之外的顏色列表

List<string>colors = null 
public List<string> getColors(int columns) 
    { 
     colors = new List<string>(); 

然後你可以改變你的隨機顏色函數來匹配你的目的,也許會通過一個while循環來查看隨機顏色是否是已經在給定的列表中。

private Color GetRandomColour() 
    { 
     Color coltemp = Color.FromArgb(rand.Next(256), rand.Next(256), rand.Next(256)); 
     while (colors.Contains(coltemp) 
     { 
      coltemp = Color.FromArgb(rand.Next(256), rand.Next(256), rand.Next(256)); 
     } 
     return coltemp; 
    }