将 CMYK 颜色 space 绘制为 3D 彩色实体
Plotting CMYK color space as 3D color solid
我正在使用以下 POV-Ray 循环以其他颜色 spaces 绘制 sRGB 坐标。该循环仅沿外表面生成点,然后将它们与三角形连接起来。由于 sRGB space 是一种扭曲的立方体,这意味着 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
这很有效,因为几乎所有颜色 space 都是三维的。这是输出示例:
但是,我想对 CMYK 颜色做同样的事情 space。我遇到的问题是它有 4 个参数而不是 3 个。同样,我只想在最外层表面绘制点并将它们与三角形连接起来。我不认为生成的彩色实体是四维的,但我完全不知道如何进行。有谁知道该怎么做?谢谢
请注意,XYZ 是一种颜色 space。 Link.
这里的主要问题是 CMYK 不是一种合适的颜色 space - 它更像是一种印刷过程,您在坐标上有一个额外的自由度,可以将所有颜色映射到可见颜色。与 100% CMY 相比,使用 K 在肉眼上的区别在于着色剂的化学特性,这些特性无法在成像软件中模拟。 (我尝试 google 以获得关于 CMYK 不是颜色 space 的良好参考 - 尝试一下,您会发现科学支持的文本倾向于将 CMYK 称为 "color model")
无论如何,拥有 4 个坐标会使大多数已知的处理颜色的成像算法无效,这是 GIMP 从来没有也从未考虑过使用内部 CMYK 颜色的主要原因space。 (可以 导出 到此 space,但不能处理它)。
总而言之,您应该做的是采用固定的 K 值,并使用不同的 CMY 渲染立方体。如果需要,重复额外的立方体。
我正在使用以下 POV-Ray 循环以其他颜色 spaces 绘制 sRGB 坐标。该循环仅沿外表面生成点,然后将它们与三角形连接起来。由于 sRGB space 是一种扭曲的立方体,这意味着 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
这很有效,因为几乎所有颜色 space 都是三维的。这是输出示例:
但是,我想对 CMYK 颜色做同样的事情 space。我遇到的问题是它有 4 个参数而不是 3 个。同样,我只想在最外层表面绘制点并将它们与三角形连接起来。我不认为生成的彩色实体是四维的,但我完全不知道如何进行。有谁知道该怎么做?谢谢
请注意,XYZ 是一种颜色 space。 Link.
这里的主要问题是 CMYK 不是一种合适的颜色 space - 它更像是一种印刷过程,您在坐标上有一个额外的自由度,可以将所有颜色映射到可见颜色。与 100% CMY 相比,使用 K 在肉眼上的区别在于着色剂的化学特性,这些特性无法在成像软件中模拟。 (我尝试 google 以获得关于 CMYK 不是颜色 space 的良好参考 - 尝试一下,您会发现科学支持的文本倾向于将 CMYK 称为 "color model")
无论如何,拥有 4 个坐标会使大多数已知的处理颜色的成像算法无效,这是 GIMP 从来没有也从未考虑过使用内部 CMYK 颜色的主要原因space。 (可以 导出 到此 space,但不能处理它)。
总而言之,您应该做的是采用固定的 K 值,并使用不同的 CMY 渲染立方体。如果需要,重复额外的立方体。