生成颜色列表,蓝色到红色,0%到100%

时间:2010-09-04 13:13:45

标签: language-agnostic graphics colors hex

我想创建一个颜色列表,红黄绿蓝,并在100的范围内相互融合。任何人都有这方面的经验吗?

编辑:嗯,实际上是RGB。任何语言都可以。我只需要算法。

4 个答案:

答案 0 :(得分:3)

简单的嵌套RGB循环不会生成红黄绿蓝渐变。如果那是你真正想要的,那么你应该对色轮有所了解:

                    red
                     |
           magenta__ | __yellow
                    \|/
                  __/|\__
              blue   |   green
                     |
                    cyan

这实际上是一款HSV色轮,非常适合理解加色。根据这个,你通过混合红色和绿色得到黄色。所以,对于你的渐变:

// in javascript:
function cssColor (r, g, b) {
    return 'rgb('+r+','+g+','+b+')';
}

var colors = [];
// Start with solid red:
var r = 255;
var g = 0;
var b = 0;
// From red to yellow:
for (var g=0;g<=255;g++)  colors.push(cssColor(r,g,b));
// From yellow to green:
for (var r=255;r>=0;r--) colors.push(cssColor(r,g,b));
// From green to blue:
for (var b=0;b<=255;b++,g--)  colors.push(cssColor(r,g,b));

这将为您提供768种颜色的数组。如果你使用每八种颜色,你应该得到大约100种颜色的数组:

var subColors = [];
for (var i=0;i<colors.length;i++) {
    if (i%8 == 0) subColors.push(colors[i]);
}

无论如何,使用这些知识,你可以得到你想要的任何渐变。

答案 1 :(得分:2)

为您的颜色使用HSV颜色空间(红色是H = 0,S = V = 1,蓝色是H = 240,S = V = 1),在Hue值上线性插值并将它们转换为RGB:

http://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB

答案 2 :(得分:2)

应该这样做,给出所有1600万左右的颜色。

int[] colors;

for (int r = 0; i <= 255; i++)
{
    for (int g = 0; g <= 255; g++)
    {
        for (int b = 0; b <= 255; b++)
        {
            colors[] = rgb2int(r, g, b);
        }
    }
}

rgb2int(int red, int green, int blue)
{
    return (red << 16) + (green << 8) + blue;
}

答案 3 :(得分:1)

3个嵌套循环。 在R上从1到n循环一次 从1到n循环一次g b从1到n循环一次

应该给你3 ^ n左右的颜色 -