flash.filters
public final class ColorMatrixFilter
继承ColorMatrixFilter Inheritance BitmapFilter Inheritance Object

语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

使用 ColorMatrixFilter 类可以将 4 x 5 矩阵转换应用于输入图像上的每个像素的 RGBA 颜色和 Alpha 值,以生成具有一组新的 RGBA 颜色和 Alpha 值的结果。 该类允许饱和度更改、色相旋转、亮度为 Alpha 以及各种其它效果。 您可以将滤镜应用于任何显示对象(即,从 DisplayObject 类继承的对象),例如 MovieClip、SimpleButton、TextField 和 Video 对象,以及 BitmapData 对象。

注意:对于 RGBA 值,最高有效字节代表红色通道值,其后的有效字节分别代表绿色、蓝色和 Alpha 通道值。

若要创建新的颜色矩阵滤镜,请使用 new ColorMatrixFilter() 语法。 滤镜的具体使用取决于要应用滤镜的对象:

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

如果结果图像的宽度或高度超过 2880 像素,则不应用滤镜。 例如,如果您在放大某大型影片剪辑时使用了滤镜,则在结果图像超过 2880 像素的限制时,该滤镜将关闭。

查看示例

另请参见

flash.display.BitmapData.getPixel()
flash.display.BitmapData.applyFilter()
flash.display.DisplayObject.filters
flash.display.DisplayObject.cacheAsBitmap



公共 属性
 属性定义方
 Inheritedconstructor : Object
对类对象或给定对象实例的构造函数的引用。
Object
  matrix : Array
由 20 个项目组成的数组,适用于 4 x 5 颜色转换。
ColorMatrixFilter
 Inheritedprototype : Object
[static] 对类或函数对象的原型对象的引用。
Object
公共 方法
 方法定义方
  
ColorMatrixFilter(matrix:Array = null)
用指定参数初始化新的 ColorMatrixFilter 实例。
ColorMatrixFilter
  
返回此滤镜对象的副本。
ColorMatrixFilter
 Inherited
指示对象是否已经定义了指定的属性。
Object
 Inherited
指示 Object 类的实例是否在指定为参数的对象的原型链中。
Object
 Inherited
指示指定的属性是否存在、是否可枚举。
Object
 Inherited
设置循环操作动态属性的可用性。
Object
 Inherited
返回指定对象的字符串表示形式。
Object
 Inherited
返回指定对象的原始值。
Object
属性详细信息
matrix属性
matrix:Array  [read-write]

语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

由 20 个项目组成的数组,适用于 4 x 5 颜色转换。 matrix 属性不能通过直接修改它的值来更改(例如 myFilter.matrix[2] = 1;)。 相反,必须先获取对数组的引用,对引用进行更改,然后重置该值。

颜色矩阵滤镜将每个源像素分离成它的红色、绿色、蓝色和 Alpha 成分,分别以 srcR、srcG、srcB 和 srcA 表示。 若要计算四个通道中每个通道的结果,可将图像中每个像素的值乘以转换矩阵中的值。 (可选)可以将偏移量(介于 -255 至 255 之间)添加到每个结果(矩阵的每行中的第五项)中。 滤镜将各颜色成分重新组合为单一像素,并写出结果。 在下列公式中,a[0] 到 a[19] 对应于由 20 个项目组成的数组中的条目 0 至 19,该数组已传递到 matrix 属性:

 redResult = (a[0] * srcR) + (a[1] * srcG) + (a[2] * srcB) + (a[3] * srcA) + a[4] greenResult = (a[5] * srcR) + (a[6] * srcG) + (a[7] * srcB) + (a[8] * srcA) + a[9] blueResult = (a[10] * srcR) + (a[11] * srcG) + (a[12] * srcB) + (a[13] * srcA) + a[14] alphaResult = (a[15] * srcR) + (a[16] * srcG) + (a[17] * srcB) + (a[18] * srcA) + a[19]
 

