我正在尝试使用 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]);
}