Генерация случайных цветов с помощью RNGCryptoServiceProvider
Я пытаюсь генерировать случайные цвета (без альфы), используя RNGCryptoServiceProvider, в C#, Windows Forms, .NET 2.0. (Я преобразую цвета, используя ColorTranslator.ToWin32, поэтому значение альфа просто игнорируется.)
Я не хочу использовать стандартный 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]);
}