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