当我尝试在C#中生成随机颜色时,为什么会出现“无法从'int'转换为'byte'?

时间:2013-05-07 03:05:20

标签: c#

我今天试图在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相同。

4 个答案:

答案 0 :(得分:3)

Random.Next会返回int,但FromArgb会返回byte

所以你需要将整数转换成字节:

randomColor = Color.FromArgb((byte)randomGenerator.Next(1, 255),
              (byte)randomGenerator.Next...`

答案 1 :(得分:1)

您可以将随机值转换为方法所需的“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的引用,但是您应该有一个Timer对象在System.Timers.Timer。

下可用

答案 2 :(得分:0)

因为int的范围比字节多,所以你需要显式类型转换

答案 3 :(得分:0)

您可以使用以下代码将任意数字转换为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);