获取随机颜色 [重复]

Posted

技术标签:

【中文标题】获取随机颜色 [重复]【英文标题】:Get Random Color [duplicate] 【发布时间】:2015-05-25 17:23:00 【问题描述】:

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

我已经有了一个,但是这个不正确:

这只会返回绿色:

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

我希望我的代码每次都返回一种随机颜色,而不是像上面那样每次都返回绿色/红色/蓝色。

如何解决?

任何建议都会欣然接受!

【问题讨论】:

为什么你认为最后的代码只返回Blue 2) 返回红色,因为您只设置红色通道。 3)返回蓝色,因为您只设置蓝色通道 1)请注意,您选择的两个随机数可能彼此相等,因为它们几乎同时被选择 重复问题中的代码(不是答案)是您要查找的内容 【参考方案1】:

这是我在您删除然后取消删除您的问题之前开始发布的答案:

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;
    

【讨论】:

以上代码在 WPF 项目中对我不起作用。需要将随机值转换为一个字节。 Color.FromArgb((byte) rnd.Next(0, 256), (byte) rnd.Next(0, 256), (byte) rnd.Next(0, 256), (byte) rnd.Next(0, 256 ))【参考方案2】:

最后一个方法的原始版本(预编辑)将返回所有不同种类的颜色。我肯定会使用一个 Random 对象,而不是每次都创建一个新对象:

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]

【讨论】:

没错,OP 最有可能遇到的问题是每次都创建一个新的随机数,然后调用 .Next,而不是重新使用全局 Random 对象。

以上是关于获取随机颜色 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

生成随机颜色Java [重复]

每次单击按钮时随机颜色[重复]

javascript 怎么给三个div随机一个数组颜色,每次随机三个div的颜色都是不重复的

创建的每个实例的随机颜色生成器和 RGB [重复]

获取随机颜色js

QML获取随机颜色