[ActionScript 3.0] AS3 ConvolutionFilter卷积滤镜的应用

ConvolutionFilter 类应用矩阵盘绕滤镜效果。卷积将输入图像的像素与相邻的像素合并以生成图像。通过卷积,可以实现大量的图像效果,包括模糊、边缘检测、锐化、浮雕和斜角。您可以将滤镜应用于任何显示对象(即,从 DisplayObject 类继承的对象),例如 MovieClip、SimpleButton、TextField 和 Video 对象,以及 BitmapData 对象。

要创建卷积滤镜,请使用语法 new ConvolutionFilter()。滤镜的具体使用取决于要应用滤镜的对象:

  • 要对影片剪辑、文本字段、按钮和视频应用滤镜,请使用 filters 属性(继承自 DisplayObject)。设置对象的 filters 属性不会修改相应的对象,而清除 filters 属性可以删除相应的滤镜。
  • 要对 BitmapData 对象应用滤镜,请使用 BitmapData.applyFilter() 方法。对 BitmapData 对象调用 applyFilter() 会取得源 BitmapData 对象和滤镜对象,并最终生成一个过滤图像。

如果对显示对象应用滤镜,则该对象的 cacheAsBitmap 属性值将设置为 true。如果清除所有滤镜,将恢复 cacheAsBitmap 的原始值。

如果所得图像超过最大尺寸,则不应用滤镜。在 AIR 1.5 和 Flash Player 10 中,最大宽度或高度为 8,191 像素,并且像素总数不能超过 16,777,215 像素。(因此,如果图像的宽度为 8,191 像素,则其高度只能为 2,048 像素。)在 Flash Player 9 及早期版本和 AIR 1.1 及早期版本中,高度最大为 2,880 像素,宽度最大为 2,880 像素。例如,如果在放大某大型影片剪辑时应用了滤镜,则所得图像超过最大尺寸时,将关闭该滤镜。

  1 package
  2 {
  3     import flash.display.DisplayObject;
  4     import flash.display.Loader;
  5     import flash.display.Sprite;
  6     import flash.events.Event;
  7     import flash.events.IOErrorEvent;
  8     import flash.filters.BitmapFilter;
  9     import flash.filters.ConvolutionFilter;
 10     import flash.net.URLRequest;
 11     import flash.text.TextField;
 12     import flash.text.TextFieldAutoSize;
 13     
 14     /**
 15      * @author Frost.Yen
 16      * @E-mail 871979853@qq.com
 17      * @create 2015-9-16 下午2:05:36
 18      *
 19      */
 20     public class ConvolutionFilterTest extends Sprite
 21     {
 22         private var size:uint = 140;
 23         private var url:String = "ConvolutionFilter.png";
 24 
 25         public function ConvolutionFilterTest()
 26         {
 27             buildChild(applyNothing);
 28             buildChild(applyBrightness);
 29             buildChild(applySharpness);
 30             buildChild(applyOutline);
 31 
 32         }
 33         private function buildChild(loadHandler:Function):void {
 34             var loader:Loader = new Loader();
 35             loader.x = numChildren * size;
 36             loader.y = size;
 37             loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
 38             if(loadHandler != null) {
 39                 loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadHandler);
 40             }
 41             
 42             var request:URLRequest = new URLRequest(url);
 43             loader.load(request);
 44             addChild(loader);
 45         }
 46         
 47         private function applyNothing(event:Event):void {
 48             var child:DisplayObject = DisplayObject(event.target.loader);
 49             applyLabel(child, "no filter");
 50         }
 51         
 52         private function applyBrightness(event:Event):void {
 53             var child:DisplayObject = DisplayObject(event.target.loader);
 54             var matrix:Array = [5, 5, 5,
 55                 5, 0, 5,
 56                 5, 5, 5];
 57             applyFilter(child, matrix);
 58             applyLabel(child, "brightness");
 59         }
 60         
 61         private function applySharpness(event:Event):void {
 62             var child:DisplayObject = DisplayObject(event.target.loader);
 63             var matrix:Array = [0, -1, 0,
 64                 -1, 20, -1,
 65                 0, -1, 0];
 66             applyFilter(child, matrix);
 67             applyLabel(child, "sharpness");
 68         }
 69         
 70         private function applyOutline(event:Event):void {
 71             var child:DisplayObject = DisplayObject(event.target.loader);
 72             var matrix:Array = [-30, 30, 0,
 73                 -30, 30, 0,
 74                 -30, 30, 0];
 75             applyFilter(child, matrix);
 76             applyLabel(child, "outline");
 77         }
 78         
 79         private function applyFilter(child:DisplayObject, matrix:Array):void {
 80             var matrixX:Number = 3;
 81             var matrixY:Number = 3;
 82             var divisor:Number = 9;
 83             var filter:BitmapFilter = new ConvolutionFilter(matrixX, matrixY, matrix, divisor);
 84             var filters:Array = new Array();
 85             filters.push(filter);
 86             child.filters = filters;
 87         }
 88         
 89         private function applyLabel(child:DisplayObject, label:String):void {
 90             var tf:TextField = new TextField();
 91             tf.x = child.x;
 92             tf.y = child.height;
 93             tf.autoSize = TextFieldAutoSize.LEFT;
 94             tf.text = label;
 95             addChild(tf);
 96         }
 97         
 98         private function ioErrorHandler(event:IOErrorEvent):void {
 99             trace("Unable to load image: " + url);
100         }
101 
102     }
103 }

 

posted on 2015-11-17 15:17  晏过留痕  阅读(723)  评论(0编辑  收藏  举报