我是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
我面临的问题是如何从堆栈中读取绑定变量。 我不确定这是否有效。请检查并告诉我相关问题。
答案 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