某些颜色模型上的Postscript图像输出错误

时间:2016-06-19 04:53:26

标签: ghostscript postscript color-space

我编写了一个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

的示例文件

如果您想了解更多信息或代码段,请随时提出。

1 个答案:

答案 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位。