0

我是后期脚本的初学者,刚刚开始研究后期脚本。我想创建一个后期脚本程序,可用于后期脚本的阴影效果。这种阴影可以有超过 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

我面临的问题是如何从堆栈中读取绑定变量。我不确定这是否可行。请检查并让我知道其中的问题。

4

1 回答 1

2

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

这个:

   **/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
于 2016-10-18T18:46:15.553 回答