对于数组中的每个颜色值,值 1 等于正发送到输出的通道的 100%,同时保留颜色通道的值。

计算是对非相乘的颜色值执行的。 如果输入图形由预先相乘的颜色值组成,这些值会自动转换为非相乘的颜色值以执行此操作。

可使用两种经过优化的模式:

仅 Alpha。当向滤镜传递仅调整 Alpha 成分的矩阵时,滤镜将优化其性能,如下所示:

     1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 N 0(其中,N 介于 0.0 和 1.0 之间)
 

更快的版本。 仅可用于启用 SSE/Altivec 加速器的处理器,如 Intel ® Pentium 3 及更高版本、Apple ® G4 及更高版本。 当乘数项在 -15.99 到 15.99 之间,并且加数项 a[4]、a[9]、a[14] 和 a[19] 在 -8000 到 8000 之间时,将使用加速器。


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

引发
TypeError — 设置时 Array 为 null
构造函数详细信息
ColorMatrixFilter()构造函数
public function ColorMatrixFilter(matrix:Array = null)

语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

用指定参数初始化新的 ColorMatrixFilter 实例。

参数
matrix:Array (default = null) — 由 20 个项目(排列成 4 x 5 矩阵)组成的数组。
方法详细信息
clone()方法
public override function clone():BitmapFilter

语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

返回此滤镜对象的副本。

返回
BitmapFilter — 与原始实例具有完全相同的属性的新 ColorMatrixFilter 实例。
示例 如何使用示例

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

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

applyRed()applyGreen()applyBlue() 函数使用 matrix 数组的不同值来实现不同的效果。

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


package {
    import flash.display.DisplayObject;
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.IOErrorEvent;
    import flash.filters.ColorMatrixFilter;
    import flash.net.URLRequest;

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

        public function ColorMatrixFilterExample() {
            buildChild(null);
            buildChild(applyRed);
            buildChild(applyGreen);
            buildChild(applyBlue);
        }

        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 applyRed(event:Event):void {
            var child:DisplayObject = DisplayObject(event.target.loader);
            var matrix:Array = new Array();
            matrix = matrix.concat([1, 0, 0, 0, 0]); // red
            matrix = matrix.concat([0, 0, 0, 0, 0]); // green
            matrix = matrix.concat([0, 0, 0, 0, 0]); // blue
            matrix = matrix.concat([0, 0, 0, 1, 0]); // alpha

            applyFilter(child, matrix);
        }

        private function applyGreen(event:Event):void {
            var child:DisplayObject = DisplayObject(event.target.loader);
            var matrix:Array = new Array();
            matrix = matrix.concat([0, 0, 0, 0, 0]); // red
            matrix = matrix.concat([0, 1, 0, 0, 0]); // green
            matrix = matrix.concat([0, 0, 0, 0, 0]); // blue
            matrix = matrix.concat([0, 0, 0, 1, 0]); // alpha

            applyFilter(child, matrix);
        }

        private function applyBlue(event:Event):void {
            var child:DisplayObject = DisplayObject(event.target.loader);
            var matrix:Array = new Array();
            matrix = matrix.concat([0, 0, 0, 0, 0]); // red
            matrix = matrix.concat([0, 0, 0, 0, 0]); // green
            matrix = matrix.concat([0, 0, 1, 0, 0]); // blue
            matrix = matrix.concat([0, 0, 0, 1, 0]); // alpha

            applyFilter(child, matrix);
        }

        private function applyFilter(child:DisplayObject, matrix:Array):void {
            var filter:ColorMatrixFilter = new ColorMatrixFilter(matrix);
            var filters:Array = new Array();
            filters.push(filter);
            child.filters = filters;
        }
        
        private function ioErrorHandler(event:IOErrorEvent):void {
            trace("Unable to load image: " + url);
        }
    }
}




 

评论添加到页面后给我发送电子邮件 | 评论报告

当前页: http://livedocs.adobe.com/flash/9.0_cn/ActionScriptLangRefV3/flash/filters/ColorMatrixFilter.html