生成随机颜色

3
我想生成一个随机颜色,但是我遇到了这个错误,我不知道为什么。 方法“FromRgb”只接收字节参数。 转换出错了吗?
这是错误信息: “The best overloaded method match for 'System.Windows.Media.Color.FromRgb(byte, byte, byte)' has some invalid arguments”
以下是代码:
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个回答

11

你可以尝试这个:

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

了解更多关于 NextBytes 方法的信息,请查看这里


2

当你把输出从into转换为byte时,你已经得到了那些点:

byte q = Convert.ToByte(r);

将其应用于参数即可。

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

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

1
Color 结构体是不可变的。 - Sriram Sakthivel

0

我很困惑你为什么要尝试这个:

byte q = Convert.ToByte(r);

如果您认为这会导致r返回字节而不是整数:这并不是事实。它试图创建一个表示Random对象的字节。这几乎是不可能的,因此它只是抛出了InvalidCastException异常。
相反,您必须转换由r.Next()返回的整数。原因是整数的值范围比字节小。为避免产生错误,没有从字节到整数的隐式转换。因此,您必须进行显式转换:
Random r = new Random();
Color color = Color.FromRgb((byte)r.Next(),(byte)r.Next(),(byte)r.Next());

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

有关隐式数字转换的更多信息,请单击此处


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