获取随机颜色 [重复]
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
对象。以上是关于获取随机颜色 [重复]的主要内容,如果未能解决你的问题,请参考以下文章