前提条件
文中是C 开发高級方位,我想学习DLL和插件构架的好朋友,对PS实际操作有思想意识的好朋友,合适深度阅读文中,一般编程爱好者加重下程序流程通道方式的了解也好。感谢关心。
1、开发前的提前准备:
最先去Adobe官网下载相对应的开发包,我当地组装的Photoshop CS5,因此安裝的这一相对应版本的。
http://www.adobe.com/devnet/photoshop/sdk.html
这儿我选择的是Windows平台。
2、文件解压详细说明:
下载的zip,可以随便缓解压力到你的当地目录,随后里边有一个pluginsdk插件sdk目录,见到里边有3身高文件夹:
documentation:英语帮助文件;
photoshopapi:API库,开发必须启用到的库;
samplecode:示例程序流程,里边的事例可以随便改动或参照做为你开发的模板。
3、打开samplecode,能够看见各种各样归类文件夹,相匹配不一样的插件作用
在其中Output文件夹是用于作为编译程序輸出目录的,新手入门最先要学习培训2个插件:getter 和 listener,她们在samplecodeautomation目录下。
4、getter插件
打开samplecodeautomationgetterwingetter.sln,编译程序形成插件,放进PS插件目录下试下(你也能将Output里插件目录设定为PS的提质增效专用工具目录),运作PS->文档->全自动->getter,随后你就会发现桌面多了个getter.log,该插件的具体目标便是将你现阶段在PS里开启的文档、涂层信息内容及调用函数方式輸出到log里去,因此当你永远不知道怎样获得某些数据时,搜索getter.log里相匹配的函数公式。
5、listener插件:
该插件的功能是监视PS里的绝大多数实际操作和事件的调用函数全过程,并輸出到桌面的listerner.log里,例如你需要拷贝裁切某一涂层,并且不清楚怎样用函数公式完成它的情况下,先应用listener插件,开启PS对涂层开展一次拷贝裁切实际操作,随后开启listener.log,编码就在哪。
6、其他的一些插件
可以依据英文名字大约了解其含意。
7、插件种类
Photoshop适用下列四种插件:
在Windows中,插件文档务必存放在指定的途径中(如photoshopplugins)。
Acquire modules(后缀名8ba)完成在一个新页面中开启一幅图象,常见于扫描机或视频捕捉卡插口,载入压缩格式或系统软件不兼容的文档,根据Acquire子菜单栏启用。
Export modules(后缀名.8be)完成图象輸出,常见于操纵独特复印机或以非标压缩格式开展文档輸出,根据Export子菜单栏启用。
Format modules(后缀名.8bi)完成规范读写能力系统软件不兼容的独特格式文件,发生在Open…、Save As…等提示框的文件格式栏中。
Filter modules(后缀名.8bf)执行对现阶段图象中的选中地区开展改动、润饰。这也是大伙儿最了解的一部分,很多图象实际效果就是源于这种控制模块,根据Filter菜单栏启用。
8、架构:
每一个插件里都是有个AutoPluginMain,便是DLL通道,所说的插件实际上便是个DLL,找好多个插件,在AutoPluginMain中放个中断点,追踪一下,看一下这种插件都做了些哪些。
有一些插件内置弹窗页面,可以用任务管理器编写,用DialogBoxParam建立你自定的页面,参照listener里的DoUI函数公式,makenew里的DoAbout等。
几乎任何的API函数都是会回到一个SPErr,表明调用函数恰当是否。
全部的实际操作都需要有一个PIActionDescriptor,可以建立(sPSActionDescriptor->make())或获得(PIUGetInfo())。sPSActionDescriptor是一个插口表针,可以从这当中获得PIActionDescriptor信息内容(下边通称desc)及其实行一些实际操作。
sPSActionReference是一个插口表针,用于封装形式一些信息内容到desc中,(下边通称refer)。
sPSActionControl是一个插口表针,用于Play各种各样事情。
假如要获得信息,可以应用PIUGetInfo系列产品函数公式(在PIUGet.h中界定)。
9、事例插件Dissolve:
这儿选择了SDK中的一个事例插件Dissolve。
DLLExport MACPASCAL void PluginMain(const int16 selector,
FilterRecordPtr filterRecord,
intptr_t * data,
int16 * result)
{
gFilterRecord = filterRecord;
gDataHandle = data;
gResult = result;
if (selector == filterSelectorAbout)
{
sSPBasic = ((AboutRecord*)gFilterRecord)->sSPBasic;
}
else
{
sSPBasic = gFilterRecord->sSPBasic;
if (gFilterRecord->bigDocumentData != NULL)
gFilterRecord->bigDocumentData->PluginUsing32BitCoordinates = true;
}
switch (selector)
{
case filterSelectorAbout:
DoAbout();
break;
case filterSelectorParameters:
DoParameters();
break;
case filterSelectorPrepare:
DoPrepare();
break;
case filterSelectorStart:
DoStart();
break;
case filterSelectorContinue:
DoContinue();
break;
case filterSelectorFinish:
DoFinish();
break;
default:
break;
}
if (selector != filterSelectorAbout)
UnlockHandles();
}
这儿展现的是一部分编码,插件的应用如下所示步骤:
- 寻找缓解压力后的文档,我这里用VS2010开启Dissolve.sln文件,并运作
运行完毕:
尽管取得成功产生了文档,很有可能会碰到找不着形成文档的问题。那时候这个问题就产生了,但是不必担心形成的.dll文档没法找的的根本原因是由于插件自身是有确定的后缀名,开启工程项目特性页能够看见輸出文档的拓展名叫.8bf,那样问题就行解决了,寻找途径下的Dissolve.8bf文档,拷贝到Photoshop安裝目录下的Plug-insFile Formats文件夹,重启Photoshop,会发觉插件Dissolve已经进入到Photoshop中,可以愉悦的采用了。这只不过是一个事例,别的许多的PS插件等你的应用。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。