我在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值是多少?
任何人都可以帮我解决这些问题......提前致谢。
答案 0 :(得分:5)
回答你的上一个问题:
如果RGB颜色空间中的alpha为1,则在CMYK颜色空间中为1。两个空格都只是指定颜色,而不是透明度。
在您的CMYK到RGB转换问题上,您应该注意
CMYK和RGB模型之间没有确切的转换 - 两个颜色空间都覆盖不同的颜色gamuts
答案 1 :(得分:2)
颜色是主观的。
将CMYK转换为RGB时,有直接的转换公式,因为您已经发现并且似乎有代码。然而,它们太精确了。
从CMYK转换为RGB时,您需要使用color profile
来描述将放置CMYK墨水的设备和基材。
因此:
image.tif
这是CMYK图片。USWebCoatedSWOP.icc
用于使用涂布的基材在柔性版印刷机上产生的图像。)按照这些步骤可以获得正确的彩色图像和“正确”的RGB值。
因此,将这些知识应用于您的情况,您需要以编程方式应用ICC配置文件。
如果你坚持自己做数学,(我建议你避免这种情况!!! )你可以在ICC website上阅读所有相关内容或者使用{{3 }}
我不相信通过InDesign公开基于COM的编程接口。但是,Photoshop,Illustrator和Acrobat都会公开一些基于COM的API。
我不知道使用Adobe公开的API调用是否可行,但我可以说LittleCMS。
编辑: 显然,it is possible to do this programmatically through CorelDRAW,我找不到任何以编程方式应用颜色配置文件的功能。见(1.5.9。颜色)部分。
答案 2 :(得分:2)
你所拥有的只是四个数字(对于CMYK),你想从中得到三个数字(对于RGB)。
不幸的是,您的数字只是 - 数字。要指定颜色,需要超过四倍或三倍。有多种方法可以做到这一点,但最广泛使用的是ICC架构(参见www.color.org),使用色彩空间,轮廓连接空间,渲染意图,照明条件等概念。非常简单的术语:您需要一个源配置文件来描述您来自的CMYK号码,以及您希望从四个数字中获得的RGB的目标配置文件。然后,您可以使用基于ICC的颜色转换技术(如开源LittleCMS库,或Mac OS,Windows OS或各种Adobe产品中内置的类似功能)来执行转换。
看起来你想要匹配其他地方发现的行为 - 除非你发现其他地方发现的“行为”正是在完成它的工作,否则很难找到一种精确匹配它的方法。不幸的是,很多这些“行为”基本上没有明确规定或记录不足。
如果你能详细说明你为什么做你做的事情的原因,那么可能会提出一些有用的建议。
答案 3 :(得分: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);
通过这种方式,我们将获得几乎近似的值
答案 4 :(得分:0)