[英]How to convert CMYK to RGB programmatically in indesign
我在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值将是多少?
谁能帮助我解决这些问题...预先感谢。
要回答您的最后一个问题:
如果alpha在RGB颜色空间中为1,则在CMYK颜色空间中为1。 这两个空格只是在指定颜色,而不是透明度。
关于从CMYK到RGB的转换问题,您应注意
CMYK和RGB模型之间没有精确的转换-两种颜色空间都覆盖不同的色域
Wikipedia页面上也有讨论
您只有四个数字(对于CMYK),而您想从中得出三个数字(对于RGB)。
不幸的是,您的电话号码就是数字。 要指定颜色,需要四倍或三倍以上。 有许多方法可以做到这一点,但是使用颜色空间,配置文件连接空间,渲染意图,照明条件等概念的方式,最广泛使用的方法是与ICC架构相关联(请参见www.color.org)。非常简单的术语:您需要一个源配置文件来表征您来自的CMYK数字,并需要一个您希望从这四个数字中得出的RGB的目标配置文件。 然后,您可以使用基于ICC的颜色转换技术(例如开源LittleCMS库或Mac OS,Windows OS或各种Adobe产品中内置的类似功能)进行转换。
看来您想匹配其他地方找到的行为-除非您足够了解“其他地方找到的行为”是如何工作的,否则很难找到一种与之完全匹配的方法。 不幸的是,这些“行为”中的许多行为基本上都未充分指定或未充分记录。
如果您能详细说明为什么要做自己的事情,那么可能会提出一些有用的建议。
颜色是主观的。
将CMYK转换为RGB时,有直接转换公式,如您所发现的,似乎有其代码。 但是,它们太精确了。
从CMYK转换为RGB时,您需要使用color profile
描述color profile
来描述将放置CMYK墨水的设备和基材。
因此:
image.tif
,它是CMYK图像。 USWebCoatedSWOP.icc
用于使用带涂层的基材在柔版印刷机上创建图像。) 执行以下步骤将为您提供正确的彩色图像和“正确的” RGB值。
因此,将这些知识应用于您的情况后,您需要以编程方式应用ICC配置文件。
如果您坚持自己进行数学运算( 我建议您避免这样做!! ),您可以在ICC网站上阅读所有相关内容,或者使用LittleCMS自己编写一些代码。
我不相信通过InDesign公开基于COM的编程接口。 但是,Photoshop,Illustrator和Acrobat都公开了一些基于COM的API。
我不知道使用Adobe的公开API调用是否可行,但是,我可以说可以通过CorelDRAW以编程方式进行此操作 。
编辑:显然, InDesign确实具有自动化功能 ,但是,我找不到以编程方式应用颜色配置文件的任何功能。 请参见(1.5.9。颜色)部分。
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);
这样,我们将获得近似值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.