flash.filters
public class ConvolutionFilter
继承ConvolutionFilter Inheritance BitmapFilter Inheritance Object

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

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

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

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

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

查看示例

另请参见

flash.display.BitmapData.applyFilter()
flash.display.DisplayObject.filters
flash.display.DisplayObject.cacheAsBitmap
matrix
Using filters in Flex


公共属性
 属性定义方
  alpha : Number
替换颜色的 Alpha 透明度值。
ConvolutionFilter
  bias : Number
要添加到矩阵转换结果中的偏差量。
ConvolutionFilter
  clamp : Boolean
指示是否应锁定图像。
ConvolutionFilter
  color : uint
要替换源图像之外的像素的十六进制颜色。
ConvolutionFilter
 Inheritedconstructor : Object
对类对象或给定对象实例的构造函数的引用。
Object
  divisor : Number
矩阵转换中使用的除数。
ConvolutionFilter
  matrix : Array
用于矩阵转换的值的数组。
ConvolutionFilter
  matrixX : Number
矩阵的 x 维度(矩阵中列的数目)。
ConvolutionFilter
  matrixY : Number
矩阵的 y 维度(矩阵中行的数目)。
ConvolutionFilter
  preserveAlpha : Boolean
指示是否已保留 Alpha 通道并且不使用滤镜效果,或是否对 Alpha 通道以及颜色通道应用卷积滤镜。
ConvolutionFilter
 Inheritedprototype : Object
[静态] 对类或函数对象的原型对象的引用。
Object
公共方法
 方法定义方
  
ConvolutionFilter(matrixX:Number = 0, matrixY:Number = 0, matrix:Array = null, divisor:Number = 1.0, bias:Number = 0.0, preserveAlpha:Boolean = true, clamp:Boolean = true, color:uint = 0, alpha:Number = 0.0)
用指定参数初始化 ConvolutionFilter 实例。
ConvolutionFilter
  
返回此滤镜对象的副本。
ConvolutionFilter
 Inherited
指示对象是否已经定义了指定的属性。
Object
 Inherited
指示 Object 类的实例是否在指定为参数的对象的原型链中。
Object
 Inherited
指示指定的属性是否存在、是否可枚举。
Object
 Inherited
设置循环操作动态属性的可用性。
Object
 Inherited
返回指定对象的字符串表示形式。
Object
 Inherited
返回指定对象的原始值。
Object
属性详细信息
alpha属性
alpha:Number  [读写]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

替换颜色的 Alpha 透明度值。有效值为 0 到 1.0。默认值为 0。例如,.25 设置透明度值为 25%。



实现
    public function get alpha():Number
    public function set alpha(value:Number):void
bias属性 
bias:Number  [读写]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

要添加到矩阵转换结果中的偏差量。偏差可增加每个通道的颜色值,以便暗色变得较明亮。默认值为 0。



实现
    public function get bias():Number
    public function set bias(value:Number):void
clamp属性 
clamp:Boolean  [读写]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

指示是否应锁定图像。对于源图像之外的像素,如果值为 true,则表明通过复制输入图像每个相应的边缘处的颜色值,沿着输入图像的每个边框按需要扩展输入图像。如果值为 false,则表明应按照 coloralpha 属性中的指定使用其它颜色。默认值为 true



实现
    public function get clamp():Boolean
    public function set clamp(value:Boolean):void

示例
以下示例使用 BitmapData 类创建两个框,其中一个框的大小是另一个框的一半。在首次加载该示例时,将使用 attachBitmap()mc 内绘制较大的框。在单击 mc 并调用 applyFilter() 方法时,将会在 smallBox 作为源位图的基础上重绘 BitmapDatalargeBox 实例。由于 applyFilter() 会将 smallBox 绘制在 Rectangle 上,而后者的宽度和高度被指定为 largeBox 的宽度和高度,因此源位图要比绘制区域更小。在本例中,ConvolutionFilterclamp 属性被设置为 false,未被源位图 smallBox 覆盖的区域是由 clampColorclampAlpha 变量确定的纯红色。
package {
    import flash.display.Sprite;
    import flash.display.BitmapData;
    import flash.filters.ConvolutionFilter;
    import flash.text.TextField;
    import flash.geom.Rectangle;
    import flash.geom.Point;

    public class ConvolutionClampExample extends Sprite {
        // Variables that affect clamping:
        var clamp:Boolean = false;
        var clampColor:Number = 0xFF0000;
        var clampAlpha:Number = 1;
        
        // For illustration, keep other ConvolutionFilter variables neutral:
        var bias:Number = 0;
        var preserveAlpha:Boolean = false;
        // Also, construct a neutral matrix
        var matrixCols:Number = 3;
        var matrixRows:Number = 3;
        var matrix:Array = [ 1,1,1,
                             1,1,1,
                             1,1,1 ];
        
        var filter:ConvolutionFilter = new ConvolutionFilter(matrixCols, matrixRows, matrix, matrix.length, bias, preserveAlpha, clamp, clampColor, clampAlpha);
        
        var largeBoxWidth:Number = 100;
        var largeBoxHeight:Number = 100;
        var largeBox:BitmapData = new BitmapData(largeBoxWidth, largeBoxWidth, true, 0xCC00FF00);
        var smallBoxWidth:Number = largeBoxWidth / 2;
        var smallBoxHeight:Number = largeBoxHeight / 2;
        var smallBox:BitmapData = new BitmapData(smallBoxWidth, smallBoxWidth, true, 0xCC0000FF);
            
        var mc:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
        mc.attachBitmap(largeBox, this.getNextHighestDepth());
        
        mc.onPress = function() {
            largeBox.applyFilter(smallBox,
                                 new Rectangle(0,0, largeBoxWidth, largeBoxHeight),
                                 new Point(0,0),
                                 filter);
        }
    }
}
color属性 
color:uint  [读写]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

