as3学习笔记之ConvolutionFilter滤镜

来源:互联网 发布:零售进销存软件免费版 编辑:程序博客网 时间:2024/05/16 12:52
      滤镜这个东西貌似很复杂,一时半会搞不明白,先记下搞明白的部分。ConvolutionFilter 是一个矩阵盘绕滤镜。(为什么叫盘绕我也不知道,估计就是周边像素混合运算的意思。)这个滤镜其实不是AS3的新东西,flash8的时候就有了。只不过,AS3里功能更强大点。(不过强大的功能我还不会),它的效果类似photoshop里的自定义滤镜。所以要做不同效果的话在photoshop里调好效果,然后把数值抄过来似乎是比较高效的方法。

下面是代码:

//pic是库里的一张图片,不过这里有个没明白的事情:
//把图片设为“类”之后,构建这个p1的时候提示需要两个参数,而这两个参数的值我不知道有什么用。
var p1:pic=new pic(0,0);
//创建一个BitmapData对象,一会用他测试滤镜。
//也不是一定要BitmapData对象才可以用滤镜,对于所有显示对象都可以使用filters属性来应用滤镜。
var bmd:BitmapData=new BitmapData(500, 375);
//将p1绘制到bmdbmd里
bmd.draw(p1);
//矩阵的两个维度
var matrixX:Number = 3;
var matrixY:Number = 3;
//转换矩阵,数组长度必须是上面的matrixX和matrixY的乘积,
//这里代表就是个3×3的九宫格。这里的值产生的效果是“浮雕”
var matrix:Array = new Array(-2,-1,0,-1,1,1,0,1,2);
//总计算值的除数,用来调平色彩,最大的用处是控制亮度。等同于photoshop自定义滤镜里的那个缩放。
var divisor:Number=1;
//总计算值的偏差,等同于photoshop自定义滤镜里的那个位移。
var bias:Number=0;
//创建一个ConvolutionFilter滤镜对象
var filter:BitmapFilter = new ConvolutionFilter(matrixX, matrixY, matrix, divisor,bias);
//应用滤镜,参数依次是:对象、对象区域、左上角坐标、滤镜。
bmd.applyFilter(bmd,bmd.rect,new Point(0,0),filter);
//BitmapData不是一个显示对象,所以还是需要Bitmap来显示一下。
var bm:Bitmap = new Bitmap(bmd);
addChild(bm);

再记几种其他效果
模糊:
matrix=[1,1,1,1,1,1,1,1,1];
divisor=9;
锐化:
matrix=[0,-1,0,-1,5,-1,0,-1,0];
divisor=1;
查找边缘:
matrix=[0,1,0,1,-4,1,0,1,0];
divisor=0.5;