使用RNGCryptoServiceProvider生成随机颜色

时间:2014-03-13 15:09:10

标签: c# random colors system.drawing.color rngcryptoserviceprovider

我正在尝试使用C#,Windows Forms,.NET 2.0中的RNGCryptoServiceProvider生成随机颜色(没有Alpha)。 (我将使用ColorTranslator.ToWin32转换颜色,因此将忽略alpha值。)

在阅读了这个问题Why use the C# class System.Random at all instead of System.Security.Cryptography.RandomNumberGenerator?的一些答案之后,我不想使用标准的System.Random,尤其是关于生成数字分布的问题。

这是一个很好的解决方案吗?我真的需要真正的随机颜色,我需要用户感觉到生成的颜色一个接一个地感觉随机,而不是以某种方式重复或相同类型(亮度等)

为了更好的随机性,还有什么可以改进的吗?

public class RandomColor
{
    private RNGCryptoServiceProvider rng;

    public RandomColor()
    {
        this.rng = new RNGCryptoServiceProvider();
    }

    public Color Next()
    {
        return Color.FromArgb(this.NextInt());
    }

    private int NextInt()
    {
        byte[] randomBytes = new byte[sizeof(int)];
        this.rng.GetBytes(randomBytes);
        return BitConverter.ToInt32(randomBytes, 0);
    }
}

甚至更简单:

    public Color Next()
    {
        byte[] randomRGB = new byte[3];
        this.rng.GetBytes(randomRGB);

        return Color.FromArgb(randomRGB[0], randomRGB[1], randomRGB[2]);
    }

0 个答案:

没有答案