C# Ghostscript:从PDF获取用于渲染的CMYK值

C# Ghostscript:从PDF获取用于渲染的CMYK值,c#,colors,ghostscript,cmyk,C#,Colors,Ghostscript,Cmyk,我需要从PDF中获取用于渲染的CMYK值 我认为它们是C1键下0-1.0范围内的值 有人知道如何得到它们吗 CMYK值与“C1”键无关。可能存在定义为/C1的颜色空间,但它不包含CMYK值 可以在各种颜色空间(灰色、RGB、CMYK、sRGB、分离、DeviceN、NChannel、ICC和一些特殊空间)中定义任何对象,对于非设备空间(即非灰色、RGB或CMYK)的空间,首先将颜色转换为设备空间之一。然后,在PDF参考中定义了关于如何在设备空间之间转换的规则 对象的实际颜色分量将在对象的内容流(

我需要从PDF中获取用于渲染的CMYK值

我认为它们是C1键下0-1.0范围内的值


有人知道如何得到它们吗

CMYK值与“C1”键无关。可能存在定义为/C1的颜色空间,但它不包含CMYK值

可以在各种颜色空间(灰色、RGB、CMYK、sRGB、分离、DeviceN、NChannel、ICC和一些特殊空间)中定义任何对象,对于非设备空间(即非灰色、RGB或CMYK)的空间,首先将颜色转换为设备空间之一。然后,在PDF参考中定义了关于如何在设备空间之间转换的规则

对象的实际颜色分量将在对象的内容流(对于页面或表单上下文中的矢量对象)或二进制数据(对于图像)中定义,或从函数(着色字典)计算

为了找到其中任何一个,您需要阅读PDF文件,根据需要解压缩流,找到您想要的信息对象,然后确定当前颜色空间。然后,您可以将对象定义的任何颜色空间中的颜色组件转换为CMYK

也许如果你解释一下你的实际目标是什么,可能会更有帮助

[更新]


通过设置ColorConversionStrategy=Gray,您可以简单地使用Ghostscript创建一个新的灰度PDF

这样做的优点是可以处理PDF的所有元素,而不仅仅是图像

您是否意识到PDF文件通常不完全由光栅图像组成?可以有文本、线条、阴影,也可以将透明度组定义为在给定的颜色空间中操作。这不是一项简单的任务

如果您真的只处理图像,则颜色空间在图像字典中定义(它可能是间接引用)。您必须解析PDF文件(可能对其进行解压缩)才能找到颜色空间定义。然后通过图像数据给出每个组件的样本值。这些值的范围为0-65535(取决于图像字典中的BPC、1、2、4、8或16),您必须应用解码数组将值映射到适合颜色空间的范围


如果要转换为灰度,则必须将转换应用于灰度。复杂空间将包括映射到设备空间的方法,PDF参考手册中介绍了设备空间之间的转换。对于基于ICC的空间,你需要一个ICC颜色管理引擎,你可能会考虑LCMS,或者你可以自己写。我有一个PDF,其中定义了一个颜色空间,我需要将其转换为灰度PDF。我从PDF中提取图像-然后将每个像素转换为亮度,然后用转换后的图像创建一个新的PDF。这适用于B&W pdf,但如果定义了颜色空间,则会将图像渲染为定义的颜色(例如,品红),从而将纯黑色渲染为纯品红。我知道如何检索这些值需要知道如何在颜色转换为灰色时考虑它们。您只需使用Ghostscript通过设置ColorConversionStrategy=Gray创建一个新的灰度PDF即可。这样做的优点是可以处理PDF的所有元素,而不仅仅是图像。你知道PDF文件通常不是由光栅图像组成的吗?嗨,肯斯,我继续探讨这个问题,并提出了与你建议的相同的解决方案。我想让GhostScript将其页面保存到灰色Tiff文件中。现在,我看到的是,应该转换成纯黑色的颜色-RGB(0,0,0)被转换成深灰色RGB(102102)-所以现在这正是我的问题。。。如果我知道页面来自PDF的颜色空间,如何将该值转换为乌尔黑?Ghostscript不会将纯黑色更改为如此不同的灰色值。现在是你发布一个例子的时候了,这样你就可以检查它了。关于Ghostscript中的颜色管理,文档中有一个相当重要的部分,如果你想得到具体的结果,你需要阅读它。但在这种情况下,我怀疑这是否真的是转化。首先,如果转换为灰度,颜色值将不是三元组(RGB),而是单个字节。下面是我的代码:GhostscriptVersionInfo_lastInstalled=new GhostscriptVersionInfo(new System.Version(0,0,0),@“gsdl64.dll”,string.Empty,GhostscriptLicense.GPL);列表开关=新列表();添加(“gs”);添加(“-dSAFER”);添加(“-dBATCH”);添加(“-dNOPAUSE”);添加(“-dNOPAUSE”);添加(“-sDEVICE=tiffgray”);添加(“-r300”);添加(“-sProcessColorModel=DeviceGray”);Add(“-sOutputFile=figure.tif”);添加(文件);