为什么我得到“;无法从';int';到';字节';当我尝试在C#中生成一个随机颜色时
本文关键字:颜色 随机 一个 int 为什么 字节 | 更新日期: 2023-09-27 18:12:19
我今天试图在C#中生成一个随机颜色。
Random randomGenerator = new Random();
Color randomColor = Color.FromArgb(randomGenerator.Next(1, 255),
randomGenerator.Next(1, 255),
randomGenerator.Next(1, 255),
randomGenerator.Next(1, 255));
但VS2012一直在说,论点1/2/3/4:
无法从"int"转换为"byte"。
此外,我试图找到System.Drawing.Color
,但找不到。System.Timer
也是如此。
Random.Next
返回一个int
,但FromArgb
取byte
。
因此,您需要将int强制转换为字节:
randomColor = Color.FromArgb((byte)randomGenerator.Next(1, 255),
(byte)randomGenerator.Next...`
您可以将随机值强制转换为方法所需的类型"byte":
Color randomColor = Color.FromArgb((byte)randomGenerator.Next(1, 255),
(byte)randomGenerator.Next(1, 255),
(byte)randomGenerator.Next(1, 255),
(byte)randomGenerator.Next(1, 255));
此外,你可能看不到System.Drawing.Color,因为我猜,你在WPF应用程序中,需要添加对System.Drawing的引用,但你应该在System.Timers.Timer.下有一个Timer对象
因为int的范围比byte大,所以需要显式类型转换
您可以使用以下代码将任何数字转换为argb颜色:
Color color;
int num = 255;
double d = 205.0 / (num + 256);
int red = Math.Min((int)(d * 256), 255);
int green = Math.Min((int)((d * 256 - red) * 256), 255);
int blue = Math.Min((int)(((d * 256 - red) * 256 - green) * 256), 255);
color = Color.FromArgb(red, green, blue);