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

C# 以编程方式生成颜色图表?,c#,C#,在C#中,如何以编程方式生成以下图像 我很清楚这需要多长时间来处理。那很好。性能不是目前的首要任务 编辑请注意,我对仅显示灰度渐变的图像的右侧区域不感兴趣。有很多示例项目可以执行类似操作: 此图像是HSL(非HSV,白色在HSV中为S=0)颜色空间,S为100%,H为水平轴,L为垂直轴。(灰度梯度为S=0)您可以在使用转换,然后在矩形中的所有像素上迭代 作为一个简单的滴管调色板,这将为您提供完全饱和的颜色(和灰色,位在右侧) 为了进行比较,windows颜色选择器将S放置在大正方形的垂

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

我很清楚这需要多长时间来处理。那很好。性能不是目前的首要任务


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

有很多示例项目可以执行类似操作:

此图像是HSL(非HSV,白色在HSV中为S=0)颜色空间,S为100%,H为水平轴,L为垂直轴。(灰度梯度为S=0)您可以在使用转换,然后在矩形中的所有像素上迭代

作为一个简单的滴管调色板,这将为您提供完全饱和的颜色(和灰色,位在右侧)


为了进行比较,windows颜色选择器将S放置在大正方形的垂直轴上(L=50%),从而在底部显示灰色,并使用单独的L滑块。作为滴管调色板,这不太有用。另一种常见的颜色选择器形式是一个圆形,圆形周围有色调,半径为饱和度(通常这会将白色置于中心,使用V=100的HSV,并使用单独的滑块表示值)

从外观上看,这是一个HSL颜色图表。下面的代码将生成一个2d颜色数组,该数组应与图像中的颜色相对应。我将HSL的
实现以及如何从该数组获取实际图像留给您:

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);
    }
}
const int size=1000;
常数倍率=1.0/尺寸;
常数双饱和=1.0;
颜色[,]颜色=新颜色[大小,大小];
对于(int i=0;i
Graphics.DrawImage()速度相当快。您不必在运行时生成此图像,只需知道位置到颜色的反向映射即可。