2017-07-19 53 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; 
    }