0

C#、Windows フォーム、.NET 2.0 で RNGCryptoServiceProvider を使用して、ランダムな色 (アルファなし) を生成しようとしています。(ColorTranslator.ToWin32 を使用して色を変換するため、アルファ値は単純に無視されます。)

System.Security.Cryptography.RandomNumberGenerator の代わりに C# クラス 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]);
    }
4

0 に答える 0