获取随机颜色

28

你知道任何一种生成随机颜色的方法(不是随机颜色名称!)吗?

我已经有一个方法了,但这个方法没有正常运行:

它只返回绿色:

Random r = new Random();
BackColor = Color.FromArgb(r.Next(0, 256), r.Next(0, 256), 0);

这只会返回红色:

Random r = new Random();
BackColor = Color.FromArgb(r.Next(0, 256), 0, 0);

这只返回蓝色:

Random r = new Random();
BackColor = Color.FromArgb(0, 0, r.Next(0, 256));

我希望我的代码每次返回一个随机颜色,而不是每次都是绿色/红色/蓝色等固定的颜色。

如何解决这个问题?

任何建议都将令我感到欣喜!


1
为什么你认为最后一行代码只返回“蓝色”? - Dmitry
3
  1. 返回红色是因为你只设置了红色通道。
  2. 返回蓝色是因为你只设置了蓝色通道。
  3. 要注意你选择的两个随机数可能相等,因为它们几乎是同时选取的。
- fillobotto
3
重复问题中的代码(不是答案)就是你要找的。 - Rufus L
2个回答

49

在你删除并取消删除你的问题之前,我开始发布答案:

public partial class Form1 : Form
{
    private Random rnd = new Random();

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {  
        Color randomColor = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256));

        BackColor = randomColor;
    }
}

2
以上代码在我的WPF项目中无法正常工作。需要将随机值转换为字节。Color.FromArgb((byte) rnd.Next(0, 256), (byte) rnd.Next(0, 256), (byte) rnd.Next(0, 256), (byte) rnd.Next(0, 256)) - rschoenbach

8

您上一次方法的原始版本(编辑之前)会返回各种不同的颜色。我建议使用单个随机对象,而不是每次创建一个新对象:

Random r = new Random();
private void button6_Click(object sender, EventArgs e)
{
    pictureBox1.BackColor = Color.FromArgb(r.Next(0, 256), 
         r.Next(0, 256), r.Next(0, 256));

    Console.WriteLine(pictureBox1.BackColor.ToString());
}

它产生各种不同的颜色:

颜色[A = 255,R = 241,G = 10,B = 200]
颜色[A = 255,R = 41,G = 125,B = 132]
颜色[A = 255,R = 221,G = 169,B = 109]
颜色[A = 255,R = 228,G = 152,B = 197]
颜色[A = 255,R = 50,G = 153,B = 103]
颜色[A = 255,R = 92,G = 236,B = 162]
颜色[A = 255,R = 52,G = 103,B = 204]
颜色[A = 255,R = 197,G = 126,B = 133]


4
问题很可能出在 OP 每次创建新的随机数对象并调用.Next,而不是重复使用全局的 Random 对象。 - Rufus L

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接