我是一个初学者的后脚本,刚刚开始在后脚本工作。我想创建一个后脚本程序,我可以使用后脚本的阴影效果。这个底纹可以有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
我面临的问题是如何从堆栈中读取绑定变量。我不确定这是否可行。请检查并告诉我其中的问题
我真的不知道你在这里要求什么。也许你能澄清一下这个问题。你不需要"从堆栈中读取绑定变量",堆栈对象就是堆栈上的对象。
:
**/Bounds [ 1 1 num-1 { pop } for ]**
看起来不正确,'num-1'将立即求值,并且您似乎没有定义一个名称对象'/num-1',因此我认为会抛出一个未定义的错误。
当然,'**'结构同样会抛出错误。
您已经将函数定义为'过程'(在PostScript术语中实际上是可执行数组),而PostScript函数需要是字典,因此您在这里拥有的将不起作用。也就是说,当你应该使用'<<'和'>>'时,你使用了'{'和'}'。
函数字典不接受堆栈上的参数如果你真的刚刚开始使用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