zoukankan      html  css  js  c++  java
  • [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 }
  • 相关阅读:
    英语影视台词---三、Cinema Paradiso
    英语影视台词---二、Inception
    智课雅思短语---二、exert positive/ negative effects on…
    MVC 编程模型及其变种
    四:redis的sets类型
    HDU 2048 号码塔(DP)
    删除句子UITableView额外的底线和切割线
    css+html菜单适应性学习的宽度
    删RAC中间ASM和LISTENER 资源的正确方法
    联合县城市,采用ajax,而使用ul模拟select下拉
  • 原文地址:https://www.cnblogs.com/frost-yen/p/4971824.html
Copyright © 2011-2022 走看看