这是在Adobe官网上看到的一个滤镜,功能简单实用,而且代码很少,非常适合学习。原址:http://www.adobe.com/cfusion/exchange/index.cfm?event=extensionDetail&loc=en_us&extid=1557018 [kml_flAShembed movie="http://www.fluidea.cn/blog/wp-content/uploads/2008/09/fliterex2.swf" height="232" width="250" /]
smudger.pbk代码如下:
<languageVersion: 1.0;></p> <p>kernel smudge</p> <p>< namespace: "smudger"; vendor: "Frank Reitberger"; version: 1; description: "generates a smudged pattern"; ></p> <p>{ parameter float amount < minValue: float(0.0); maxValue: float(5.0); defaultValue: float(0.5); description: "amount"; >; </p> <p> input image4 src; output pixel4 dst; </p> <p> void evaluatePixel() { //outCoord函数返回当前正在处理的像素的中点坐标 float2 pos = outCoord();</p> <p> ////////////////////////// // patterize transition ////////////////////////// float nx = 5.0 * (cos(pos.y / 5.0)); float ny = 5.0 * (cos(pos.x / 6.0)); float2 pnt = float2( nx*ny , nx* ny ); //取样操作 dst = sampleNearest( src, outCoord() + pnt * amount); } }
Pixel Bender 是类似C语言的图形处理语言,基于GLSL。如果有过OpenGL/GLSL编程经验的人,就很熟悉了。 使用Pixel Bender,我们可以编写很多自己的滤镜,在Flash中使用。可以嵌入进去,还可以在运行期间动态加载滤镜。
一个pbk文件,必须包含一个kernel,类似一个类
evaluatePixel()函数是必须的,是程序的入口,好比构造函数,运行时将自动执行。
parameter 申明参数,提供外部控制,As就是使用参数来修改滤镜。
input 和output:输入和输出的位图数据
evaluatePixel将对图片的所有像素作用,而不只是单一一个像素。