admin管理员组

文章数量:1566657

1.软件和硬件配置
Photoshop SDK提供了Macintosh和Windows两种版本,并提供了相应的转换工具,可以方便地创建跨平台插件,但是由于Photoshop最早是基于 Macintosh的,残留了很多Mac风格,所以开发者在Windows下编写plug-in时,必须注意两种平台下数据结构和函数调用的不同。例如字 节排列,数字65298在Intel处理器上排列为12FF,而在Motorola或PowerPC处理器上排列为FF12,开发者应严格区分。 Photoshop plug-ins for Windows可以用Microsoft Visual C++ 2.0或更高的版本在Windows 95或Windows NT下开发。

2.创建Windows插件
SDK中为各种插件类型建立了相应的数据结构,如FilterRecord,FormatRecord,AcquireRecord,ExportRecord和AboutRecord等,这些结构在各自的头文件中有详细定义。
插件实际上是Windows的动态链接库(DLL),只是根据Photoshop的需要进行了特殊定制而跟普通DLL略有不同,因此,在插件中还应包含32位的动态链接库入口函数BOOL APIENTRY DLLInit(HANDLE,DWORD,LPVOID)。
当 用户动作调用插件时,Photoshop执行LoadLibrary调用,将插件调入内存,对其中的所有PiPL(Plug-in Properties Lists)资源调用GetProcAddress(routineName),其中routineName和 PIWin3286CodeProperty配合,可以得到子程序的地址。
在宿主通过插件的入口函数调用插件的同时,插件也可以通过其 pluginParamBlock参数中的指针向宿主发出回调(callback),这些回调函数能为插件的某些特殊需要提供相应服务,是编写插件时不可 缺少的一环。在SDK中回调函数分为两类:一类是direct callback,是直接在参数块中实现的代码,如Boolean(*testAbortProc)(),插件每秒钟应调用多次本函数以测试用户是否取消 操作;另一类则归为callback suites,按其功能划分为Buffer suites,Handle suites,Property suites,Image Services suites,Pseudo-Resource suites等五组,如Handle suites中的Handle(*NewPIHandleProc)(int32 size),此函数负责分配一个指定大小的句柄,如果句柄分配不成功,则返回NULL。关于回调函数的详细内容,可以在SDK的PIGeneral.h头 文件中参阅其定义。

三、过滤器插件(Filter Module)

过滤器是Photoshop的插件中最丰富的一类,它们从Filter菜单中调取,能对图像的选定区域进行各种修饰,从细微的色调变化到夸张的视觉效果,给设计人员提供了强有力的美术手段,所以我们以过滤器为例,介绍一下插件的具体内容。
下面是其中selector参数的说明:
1. filterSecectorParameters
如 果过滤器插件要求用户设置参数,它应该提示用户输入,并且在一个内存区域的参数域中保存这些参数的句柄(当初次运行Photoshop时,这些参数域被设 为NULL)。如果一个过滤器刚被运行过一次,用户可以通过选取Filter菜单下的Last Filter子菜单,重复运用相同的参数而不需要再次输入参数,在这种情况下,宿主程序就不调用filterSelectorParameters,用户 也不会再看到提示输入的对话框。
2. filterSelectorPrepare
此调用允许插件调整上文所述的Photoshop内存分配算法,以提高整个系统的运行效率。其中imageSize,Planes,filterRect等域可以用于计算缓冲区的大小;bufferSpace可设置超过32K的内存块。
3. filterSelectorStart
在编写过滤器插件处理图像时,最好能将图像划分为若干个块进行操作,这样可以减少内存需求,一般情况下可分为64×64到128×128之间的方块。程序实现时应设置inRect、outRect和maskRect(如果用到了mask的话)去申请第一个图像块进行处理。
4. filterSelectorContinue
当 开始进行第一个图像块的处理后,inRect、outRect和maskRect域不再为空,这样filterSelectorContinue便会被反 复地调用,每次调用处理一个图像块,首先它处理由inData、outData和maskData所指向的数据,然后改变inRect、outRect和 maskRect以申请下一个要处理的图像块,直到这些图像块都被处理完。
5. filterSelectorFinish
只要 filterSelectorStart调用成功,Photoshop就会保证filterSelectorFinish被调用。当过滤器执行完毕时,此 调用允许过滤器插件从内存中清除,并且只有在filterSelectorStart句柄未返回错误值的情况下才被调用。另外,在实现插件时,应随时处理 用户的取消操作,一旦接收到消息就应当调用filterSelectorFinish而不是filterSelectorContinue,以及时结束插 件的运行。
以上的句柄及过滤器插件参数块FilterRecord的详细定义可参见SDK提供的PIFilter.h头文件。
如果对深入了解Photoshop SDK有兴趣,读者可以联系Adobe公司的Adobe Developers Association

本文标签: 插件photoshop