在C#中,如何以编程方式生成以下图像?
http://deathmatchgame.files.wordpress.com/2010/07/color_picker.png
我很清楚这需要多长时间来处理。没关系。目前,绩效不是首要任务。
编辑请注意,我对仅显示灰度渐变的图像的右侧区域不感兴趣。
答案 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)