[英]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.