パッケージflash.filters
クラスpublic final class ColorMatrixFilter
継承ColorMatrixFilter Inheritance BitmapFilter Inheritance Object

言語バージョン : ActionScript 3.0
Player のバージョン : Flash Player 9

ColorMatrixFilter クラスを使用すると、入力イメージの各ピクセルの RGBA カラー値とアルファ値に 4 × 5 マトリックス変換を適用することで、新しい RGBA カラー値とアルファ値から成る結果を作成できます。これにより、彩度変更、色相回転、輝度アルファ変換など、さまざまな効果を利用できます。このフィルタは、MovieClip、SimpleButton、TextField、Video オブジェクトなどの DisplayObject クラスから継承した表示オブジェクト、および BitmapData オブジェクトに適用できます。

メモ :RGBA 値では、最上位バイトが赤チャンネル値を表し、続いて緑、青、アルファを表します。

新しいカラーマトリックスフィルタを作成するには、シンタックス 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
4 × 5 カラー変換用の 20 個のアイテムの配列です。
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

4 × 5 カラー変換用の 20 個のアイテムの配列です。matrix プロパティは、たとえば myFilter.matrix[2] = 1; のようにしてその値を直接変更することはできません。このプロパティを変更するには、配列への参照を取得し、その参照を変更し、値をリセットする必要があります。

カラーマトリックスフィルタにより、元の各ピクセルが赤、緑、青、アルファの各成分 (srcR、srcG、srcB、srcA) に分解されます。4 つのチャンネルそれぞれの結果を計算するために、イメージの各ピクセルの値に変換マトリックスの値が乗算されます。それぞれの結果 (マトリックスの各行で 5 番目のアイテム) には -255 ~ 255 の範囲でオフセットを追加できます。カラー成分が 1 つのピクセルに再び結合され、結果が出力されます。次の式において、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% であることに相当し、カラーチャンネルの値が保持されます。

この計算は、乗算されていないカラー値に対して実行します。入力グラフィックが乗算済みカラー値で構成される場合は、この処理のために、乗算済みのカラー値が乗算されていないカラー値に自動的に変換されます。

次の 2 つの最適化モードを使用できます。

アルファのみ。ここに示すようにアルファ成分のみを調整するマトリックスをフィルタに渡すと、フィルタによりそのパフォーマンスが最適化されます。

 
 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 です)
 

高速バージョン。Intel ® Pentium 3 以降、Apple ® G4 以降など、SSE/AltiVec アクセラレータ対応のプロセッサでのみ使用できます。アクセラレータは、乗数項の範囲が -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 — 配列は、設定時に null に設定されます。
コンストラクタの詳細
ColorMatrixFilter()コンストラクタ
public function ColorMatrixFilter(matrix:Array = null)

言語バージョン : ActionScript 3.0
Player のバージョン : Flash Player 9

指定されたパラメータで新しい ColorMatrixFilter インスタンスを初期化します。

パラメータ
matrix:Array (default = null) — 4 × 5 のマトリックス構成を持つ 20 個のアイテムの配列です。
メソッドの詳細
clone()メソッド
public override function clone():BitmapFilter

言語バージョン : ActionScript 3.0
Player のバージョン : Flash Player 9

このフィルタオブジェクトのコピーを返します。

戻り値
BitmapFilter — 元のインスタンスと同じプロパティをすべて備えた新しい ColorMatrixFilter インスタンスです。
例の使用法
ColorMatrixFilterExample.as

次の例は、さまざまなカラーマトリックスフィルタをイメージファイルに適用します。フィルタコンストラクタでは、buildChild() を 4 回呼び出して、イメージの 4 つのインスタンスをロードして表示します。buildChild() の最初の呼び出しでは、引数として null を取り、最初のインスタンスにフィルタを適用しません。その後 buildChild() を呼び出すたびに、異なるカラーマトリックスフィルタをその後のイメージインスタンスに適用する関数を、引数として取ります。

buildChild() 関数は loaderという名前の新しい Loader オブジェクトを作成します。buildChild() を呼び出すたびに、complete イベントを受け取るイベントリスナーを Loader オブジェクトにアタッチします。これらのイベントは buildChild() に渡される関数によって処理されます。

applyRed()applyGreen()、および applyBlue() 関数は matrix 配列に対して異なる値を使用して、さまざまな効果を作り出します。

メモ : 幅が約 80 ピクセル以内のイメージを使用すると、最良の結果が得られます。イメージファイルの名前と場所は url プロパティに渡す値に一致する必要があります。たとえば、この例の url に渡す値は、SWF ファイルと同じディレクトリ内にある "Image.jpg" という名前のイメージファイルを指します。


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_jp/ActionScriptLangRefV3/flash/filters/ColorMatrixFilter.html