下面的函数有一个问题,虽然它会产生明显的纯色,但不能保证 2 个颜色代码的可区分差异。
private Color[] GenerateNewColor(int count)
{
Color[] colors=new Color[count*2];
for (int i = 0; i < count*2; i++)
{
var values = Guid.NewGuid().ToByteArray().Select(b => (int) b);
int red = values.Take(5).Sum()%255;
int green = values.Skip(5).Take(5).Sum()%255;
int blue = values.Skip(10).Take(5).Sum()%255;
//
colors[i] = Color.FromArgb(255, red, green, blue);
}
HashSet<Color> hashedcolors=new HashSet<Color>(colors);
return hashedcolors.ToArray();
}
下面的函数会将颜色代码从#000000 平均分配到#ffffff,但它不能保证纯色。此外,如果颜色的数量少于 5 种,那么它只会生成黑色的阴影
private string[] GenerateNewColorByAdding(int count)
{
long hexmin=0X000000;
long hexmax = 0XFFFFFF;
long adder = Convert.ToInt64(hexmax)/count;
string[] s=new string[count];
for (int i = 0; i < count; i++)
{
hexmin = hexmin + adder;
s[i] = String.Format("#{0:X6}" ,hexmin);
}
return s;
}
所以我想得到n个纯色,每个都应该是彼此不同的可见性。
示例:如果 n=50 要求 1:50 应生成纯色(无透明度)。要求 2:它们中的每一个都应该明显不同,例如:红色、绿色、蓝色、橙色......等,
注意:这里的“n”最多可以是 100。