【问题标题】:How to shade a monochrome image如何为单色图像着色
【发布时间】:2014-03-12 14:19:26
【问题描述】:

我的 Postscript 如何绘制从 EPS 文件嵌入的单色(黑/白)图像,以使图像的黑色部分以 50% 的值显示?


我有一个单色 EPS 文件,如下所示:

此图像嵌入到 Postscript 文件中,然后由该文件绘制。绘制时,我希望图像打印或显示,使图像的黑色部分绘制为 50% 灰色,如下所示:

EPS 使用https://stackoverflow.com/a/16405528/238886 中所示的技术嵌入到 Postscript 中:

/ImageData
currentfile
<< /Filter /SubFileDecode
   /DecodeParms << /EODString (*EOD*) >>
>> /ReusableStreamDecode filter
[-->PUT YOUR EPS HERE<--]
*EOD*
def

/IDForm
<< /FormType 1
   /BBox [154 321 441 521]
   /Matrix [ 1 0 0 1 0 0]
   /PaintProc
   { pop
       /ostate save def
         /showpage {} def
         /setpagedevice /pop load def
         ImageData 0 setfileposition ImageData cvx exec
       ostate restore
   } bind
>> def

然后画成这样:

gsave
IDForm execform
grestore

有什么我可以环绕 execform 以使黑白图像以 50% 的值打印/显示吗?

【问题讨论】:

    标签: image postscript eps


    【解决方案1】:

    这实际上取决于 EPS 文件中使用了哪些操作。例如,您可以像这样重新定义 setgray

    /setgray_orig /setgray load def
    /setgray { 0.9 gt {1.0}{0.5} ifelse setgray_orig  } bind def
    

    然后在退出时重新定义它:

    /setgray /setgray_orig load def
    

    现在这取决于使用 setgray,您的 eps 可能正在使用 sethsbcolorsetrgbcolorsetcmykcolor 等。如果是这样,那么你应该把那些也包起来。小心这些东西。

    请注意,将所有灰色定义为 0.5 是不够的,因为有人可能会用白色来填充区域,因此也必须考虑到这一点。

    修正:你也可以只定义 setgray inisde /ostate save defostate restore 指令然后你不需要单独卸载功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-16
      • 2021-01-05
      • 2016-07-04
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多