2

我有一个 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 文件 = > RGB 处理(转换为位图,RGB 读取颜色) => 将结果转换为 CMYK . 用于从 RGB->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 值,如果您有任何想法,请帮助我!提前感谢您的阅读和任何支持。

太感谢了!!!

4

3 回答 3

2

这些用于从 RGB 转换为 CMYK 的公式(以及用于相反转换的类似公式)被粘贴在整个互联网上,但由于它们假设颜色系统是线性系统,因此结果非常差。这与现实相去甚远。毫不奇怪,产生的颜色与原始颜色非常相似。为了获得更好的结果,您必须使用颜色配置文件(您可以使用与设备无关的配置文件)。Windows 函数完全支持颜色转换。

不幸的是,使用颜色配置文件从 RGB 转换为 CMYK 的函数并未直接在 C# 中公开。但是您可以在此答案中找到完整的解决方案。

使用颜色配置文件从 CMYK 到 RGB 的转换在 C# 中更容易实现。解决方案就在这个答案中。在实施之前,您可以在线尝试。

于 2011-09-14T17:25:19.003 回答
1

我对色彩科学了解不多,但请尝试检查 EasyRGB 中的公式以供参考:RGB to CMY然后CMY to CMYK。我认为这些公式只是一个近似值,因为颜色配置文件会影响它的视觉外观。请参阅这篇关于使用这些公式的帖子。

编辑:

据此您的公式看起来是正确的。只需确保 RGB 的值已标准化(即它们在 0 和 1.0 之间)。

于 2011-09-14T05:33:50.970 回答
1

最好的解决方案是执行页面内容流,确定图像在页面上的位置,查看与您的页面位置相对应的图像像素,然后直接从 CMYK 图像中提取该像素。您执行的所有转换都会引入小错误,这就是为什么您的最终结果与您的预期不同的原因。您使用的公式为您提供了近似转换。RGB 和 CMYK 是与设备相关的色彩空间,更准确的转换需要通过与设备无关的中间色彩空间,例如 Lab。所以 CMYK -> RGB 变为 CMYK -> Lab -> RGB,反之亦然。您可以在此处阅读有关此的更多讨论: http: //forums.adobe.com/thread/428899和此处:http ://en.wikipedia.org/wiki/Lab_color_space

于 2011-09-14T08:52:31.057 回答