1

我在 indesign 中有一个 CMYK 颜色空间,我想将其转换为 RGB 颜色空间,我得到了一些代码,但我得到的数据不正确。

我尝试过的一些代码如下

    double cyan = 35.0;
    double magenta = 29.0;
    double yellow = 0.0;
    double black = 16.0;

    cyan = Math.min(255, cyan + black); //black is from K
    magenta = Math.min(255, magenta + black);
    yellow = Math.min(255, yellow + black);
    l_res[0] = 255 - cyan;
    l_res[1] = 255 - magenta;
    l_res[2] = 255 - yellow;

@Override
public float[] toRGB(float[] p_colorvalue) {
    float[] l_res = {0,0,0};
    if (p_colorvalue.length >= 4)
    {
        float l_black = (float)1.0 - p_colorvalue[3];
        l_res[0] = l_black * ((float)1.0 - p_colorvalue[0]);
        l_res[1] = l_black * ((float)1.0 - p_colorvalue[1]);
        l_res[2] = l_black * ((float)1.0 - p_colorvalue[2]);
    }
    return (l_res);
}

CMYK 颜色空间中的值是 C=35、M = 29、Y = 0、K = 16,正确的 RGB 值是 R = 142、G = 148、B = 186。

在 adobe indesign 中,我们可以使用色板将模式更改为 CMYK 或 RGB。

但我想以编程方式做到这一点,我可以得到任何将 CMYK 转换为 RGB 的算法,这将给出正确的 RGB 值。

还有一个问题,如果 RGB 的 alpha 值为 1,那么 CMYK 的 alpha 值是多少?

谁能帮我解决这些问题...在此先感谢。

4

5 回答 5

5

要回答您的最后一个问题:

如果 alpha 在 RGB 颜色空间中为 1,则在 CMYK 颜色空间中为 1。两个空间都只是指定颜色,而不是透明度。

关于您的 CMYK 到 RGB 转换问题,您应该注意

CMYK 和 RGB 模型之间没有精确的转换 - 两种颜色空间都覆盖不同的色

资源

这个维基百科页面上也有讨论

于 2010-04-19T13:53:37.367 回答
2

您所拥有的只是四个数字(对于 CMYK),并且您想从中导出三个数字(对于 RGB)。

不幸的是,您的数字就是那个数字。要指定颜色,需要多于四倍或三倍。有很多方法可以做到这一点,但最广泛使用的是与 ICC 架构相关联(参见 www.color.org),使用颜色空间、配置文件连接空间、渲染意图、照明条件等概念。非常简单的术语:您需要一个源配置文件来表征您来自的 CMYK 数字,以及您希望从您的四个数字派生的 RGB 目标配置文件。然后您可以使用基于 ICC 的颜色转换技术(如开源的 LittleCMS 库,或内置在 Mac OS、Windows OS 或各种 Adob​​e 产品中的类似功能)来进行转换。

看起来您想要匹配在其他地方发现的行为 - 除非您足够了解“在其他地方发现的行为”是如何准确完成其工作的,否则很难想出一种与之精确匹配的方法。不幸的是,很多这些“行为”都没有充分说明或记录不足。

如果你能详细说明你为什么做你正在做的事情的原因,也许可以提出更多有用的建议。

于 2012-06-25T14:46:57.487 回答
2

颜色是主观的。

将 CMYK 转换为 RGB 时,有直接转换公式,正如您所发现的并且似乎有代码。然而,它们太精确了。

当从 CMYK 转换为 RGB 时,您需要使用color profile描述 CMYK 墨水将放置在其上的设备和基材。

所以:

  1. 你有image.tif一个 CMYK 图像。
  2. 您需要应用描述该图像的预期输出设备的 ICC 配置文件。(即USWebCoatedSWOP.icc用于使用涂层基材在柔版印刷机上创建的图像。)

遵循这些步骤将为您提供正确的彩色图像和“正确”的 RGB 值。

因此,将这些知识应用于您的情况,您需要以编程方式应用 ICC 配置文件。

如果您坚持自己做数学,(我建议您避免这样做!!!)您可以在ICC 网站上阅读所有相关信息或使用LittleCMS自己编写代码。

我不相信基于 COM 的编程接口是通过 InDesign 公开的。但是,Photoshop、Illustrator 和 Acrobat 都公开了一些基于 COM 的 API。

我不知道这是否可以使用 Adob​​e 公开的 API 调用,但是,我可以说可以通过 CorelDRAW 以编程方式执行此操作

编辑:显然,InDesign 确实具有自动化功能,但是,我找不到任何以编程方式应用颜色配置文件的功能。参见(1.5.9. 颜色)部分。

于 2010-04-19T14:22:37.730 回答
1

如果您使用 InDesign 脚本,为什么要自己转换颜色?只需让 InDesign 为您完成。

app.colorTransform(源颜色空间、源颜色空间、目标颜色空间中的数字数组);

上面的代码将返回一个数字数组,表示目标颜色空间中的颜色。 试试这个。

于 2018-07-03T16:52:58.243 回答
0
double cyan = 35.0/100.0;
double magenta = 29.0/100.0;
double yellow = 0.0;
double black = 16.0/100.0;

首先,您将每个值除以 100,因为它必须在 0 到 1 的范围内

        R=255*(1-cyan)*(1-black);
        G=255*(1-magneta)*(1-black);
        B=255*(1-yellow)*(1-black);

通过这种方式,我们将得到几乎近似的值

于 2015-01-09T07:21:38.940 回答