如何随机获取与以前颜色不同的颜色?

时间:2017-07-19 05:35:55

标签: c#

该程序目前正在填写为其选择颜色的图表,一旦图表超出给定的颜色限制,它就会随机选择一种颜色。

是否有一种可行的获取颜色的方式,而不与之前的颜色相同?

代码:

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 个答案:

答案 0 :(得分: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;
    }

答案 1 :(得分:0)

您可以在List方法之外初始化颜色列表

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;
    }