我编写了一个C代码,用于从PWG光栅文件生成postscript文件。输出正在进行(格式为颜色模型 - 位深度):black-1,black-8,black-16,rgb-8,rgb-16,gray-1,gray-8,gray-16,srgb-8 ,srgb-16,adobergb-8,sgray-1,sgray-8,cmyk-1,cmyk-8,cmyk-16。 但adobergb-16和sgray-16的输出是错误的。我得到的图案类似于输入文件,但颜色都是像素化的。
实际代码非常大,所以我发布了我所做的:
take all the image pixels in an unsigned char* variable (this sometimes becomes very large)
encode the pixels using deflate algorithm from zlib
display the result
对于adobergb-16,我将PS色彩空间设置为/DeviceRGB
,解码数组为/Decode [0 1 0 1 0 1]
。
对于sgray-16,我将PS色彩空间设置为/DeviceGray
,解码为/Decode [0 1]
这些设置类似于adobergb-8和sgray-8。
编辑1: 添加我用来测试HERE
的示例文件如果您想了解更多信息或代码段,请随时提出。
答案 0 :(得分:2)
你已经设置了" / BitsPerComponent 16&#34 ;;正如我上面所说,这不是一个合法的值,因为PostScript每个组件只支持1,2,4,8和12位。
通过Adobe Acrobat Distiller运行此文件提供:
%% [错误:范围检查; OffendingCommand:imageDistiller; ErrorInfo:BitsPerComponent 16] %%
像这样重写你的形象:
gsave
/DeviceRGB setcolorspace
/Input currentfile /FlateDecode filter def
4958 7017 scale
<<
/ImageType 1
/Width 4958
/Height 7017
/BitsPerComponent 8
/Decode [0 1 0 1 0 1]
/DataSource {3 string 0 1 2 {1 index exch Input read {pop}if Input read pop put } for} bind
/ImageMatrix [4958 0 0 -7017 0 7017]
>> image
将BitsPerComponent设置为8,丢弃每个16位值的顶部字节,输出按预期工作。
当我说“一个很好的简单小例子”时。我并不是指30 MB的数据,没有必要表现出我确定的问题。发布示例时,制作一个简单,小巧的示例并使用它。我还没有打算下载你的其他文件。
重申; 你不能设置/ BitsPerComponent 16,PostScript不支持每个组件16位。