为什么我得到“;无法从';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也是如此。

为什么我得到“;无法从';int';到';字节';当我尝试在C#中生成一个随机颜色时

Random.Next返回一个int,但FromArgbbyte

因此,您需要将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);