我有一个CMYK彩色PDF文件(只有一页和图像,没有文字)。
我想在这个PDF文件中得到'像素'的CMYK颜色值(我将位置称为'像素'),目前我这样做如下:
- Convert the PDF page to bitmap <br>
- Get the color value of this pixel:
Color cPixel = bmpImage.GetPixel(x, y);
最后,我将cPixel(RGB)转换为CMYK值,但值不正确:((在原始文件中它是100%K,但结果非常不同)。我认为问题来自我的处理: CMYK file =&gt; RGB处理(转换为位图,读取RGB颜色)=&gt;将结果转换为CMYK 。公式用于转换RGB-&gt; CMYK为:
Black = minimum(1-Red,1-Green,1-Blue)
Cyan = (1-Red-Black)/(1-Black)
Magenta = (1-Green-Black)/(1-Black)
Yellow = (1-Blue-Black)/(1-Black)
现在,我想直接从PDF读取CMYK值,如果您有任何想法,请帮助我!提前感谢阅读和任何支持。
非常感谢!!!
答案 0 :(得分:2)
这些从RGB转换为CMYK的公式(以及用于相反转换的类似公式)粘贴在整个互联网上,但由于它们假设颜色系统是线性系统,因此效果非常差。这远非现实。毫不奇怪,产生的颜色只是非常远的原始颜色。为了获得更好的结果,您必须使用颜色配置文件(您可以使用设备无关的配置文件)。 Windows功能完全支持颜色转换。
不幸的是,使用颜色配置文件从RGB转换为CMYK的功能不会直接在C#中公开。但您可以在answer中找到完整的解决方案。
使用颜色配置文件从CMYK到RGB的转换在C#中更容易实现。解决方案在answer。在实施之前,您可以尝试online。
答案 1 :(得分:1)
我对色彩科学知之甚少,但尝试检查EasyRGB中的公式以供参考:RGB to CMY然后CMY to CMYK。我认为这些公式只是一个近似值,因为颜色配置文件会影响它的外观。有关使用这些公式,请参阅此post。
编辑:
根据this,您的公式看起来是正确的。只需确保RGB的值已标准化(即它们介于0和1.0之间)。
答案 2 :(得分:1)
最佳解决方案是执行页面内容流,确定页面上图像所在的位置,查看图像对应于页面位置的图像,然后直接从CMYK图像中提取该像素。您执行的所有转换都会引入较小的错误,这就是您的最终结果与预期不同的原因。您使用的公式为您提供了近似转换。 RGB和CMYK是设备相关的色彩空间,更精确的转换通过中间设备无关的色彩空间,如Lab。所以CMYK - &gt; RGB变为CMYK - &gt;实验室 - &gt; RGB和反之亦然。 有关这方面的更多讨论,请参阅此处:http://forums.adobe.com/thread/428899和此处:http://en.wikipedia.org/wiki/Lab_color_space