我想生成一个随机颜色,但我得到这个错误,我现在不知道为什么。 “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());
答案 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。