颜色选择器不提供渐变外观

时间:2009-06-12 13:35:22

标签: c# .net colors system.drawing.color

我添加了以下代码。但它给我带来了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;
        }
    }

2 个答案:

答案 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选择不同的颜色。

相关问题