要替换源图像之外的像素的十六进制颜色。它是一个没有 Alpha 成分的 RGB 值。默认值为 0。



实现
    public function get color():uint
    public function set color(value:uint):void
divisor属性 
divisor:Number  [读写]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

矩阵转换中使用的除数。默认值为 1。如果除数是所有矩阵值的总和,则可调平结果的总体色彩强度。忽略 0 值,此时使用默认值。



实现
    public function get divisor():Number
    public function set divisor(value:Number):void
matrix属性 
matrix:Array  [读写]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

用于矩阵转换的值的数组。数组中的项数必须等于 matrixX * matrixY

矩阵盘绕基于一个 n x m 矩阵,该矩阵说明输入图像中的给定像素值如何与其相邻的像素值合并以生成最终的像素值。每个结果像素通过将矩阵应用到相应的源像素及其相邻像素来确定。

对于 3 x 3 矩阵卷积,将以下公式用于每个独立的颜色通道:

              dst (x, y) = ((src (x-1, y-1) * a0 + src(x, y-1) * a1....
                   src(x, y+1) * a7 + src (x+1,y+1) * a8) / divisor) + bias
            

某些规格的滤镜在由提供 SSE(SIMD 流扩展)的处理器运行时执行速度更快。以下是更快的卷积操作的条件:

注意:如果使用不带参数的构造函数创建了 ConvolutionFilter 实例,则为矩阵属性赋值的顺序将影响滤镜的行为。在以下情况中,矩阵数组已指定,而 matrixXmatrixY 属性仍设置为 0(默认值):

public var myfilter:ConvolutionFilter = new ConvolutionFilter();
    myfilter.matrix = [0, 0, 0, 0, 1, 0, 0, 0, 0];
    myfilter.matrixX = 3;
    myfilter.matrixY = 3;

在以下情况中,矩阵数组已指定,而 matrixXmatrixY 属性设置为 3

public var myfilter:ConvolutionFilter = new ConvolutionFilter();
    myfilter.matrixX = 3;
    myfilter.matrixY = 3;
    myfilter.matrix = [0, 0, 0, 0, 1, 0, 0, 0, 0];



实现
    public function get matrix():Array
    public function set matrix(value:Array):void

引发
TypeError — 设置时 Array 为 null
matrixX属性 
matrixX:Number  [读写]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

矩阵的 x 维度(矩阵中列的数目)。默认值为 0。



实现
    public function get matrixX():Number
    public function set matrixX(value:Number):void
matrixY属性 
matrixY:Number  [读写]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

矩阵的 y 维度(矩阵中行的数目)。默认值为 0。



实现
    public function get matrixY():Number
    public function set matrixY(value:Number):void
preserveAlpha属性 
preserveAlpha:Boolean  [读写]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

指示是否已保留 Alpha 通道并且不使用滤镜效果,或是否对 Alpha 通道以及颜色通道应用卷积滤镜。值为 false 表示卷积应用于所有通道,包括 Alpha 通道。值为 true 表示只对颜色通道应用卷积。默认值为 true



实现
    public function get preserveAlpha():Boolean
    public function set preserveAlpha(value:Boolean):void
构造函数详细信息
ConvolutionFilter()构造函数
public function ConvolutionFilter(matrixX:Number = 0, matrixY:Number = 0, matrix:Array = null, divisor:Number = 1.0, bias:Number = 0.0, preserveAlpha:Boolean = true, clamp:Boolean = true, color:uint = 0, alpha:Number = 0.0)

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

用指定参数初始化 ConvolutionFilter 实例。

参数
matrixX:Number (default = 0) — 矩阵的 x 维度(矩阵中列的数目)。默认值为 0。
 
matrixY:Number (default = 0) — 矩阵的 y 维度(矩阵中行的数目)。默认值为 0。
 
matrix:Array (default = null) — 用于矩阵转换的值的数组。数组中的项数必须等于 matrixX * matrixY
 
