以编程方式生成颜色图表?

时间:2011-11-04 17:53:45

标签: c#

在C#中,如何以编程方式生成以下图像?

http://deathmatchgame.files.wordpress.com/2010/07/color_picker.png

我很清楚这需要多长时间来处理。没关系。目前,绩效不是首要任务。

编辑请注意,我对仅显示灰度渐变的图像的右侧区域不感兴趣。

3 个答案:

答案 0 :(得分:4)

该图像是HSL(不是HSV,白色是HSV中的S = 0)颜色空间,S为100%,横轴为H,纵轴为L. (灰度梯度为S = 0)您可以使用http://www.bobpowell.net/RGBHSB.htm处的转换,并迭代矩形中的所有像素。

作为一个简单的吸管调色板,它为您提供完全饱和的颜色(和灰色,右侧的位)。

为了进行比较,窗口颜色选择器将S放在大方块的垂直轴(L = 50%)上,底部为灰色,L为单独的滑块。这对于吸管调色板不太有用。另一种常见的颜色选择器形式是一个圆圈,在圆周围有色调,饱和度为半径(通常使用白色在中心,使用HSV,V = 100,以及一个单独的滑块值)

答案 1 :(得分:3)

从它的外观来看,这是一张HSL颜色图表。下面的代码将生成一个2d颜色数组,应该与图像中的颜色对应。我已经将FromHSL的实现留给了你,以及如何从这个数组中获得实际图像:

const int size = 1000;
const double ratio = 1.0 / size;
const double saturation = 1.0;
Color[,] colors = new Color[size,size];
for (int i = 0; i < size; i++)
{
    double lightness = 1.0 - i*ratio;
    for (int j = 0; j < size; j++)
    {
        double hue = j*ratio;
        colors[i, j] = FromHSL(hue, saturation, lightness);
    }
}

答案 2 :(得分:2)