怎样编写一个Photoshop滤镜(1)
2009-05-11 04:03
639 查看
在很久前我曾经写过一篇文章简要讲述了photoshop的滤镜开发的基本概念,并描述了滤镜和PS之间的协作关系,也提供了一个雨滴效果滤镜的Demo。但是缺少源代码。而且我们将要产生疑问,我们如何从头开始编写一个Photoshop滤镜呢?我们如何建立一个最简单的Ps滤镜插件的基本框架,然后在这个基础上继续添加我们想要的功能呢?这里,我就以回答一个网友向我提出的问题为例,从最基本的建立项目开始讲起。这个例子(也是这个网友的问题)是,他想做一个最简单的滤镜,也就是仅仅把图像填充为“红色”。对于PS用户来说,这当然是非常简单容易的事情,只需要一个快捷键操作而已,(滤镜通常是用于完成比较复杂的任务的),我们就从这个最基本的例子出发讲解编写滤镜的过程。在文章最后将附上范例的源码下载链接。
(1)我们使用的开发工具是Visual Studio .NET 2005版本,搭配Photoshop SDK CS(本质上就是一些C++代码和资源等文件组成的发行包)。开发语言使用的是C和C++。
那么使用C#或者其他语言行吗?目前来看可行性不大。所以要开发 Photoshop 滤镜,则要求开发者必须具有较好的C 和 C++ 基础,这是最重要的。当然如果开发者熟悉图像处理,数字信号处理的基本知识将会更好。
(2)准备好工具后,我们打开VS2005,新建项目。项目模板我们选择 Visual C++ 的 Win32。项目名称我们输入我们想要创建的滤镜名称,例如“FillRed”滤镜,表示这个滤镜用于填充红色,如下图:
#endif // APSTUDIO_INVOKED
#endif // 英语(美国)资源
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// 从 TEXTINCLUDE 3 资源生成。
//
#include "FillRed.pipl"
/////////////////////////////////////////////////////////////////////////////
#endif // 不是 APSTUDIO_INVOKED
(5)我们编译项目,即可在项目的输出目录中看到 生成 FillRed.8bf 文件,下面我们把这个文件复制到 Photoshop的滤镜文件夹下面,例如我的Photoshop CS的滤镜所在目录是:“D:\Program Files\Adobe\Photoshop CS\增效工具\滤镜”
最后我们启动Photoshop,Photoshop会扫描插件目录,并把我们的滤镜加载到相应的菜单上,我们选择一个矩形选区,然后点击我们制作的滤镜相应菜单,即可看到效果,如下图所示。注意,下面的例子的效果是我仅仅把蓝通道填充了255。
在Photoshop 的帮助菜单- 关于增效工具 - 的子菜单中,可以看到我们编写的“FillRed Filter ...”一项,当点击它时PS即发起 about 调用,即可看到弹出的 MessageBox。
(6)最后,还是附上这个小例子的源代码下载链接:
请注意这个项目中有一些设置,比如 PhotoshopSDK的目录等,需要依据具体环境做出相应调整。PS SDK提供的资源转换工具也包含在项目文件夹内。(注意:附件中并未包含完整PS SDK)
http://files.cnblogs.com/hoodlum1980/FillRed.rar
(7)总结:
这一节讲述了从项目创建,到嵌入pipl资源,建立了一个基本的滤镜框架。但它的功能是非常基本和简单的,在以后的时间里,我们可能需要继续丰富这个例子,包括为它引入对话框资源,令PS为我们的滤镜缓存和读取我们的参数,包括在对话框表面绘制滤镜的预览图形等等。
我的相关文章:
《Photoshop第三方滤镜开发的简介》
《Photoshop滤镜开发简介(2)--Photoshop回调函数》
--hoodlum1980 2009.05.11
(1)我们使用的开发工具是Visual Studio .NET 2005版本,搭配Photoshop SDK CS(本质上就是一些C++代码和资源等文件组成的发行包)。开发语言使用的是C和C++。
那么使用C#或者其他语言行吗?目前来看可行性不大。所以要开发 Photoshop 滤镜,则要求开发者必须具有较好的C 和 C++ 基础,这是最重要的。当然如果开发者熟悉图像处理,数字信号处理的基本知识将会更好。
(2)准备好工具后,我们打开VS2005,新建项目。项目模板我们选择 Visual C++ 的 Win32。项目名称我们输入我们想要创建的滤镜名称,例如“FillRed”滤镜,表示这个滤镜用于填充红色,如下图:
#endif // APSTUDIO_INVOKED
#endif // 英语(美国)资源
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// 从 TEXTINCLUDE 3 资源生成。
//
#include "FillRed.pipl"
/////////////////////////////////////////////////////////////////////////////
#endif // 不是 APSTUDIO_INVOKED
(5)我们编译项目,即可在项目的输出目录中看到 生成 FillRed.8bf 文件,下面我们把这个文件复制到 Photoshop的滤镜文件夹下面,例如我的Photoshop CS的滤镜所在目录是:“D:\Program Files\Adobe\Photoshop CS\增效工具\滤镜”
最后我们启动Photoshop,Photoshop会扫描插件目录,并把我们的滤镜加载到相应的菜单上,我们选择一个矩形选区,然后点击我们制作的滤镜相应菜单,即可看到效果,如下图所示。注意,下面的例子的效果是我仅仅把蓝通道填充了255。
在Photoshop 的帮助菜单- 关于增效工具 - 的子菜单中,可以看到我们编写的“FillRed Filter ...”一项,当点击它时PS即发起 about 调用,即可看到弹出的 MessageBox。
(6)最后,还是附上这个小例子的源代码下载链接:
请注意这个项目中有一些设置,比如 PhotoshopSDK的目录等,需要依据具体环境做出相应调整。PS SDK提供的资源转换工具也包含在项目文件夹内。(注意:附件中并未包含完整PS SDK)
http://files.cnblogs.com/hoodlum1980/FillRed.rar
(7)总结:
这一节讲述了从项目创建,到嵌入pipl资源,建立了一个基本的滤镜框架。但它的功能是非常基本和简单的,在以后的时间里,我们可能需要继续丰富这个例子,包括为它引入对话框资源,令PS为我们的滤镜缓存和读取我们的参数,包括在对话框表面绘制滤镜的预览图形等等。
我的相关文章:
《Photoshop第三方滤镜开发的简介》
《Photoshop滤镜开发简介(2)--Photoshop回调函数》
--hoodlum1980 2009.05.11
相关文章推荐
- 怎样编写一个Photoshop滤镜(4) -- 在对话框上增加缩略图
- 怎样编写一个Photoshop滤镜(2)
- 怎样编写一个Photoshop滤镜(3)-- Scripting Plug-ins
- 计算机笔试题:写一个函数,检查字符是否是整数,如果是,返回其整数值。(或者:怎样只用4行代码编写出一个从字符串到长整型的函数)
- 怎样编写一个程序,把一个有序整数数组放到二叉树中?
- 怎样使用MFC单文档程序编写一个鼠标画线程序
- 怎样编写一个简单的hibernate程序
- 怎样编写一个程序,把一个有序整数数组放到二叉树中
- 怎样编写一个程序,把一个有序整数数组放到二叉树中(按行输出)
- 怎样编写一个程序,把一个有序整数数组放到二叉树中?
- 怎样编写一个程序,把一个有序整数数组放到二叉树中
- 怎样用Java编写一个简单的计算器
- 86 怎样编写一个程序,把一个有序整数数组放到二叉树中
- 微软等数据结构+算法面试100题(5)--怎样编写一个程序,把一个有序整数数组放到二叉树中
- 怎样安装Photoshop画笔,形状,动作,滤镜等插件
- 编写更好的代码---怎样面试一个程序员
- 5、怎样编写一个程序,把一个有序整数数组放到二叉树中
- 怎样编写一个程序,把一个有序整数数组放到二叉树中? 编写实现链表排序的一种算法。说明为什么你会选择用这样的方法?
- 写一个函数,检查字符是否是整数,如果是,返回其整数值。(或者:怎样只用4行代码编写出一个从字符串到长整形的函数?)
- 用Delphi编写一个简单的文本编辑器,怎样实现关键字高亮显示?