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

8

2
Graphics.DrawImage()非常快。您不必在运行时生成此图像,只需要知道位置到颜色的反向映射即可。 - Hans Passant
3个回答

4

从外观上看,这似乎是一个HSL颜色图表。下面的代码将生成一个二维颜色数组,应该对应于图像中的内容。我把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);
    }
}

4
这个图像是一个HSL(不是HSV,白色在HSV中为S = 0)颜色空间,S为100%,H在水平轴上,L在垂直轴上。 (灰度渐变为S = 0)。您可以使用https://web.archive.org/web/20141023005253/http://bobpowell.net/RGBHSB.aspx上的转换,然后迭代您矩形中的所有像素。
作为简单的吸管调色板,这为您提供了完全饱和的颜色(以及右侧的灰色)。
相比之下,Windows颜色选择器将S放在了大正方形的垂直轴上(L = 50%),导致底部变成灰色并带有用于L的单独滑块。这对于吸管调色板而言不太有用。另一种常见的颜色选择器形式是将色调绕着圆圈排列,以饱和度为半径(通常是使用V = 100的HSV,将白色放在中心处,并使用用于值的单独滑块) 。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接