Flash AS3.0卷积滤镜应用.docVIP

  • 37
  • 0
  • 约2.41千字
  • 约 6页
  • 2016-04-08 发布于安徽
  • 举报
Flash AS3.0卷积滤镜应用.doc

Flash AS3中的卷积滤镜ConvolutionFilter 在ActionScript3.0中加入了滤镜类,用来在像素级别上对位图进行控制,可以实现改变颜色,形状,大小,旋转或其它显示效果。在滤镜包中有flash.filters.ConvolutionFilter(卷积滤镜)。 ConvolutionFilter 将位图中的像素数据与它周围的数据进行混合(叠加),从而达到特定的效果。图像的像素级的控制方式,使得我们可以在位图上创造一些非常丰富的效果。比如模糊(blurring)、斜角(beveling)、浮雕(embossing)、锐化 (sharpening)以及更多的效果,在使用了卷积滤镜之后,一切成为可能。卷积将输入图像的像素与相邻的像素合并以生成图像N N N N P N N N N 在这个矩阵中P代表本身的像素,而N代表周围的像素。那么下面这个矩阵: 0 0 0 0 1 0 0 0 0 可以看出将这个矩阵用于图象时,图象没有变化,因为除自已外周围的像素均为0,即周围像素对中间的P像素没有影响。 将矩阵存入一个数组,并将它作为ConvolutionFilter类构造函数的一个参数,可实现卷积滤镜效果,除了矩阵参数外ConvolutionFilter构造函数还有其它的一些参数: matrixX ― 矩阵的 x 维度(矩阵中列的数目)。默认值是 0。 matrixY: ― 矩阵的 y 维度(矩阵中行的数目)。默认值是 0。 matrix: ― 用于矩阵转换的值的数组;返回一个副本。数组中的项数必须等于 matrixX*matrixY divisor: ― 矩阵转换中使用的除数。默认值是 1。这个参数如果与矩阵值的总和相等,那么图象的亮度无变化。比如这个矩阵: 0 1 0 1 1 1 0 1 0 里面有5个1,那么矩阵总值为5,如果divisor参数设为5,则图象的亮度无变化。如果本参数为1,那么图象的亮度是原图象的5/1倍,这时图象就很亮了。如果本参数为10,那么原图片的亮度为5/10,显然图片就变暗了。 bias: ― 要添加到矩阵转换结果的偏差。默认值是 0。 简而言之,ConvolutionFilter 会逐个的处理位图中每一个像素。当它这样做的时候,它会把矩阵中心的数据当做是当前需要进行处理的像素。中心位置的值将会在周边像素值的共同作用下,计算出新的结果值。下面的公式是 3 x 3 矩阵使用的卷积公式: dst (x, y) = ((src (x-1, y-1) * a0 + src(x, y-1) * a1+ src(x+1, y-1) * a2 + src (x-1, y) * a3 + src (x, y) * a4 + src(x+1, y) * a5 + src (x-1, y+1) * a6+src(x, y+1) * a7 + src (x+1,y+1) * a8) / divisor)+ bias //矩阵转换中使用的除数+偏差量 可以看到,对于位置在(x, y)的像素,使用 3 x 3 矩阵的卷积滤镜会将(x–1, y–1)位置的像素(左上角位置)乘以矩阵中(0,0)位置的值,然后加上(x, y–1)位置的像素(正上方位置)乘以矩阵中(0,1)位置的值,以此类推,直到矩阵中的值全部与相应位置的像素值相乘,(这一步的运算是对每个颜色通道分别进行的),最后,将总和除以滤镜的divisor属性(除数),再加上滤镜的 bias属性(偏差量)。很明显,使用的矩阵越大,运算过程所花费的时间也就越多。想要应用一个卷积矩阵,你需要传递一个带有一定行数和列数的矩阵到 ConvolutionMatrix 的构造函数,如下所示: //import flash.filters.ConvolutionFilter; //建立起我们的 3x3 矩阵: var mat:Array = [ 1,0,1, 0,1,0, 1,0,1 ]; // 告诉 ConvolutionFilter 矩阵有 3 行, 3 列 // 同时,将矩阵传递进去: var convMat:ConvolutionFilter = new ConvolutionFilter(3,3,mat); // 对影片剪辑应用卷积滤镜 clip.filters = [convMat]; 下面的例子演示了一些卷积矩阵的效果。一个有用的练习是先看看矩阵的值,再来看图片最终的效果。(矩阵中的数据具有相关性) 图1原始的图片 在图1中,(中心)像素的初始值被乘以 5倍,但是上、下、左、右的像素 值被乘以–1,周边像素值的乘积加到一起,再加上被放大的中心像素的值,就会得到中心像素的最终值。最终的效果是增加了相临像素的对比度,如果周

文档评论(0)

1亿VIP精品文档

相关文档