0

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

在阅读了这个问题的一些答案后,我不想使用标准 System.Random为什么要使用 C# 类 System.Random 而不是 System.Security.Cryptography.RandomNumberGenerator?,尤其是关于生成数字的分布问题。

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

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

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]);
    }
4

0 回答 0