Генерация случайных цветов с помощью 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]);
    }

0 ответов

Другие вопросы по тегам