生成随机颜色

时间:2014-08-01 10:58:17

标签: c# random

我想生成一个随机颜色,但我得到这个错误,我现在不知道为什么。 “FromRgb”方法仅返回字节参数。 转换是错误的吗?

这是错误: “'System.Windows.Media.Color.FromRgb(字节,字节,字节)'的最佳重载方法匹配'有一些无效的参数”

这是代码:

Random r = new Random();
int n = r.Next(255);
string f = n.ToString();
textbox1.Text = f;
byte q = Convert.ToByte(r);
Color color = Color.FromRgb(r.Next(),r.Next(),r.Next());

4 个答案:

答案 0 :(得分:9)

你可以尝试这个:

Random rnd = new Random();
Byte[] b = new Byte[3];
rnd.NextBytes(b);
Color color = Color.FromRgb(b[0],b[1],b[2]);

有关NextBytes方法的详细信息,请查看here

答案 1 :(得分:2)

当您将输出转换为字节时,您已经有了点:

byte q = Convert.ToByte(r);

只需将其应用于参数

即可
Color color = Color.FromRgb(Convert.ToByte(r.Next()),
Convert.ToByte(r.Next()),Convert.ToByte(r.Next()));

答案 2 :(得分:1)

我会这样做:

Random r = new Random();
Color randomColor= new Color();
randomColor.A = 255; //alpha channel of the color
randomColor.R = (byte)r.Next(0, 255); //red channel
randomColor.G = (byte)r.Next(0, 255); //green channel
randomColor.B = (byte)r.Next(0, 255); //blue channel

SolidColorBrush scb = new SolidColorBrush(randomColor);

答案 3 :(得分:0)

我对你为什么这样做感到困惑:

byte q = Convert.ToByte(r);

如果你认为这会导致r返回字节而不是整数:事实并非如此。它尝试创建一个表示Random对象的字节。这几乎不可能,所以它只是抛出一个InvalidCastException。

相反,你必须转换r.Next()返回的整数。原因是整数的值范围小于字节。为了避免产生错误,没有从byte到int的隐式转换。因此,你必须做一个明确的演员:

Random r = new Random();
Color color = Color.FromRgb((byte)r.Next(),(byte)r.Next(),(byte)r.Next());

这是可能的,但我鼓励你使用@Christos解决方案,因为它更优雅。

有关隐式数字转换的详细信息,请点击here