后脚本

时间:2016-10-18 15:26:48

标签: postscript shading

我是post script的初学者,刚刚开始编写post脚本。 我想创建一个后脚本程序,我可以用它来为后期脚本着色效果。这个着色可以有2种以上的颜色,所以我需要定义类型3的拼接功能。

我正在考虑为function2定义一个过程,稍后我可以使用这个过程来定义类型3函数。

下面是我试过的......

/Function2 {
/b2 exch def 
/g2 exch def 
/r2 exch def 
/b exch def 
/g exch def 
/r exch def
/FunctionType 2
/Domain [ 0 1 ]
/C0 [ r g b ]
/C1 [ r2 g2 b2 ]
/N 1
} def

/Function3
{
   /num exch def 
   /FunctionType 3
   /Domain [ 0 1 ]
   /Functions [1 1 num { pop  Function2 } for  ]
   /Bounds [ 1 1 num-1 { pop   } for  ]
   /Encode [ 1 1 num { pop 0 1 } for ]
} def

{
    /ShadingType 3
    /ColorSpace /DeviceRGB
    /Coords [ 200 200 0 200 200 100 ]
    /Extend [ true true ]
    /Function Function3
}
shfill

我面临的问题是如何从堆栈中读取绑定变量。 我不确定这是否有效。请检查并告诉我相关问题。

1 个答案:

答案 0 :(得分:2)

我不确定你在这里要求的是什么。也许你可以澄清这个问题。你不会从堆栈中读取绑定变量,堆栈对象就是堆栈中的对象。

此:

   **/Bounds [ 1 1 num-1 { pop   } for  ]**

对我来说看起来不对,#num; 1'将立即进行评估,并且您似乎没有定义名称对象' / num-1',因此我想会抛出一个未定义的错误。

当然,还有' **'构造将类似地抛出错误。

您已将功能定义为'程序' (在PostScript术语中实际上是可执行的数组),而PostScript函数则需要是字典,所以你在这里所做的就不会有用了。那是你用过的' {'和'}'当你应该使用'<<<'和&& 39;>>',简单来说。

函数字典不会在堆栈上获取参数 如果你真的刚开始使用PostScript,那么函数和着色可能是最糟糕的开始,因为它们相当复杂。

这是一个使用类型2和类型3函数的工作示例着色,供您阅读:

%!PS-Adobe-3.0

gsave
0.480 setlinewidth
1 setlinecap
1 setlinejoin
0.302 0.302 0.302 setrgbcolor
/stop_function
<<
    /FunctionType 2
    /Domain[0 1]
    /C0 [1 0 0]
    /C1 [0 1 0]
    /N 1
>> def
/RepFunction
<<
    /FunctionType 3
    /Domain [ -81 1 ]
    /Functions [ 82 {stop_function} repeat ]
    /Bounds [ -80 1 0 {} for ]
    /Encode [ -81 1 0 { pop 0 1 } for ]
>> def
<<
    /PatternType 2
    /Shading
    <<
      /ShadingType 3
      /ColorSpace [/DeviceRGB]
      /Extend [false false]
      /Coords [-1300.8 -468 979.2 60 504 7.2]
      /Function
      <<
        /FunctionType 3
        /Domain [0 1]
        /Bounds []
        /Encode[-80 1]
        /Functions [RepFunction]
      >>
    >> 
>>
matrix makepattern setpattern
12.000 528.000 moveto
84.000 528.000 lineto
84.000 456.000 lineto
12.000 456.000 lineto
closepath
gsave
fill
grestore
0.302 0.302 0.302 setrgbcolor
stroke
grestore

showpage