divisor:Number (default = 1.0) — 矩阵转换中使用的除数。默认值为 1。如果除数是所有矩阵值的总和,则可调平结果的总体色彩强度。忽略 0 值,此时使用默认值。
 
bias:Number (default = 0.0) — 要添加到矩阵转换结果的偏差。默认值为 0。
 
preserveAlpha:Boolean (default = true)false 值表示未保留 Alpha 值,并且卷积适用于所有通道(包括 Alpha 通道)。值为 true 表示只对颜色通道应用卷积。默认值为 true
 
clamp:Boolean (default = true) — 对于源图像之外的像素,如果值为 true,则表明通过复制输入图像给定边缘处的颜色值,沿着输入图像的每个边框按需要扩展输入图像。如果值为 false,则表明应按照 coloralpha 属性中的指定使用其它颜色。默认值为 true
 
color:uint (default = 0) — 要替换源图像之外的像素的十六进制颜色。
 
alpha:Number (default = 0.0) — 替换颜色的 Alpha。
方法详细信息
clone()方法
override public function clone():BitmapFilter

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

返回此滤镜对象的副本。

返回
BitmapFilter — BitmapFilter,与原始 ConvolutionMatrixFilter 实例具有完全相同的属性的新 ConvolutionFilter 实例。
示例 如何使用示例
ConvolutionFilterExample.as

以下示例将不同的卷积滤镜应用于图像文件。滤镜构造函数调用 buildChild() 四次,以加载和显示图像的四个实例。对 buildChild() 的每次调用都将函数作为参数,该函数不对第一个实例应用任何滤镜,而对后续的每个实例应用不同的卷积滤镜。

buildChild() 函数创建一个名为 loader 的新 Loader 对象。每次调用 buildChild() 时,将一个事件侦听器附加到 Loader 对象,以侦听 complete 事件,这些事件由传递给 buildChild() 的函数处理。

applyBrightness()applySharpness()applyOutline() 函数使用 matrix 数组的不同值来实现不同的 ConvolutionFilter 效果。

注意:为获得最佳效果,请使用宽度约为 80 像素的图像。图像文件的名称和位置应与您传递给 url 属性的值相匹配。例如,此示例中传递给 url 的值指向名为“Image.jpg”的图像文件,该图像文件与 SWF 文件位于同一目录中。

package {
    import flash.display.DisplayObject;
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.*;
    import flash.filters.BitmapFilter;
    import flash.filters.ConvolutionFilter;
    import flash.net.URLRequest;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;

    public class ConvolutionFilterExample extends Sprite {
        private var size:uint = 140;
        private var url:String = "Image.jpg";

        public function ConvolutionFilterExample() {
            buildChild(applyNothing);
            buildChild(applyBrightness);
            buildChild(applySharpness);
            buildChild(applyOutline);
        }

        private function buildChild(loadHandler:Function):void {
            var loader:Loader = new Loader();
            loader.x = numChildren * size;
            loader.y = size;
            loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
            if(loadHandler != null) {
                loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadHandler);
            }

            var request:URLRequest = new URLRequest(url);
            loader.load(request);
            addChild(loader);
        }

        private function applyNothing(event:Event):void {
            var child:DisplayObject = DisplayObject(event.target.loader);
            applyLabel(child, "no filter");
        }

        private function applyBrightness(event:Event):void {
            var child:DisplayObject = DisplayObject(event.target.loader);
            var matrix:Array = [5, 5, 5,
                                5, 0, 5,
                                5, 5, 5];
            applyFilter(child, matrix);
            applyLabel(child, "brightness");
        }

        private function applySharpness(event:Event):void {
            var child:DisplayObject = DisplayObject(event.target.loader);
            var matrix:Array = [0, -1, 0,
                               -1, 20, -1,
                                0, -1, 0];
            applyFilter(child, matrix);
            applyLabel(child, "sharpness");
        }

        private function applyOutline(event:Event):void {
            var child:DisplayObject = DisplayObject(event.target.loader);
            var matrix:Array = [-30, 30, 0,
                                -30, 30, 0,
                                -30, 30, 0];
            applyFilter(child, matrix);
            applyLabel(child, "outline");
        }

        private function applyFilter(child:DisplayObject, matrix:Array):void {
            var matrixX:Number = 3;
            var matrixY:Number = 3;
            var divisor:Number = 9;
            var filter:BitmapFilter = new ConvolutionFilter(matrixX, matrixY, matrix, divisor);
            var filters:Array = new Array();
            filters.push(filter);
            child.filters = filters;
        }

        private function applyLabel(child:DisplayObject, label:String):void {
            var tf:TextField = new TextField();
            tf.x = child.x;
            tf.y = child.height;
            tf.autoSize = TextFieldAutoSize.LEFT;
            tf.text = label;
            addChild(tf);
        }

        private function ioErrorHandler(event:IOErrorEvent):void {
            trace("Unable to load image: " + url);
        }
    }
}