我正在尝试使用C#,Windows Forms,.NET 2.0中的RNGCryptoServiceProvider生成随机颜色(没有Alpha)。 (我将使用ColorTranslator.ToWin32转换颜色,因此将忽略alpha值。)
在阅读了这个问题Why use the C# class System.Random at all instead of System.Security.Cryptography.RandomNumberGenerator?的一些答案之后,我不想使用标准的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]);
}