3

我正在使用以下 POV-Ray 循环在其他颜色空间中绘制 sRGB 坐标。该循环仅沿外表面生成点,然后用三角形将它们连接起来。由于 sRGB 空间是一种扭曲的立方体,这意味着 6 个外表面和 8 个顶点。

#macro cie_calc_gamut_xyz_srgb()
    #for (i, 0, cie_sample_count_srgb)
        #for (j, 0, cie_sample_count_srgb)
            // side 0 & 3
            #local cooRGB = <i/cie_sample_count_srgb,j/cie_sample_count_srgb,0>;
            #local cooXYZ = cie_convRGB2XYZ(cooRGB);
            #declare cie_point_array_srgb[0][i][j] = cooXYZ;
            #local cooRGB = <i/cie_sample_count_srgb,j/cie_sample_count_srgb,1>;
            #local cooXYZ = cie_convRGB2XYZ(cooRGB);
            #declare cie_point_array_srgb[3][i][j] = cooXYZ;
            // side 1 & 4
            #local cooRGB = <i/cie_sample_count_srgb,0,j/cie_sample_count_srgb>;
            #local cooXYZ = cie_convRGB2XYZ(cooRGB);
            #declare cie_point_array_srgb[1][i][j] = cooXYZ;
            #local cooRGB = <i/cie_sample_count_srgb,1,j/cie_sample_count_srgb>;
            #local cooXYZ = cie_convRGB2XYZ(cooRGB);
            #declare cie_point_array_srgb[4][i][j] = cooXYZ;
            // side 2 & 5
            #local cooRGB = <0,i/cie_sample_count_srgb,j/cie_sample_count_srgb>;
            #local cooXYZ = cie_convRGB2XYZ(cooRGB);
            #declare cie_point_array_srgb[2][i][j] = cooXYZ;
            #local cooRGB = <1,i/cie_sample_count_srgb,j/cie_sample_count_srgb>;
            #local cooXYZ = cie_convRGB2XYZ(cooRGB);
            #declare cie_point_array_srgb[5][i][j] = cooXYZ;
        #end
    #end
#end

这很有效,因为几乎所有的色彩空间都是三维的。以下是输出示例:

在此处输入图像描述

但是,我想对 CMYK 颜色空间做同样的事情。我遇到的问题是它有 4 个参数而不是 3 个。同样,我只想在最外面的表面上绘制点并将它们与三角形连接起来。我不认为生成的纯色是四维的,但我完全不知道如何进行。有谁知道该怎么做?谢谢。

请注意,XYZ 是一个色彩空间。链接

4

1 回答 1

1

这里的主要问题是 CMYK 不是正确的颜色空间 - 它更像是一种印刷过程,并且您在坐标上有一个额外的自由度来映射然后全部映射到可见颜色。使用 K 比 100% CMY 更明显的原因是着色剂的化学特性无法在成像软件中模拟。(我试图用谷歌搜索 CMYK 不是色彩空间的一个很好的参考 - 试试吧,你会发现科学支持的文本倾向于将 CMYK 称为“颜色模型”)

无论如何,拥有 4 个坐标会使大多数已知的处理颜色的成像算法无效,这就是 GIMP 从未拥有也从未考虑拥有内部 CMYK 颜色空间的主要原因。(可以导出到这个空间,但不能在上面工作)。

总而言之,你应该做的是取一个固定的 K 值,并用不同的 CMY 渲染你的立方体。如果需要,重复额外的立方体。

于 2017-11-08T17:59:50.720 回答