我添加了以下代码。但它给我带来了16种颜色。但我在“红色”和“卡其色”之间需要16种颜色。我不需要梯度流。我的颜色看起来像渐变流。我的颜色一定不能彼此靠近。因为我将在图表列中使用此代码返回值。他们彼此太近了。
static class Program
{
[STAThread]
static void Main()
{
Form form = new Form();
Color start = Color.Red, end = Color.Khaki;
for (int i = 0; i < 16; i++)
{
int r = Interpolate(start.R, end.R, 15, i),
g = Interpolate(start.G, end.G, 15, i),
b = Interpolate(start.B, end.B, 15, i);
Button button = new Button();
button.Dock = DockStyle.Top;
button.BackColor = Color.FromArgb(r, g, b);
form.Controls.Add(button);
button.BringToFront();
}
Application.Run(form);
}
static int Interpolate(int start, int end, int steps, int count)
{
float s = start, e = end, final = s + (((e - s) / steps) * count);
return (int)final;
}
}
答案 0 :(得分:2)
这是程序的输出。 我认为他想要Red / Khaki范围内的颜色,但彼此之间并不是那么接近。我认为他想要选择与http://www.colorschemer.com/online.html类似的免费颜色
Example run http://img196.imageshack.us/img196/9256/20090612094934.png
答案 1 :(得分:2)
修改过的问题文本非常清楚:你想在红色和卡其色之间的渐变上使用16种颜色,其中任何两种颜色之间的视觉差异在视觉上比你选择的颜色更重要。
也许更好的标题是“我可以用什么算法在Red和Khaki之间产生16种视觉上鲜明的颜色?”
我认为没有。红色(255,255,0)和卡其色(255,240,230)没有那么不同:RGB差异=(0,15,-230)
如果你按照16 相同的步骤将它分开,那么结果颜色就足够接近,就像你说的那样看起来像一个渐变。如果您使用不等步骤(可能是对数刻度),您的结果会更差,至少在您的范围的一端。
我认为您需要 a)选择不同的端点或 b)选择离散颜色而不尝试在端点之间获取它们
或者你可能想看this thread选择不同的颜色。