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 }