如何在C#中获得彩虹色渐变?

maf*_*afu 20 c# gradient colors

我想根据彩虹颜色(红色......黄色......绿色......蓝色......)列出颜色.

我基本上看到两种方法:

  1. 创建一个包含一些重要参考颜色的查找表,并在它们之间进行插值.我完全不喜欢这个想法.

  2. 应用一些或多或少花哨的数学.可能更少,但我不太清楚它是如何工作的.有任何想法吗?

(哦,当我做了一些SO研究时,我发现没有好的结果.如果这个问题已经发布,请指出我的位置,我会删除它.)

编辑:我更喜欢这个独立于使用的技术来显示渐变.例如,GetRainbowColor(float f)之类的f(范围从0(红色)到1(紫色))会很有效.

Bri*_*ndy 31

这比你想象的要容易.

首先,您需要hsv或hsl到rgb转换功能. 这是进行转换的C#代码.

然后,您只需迭代所有可能的色调值,h同时保持saturations和光度l不变.

如果你想要100种颜色的彩虹间隔均匀:

for(double i = 0; i < 1; i+=0.01)
{
    ColorRGB c = HSL2RGB(i, 0.5, 0.5);
    //do something with the color
}
Run Code Online (Sandbox Code Playgroud)

您还可以GetRainbowColor通过将所有这些颜色添加到a List<ColorRGB>并返回适当的索引颜色,以这种方式轻松创建所需的功能.

  • 另见http://en.wikipedia.org/wiki/HLS_color_space,有关于将HSL转换为RGB的部分 (5认同)

Bit*_*lue 7

我想用这个:

public static Color Rainbow(float progress)
{
    float div = (Math.Abs(progress % 1) * 6);
    int ascending = (int) ((div % 1) * 255);
    int descending = 255 - ascending;

    switch ((int) div)
    {
        case 0:
            return Color.FromArgb(255, 255, ascending, 0);
        case 1:
            return Color.FromArgb(255, descending, 255, 0);
        case 2:
            return Color.FromArgb(255, 0, 255, ascending);
        case 3:
            return Color.FromArgb(255, 0, descending, 255);
        case 4:
            return Color.FromArgb(255, ascending, 0, 255);
        default: // case 5:
            return Color.FromArgb(255, 255, 0, descending);
    }
}
Run Code Online (Sandbox Code Playgroud)