C# 生成n个不同的单色,其中2种颜色有一些明显的变化
下面的函数有一个问题,即虽然它会生成不同的纯色,但无法保证两种颜色代码之间的差异C# 生成n个不同的单色,其中2种颜色有一些明显的变化,c#,asp.net,colors,C#,Asp.net,Colors,下面的函数有一个问题,即虽然它会生成不同的纯色,但无法保证两种颜色代码之间的差异 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
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。因为有三个独立变量红色、绿色和蓝色,您可以取所需不同颜色数的立方根,并使用该立方根将红色、绿色和蓝色的许多值组合起来,以获得所需的颜色数 也许这样的事情适合你:
public IEnumerable<Color> DistinctColors(int n)
{
int m = (int)Math.Ceiling(Math.Pow(n, 1/3.0));
for (int green = 0; green <= m; ++green)
{
for (int blue = 0; blue <= m; ++blue)
{
for (int red = 0; red <= m; ++red)
{
if (n-- == 0)
yield break;
int r = (int)(0.5 + red*255.0/m);
int g = (int)(0.5 + green*255.0/m);
int b = (int)(0.5 + blue*255.0/m);
yield return Color.FromArgb(r, g, b);
}
}
}
}
[编辑]更改了RGB生成的顺序,因此通常会生成更多的红色阴影,而不是绿色阴影,因为这似乎可以提供更好的结果。最大n值的要求是什么?@MatthewWatson:n的最大值是100。如果需要随机数,则可能会有一个随机类。guid不适合这个目的。