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

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

ConvolutionFilter クラスを使用すると、マトリックス畳み込みフィルタ効果を適用できます。畳み込みでは、入力イメージ内のピクセルを、隣接するピクセルと組み合わせて、イメージを作成します。畳み込みを使用すると、ぼかし、エッジ検出、シャープ、エンボス、ベベルなど、幅広いイメージ効果を実現できます。このフィルタは、MovieClip、SimpleButton、TextField、Video オブジェクトなどの DisplayObject クラスから継承した表示オブジェクト、および BitmapData オブジェクトに適用できます。

畳み込みフィルタを作成するには、シンタックス new ConvolutionFilter() を使用します。フィルタの使用方法は、フィルタの適用先オブジェクトによって異なります。

表示オブジェクトにフィルタを適用すると、オブジェクトの 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 ピクセルに制限されていました。例えば、フィルタが適用されたサイズの大きいムービークリップをズームインするとき、結果として得られるイメージが最大サイズを超える場合は、フィルタがオフになります。

例を表示

関連項目

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


パブリックプロパティ
 プロパティ定義元
  alpha : Number
代替カラーのアルファ透明度の値です。
ConvolutionFilter
  bias : Number
マトリックス変換の結果に加算するバイアス量です。
ConvolutionFilter
  clamp : Boolean
イメージをクランプする必要があるかどうかを示します。
ConvolutionFilter
  color : uint
ソースイメージの外にあるピクセルを置換する 16 進数のカラー値です。
ConvolutionFilter
 Inheritedconstructor : Object
指定されたオブジェクトインスタンスのクラスオブジェクトまたはコンストラクタ関数への参照です。
Object
  divisor : Number
マトリックス変換中に使用する除数です。
ConvolutionFilter
  matrix : Array
マトリックス変換に使用する値の配列です。
ConvolutionFilter
  matrixX : Number
マトリックスの x 次元 (マトリックスの列数) です。
ConvolutionFilter
  matrixY : Number
マトリックスの y 次元 (マトリックスの行数) です。
ConvolutionFilter
  preserveAlpha : Boolean
アルファチャネルがフィルタ効果なしで維持されるかどうか、またはカラーチャネルだけではなくアルファチャネルにも畳み込みフィルタが適用されるかどうかを示します。
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
  
[override] このフィルタオブジェクトのコピーを返します。
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

代替カラーのアルファ透明度の値です。指定できる値は 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 の場合は、別の色を使用します。その色は color プロパティと alpha プロパティで指定します。デフォルト値は true です。



実装
    public function get clamp():Boolean
    public function set clamp(value:Boolean):void


次の例では、BitmapData クラスを使用してボックスを 1 つと、これよりも半分のサイズのボックスを 1 つ、合計 2 つのボックスを作成します。 サンプルが最初に読み込まれると、大きいほうのボックスが、mc の内部に attachBitmap() () を使用して描画されます。mc をクリックして、applyFilter() メソッドが呼び出されると、largeBox インスタンス(BitmapData)が smallBox をソースビットマップとして再描画されます。applyFilter() では、smallBoxRectangle 上に描画します。その幅と高さは largeBox の幅と高さに指定されているため、ソースビットマップは描画領域より小さくなります。この場合、clamp プロパティ(ConvolutionFilter)は false に設定されます。ソースビットマップの範囲内にない領域 smallBox は、clampColor 変数および clampAlpha 変数で決まる不透明の赤色です。
 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

ソースイメージの外にあるピクセルを置換する 16 進数のカラー値です。これはアルファ成分なしの 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 × 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 (Streaming SIMD Extensions:ストリーミング SIMD 拡張) を提供するプロセッサで実行するときに処理が高速化されるフィルタ仕様もあります。高速な畳み込み操作が可能となる基準は次のとおりです。

メモ:パラメータなしのコンストラクタを使用して ConvolutionFilter インスタンスを作成する場合は、値をマトリックスプロパティに割り当てる順序がフィルタの動作に影響します。次の例では、マトリックス配列に割り当てを行い、matrixX および matrixY プロパティは 0 (デフォルト値) に設定したままです。

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

次の例では、マトリックス配列に割り当てを行い、matrixX および matrixY プロパティを 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 — 配列は、設定時に 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

アルファチャンネルをフィルタ効果なしで維持するかどうか、またはカラーチャンネルだけではなく、アルファチャンネルにも畳み込みフィルタを適用するかどうかを示します。false である場合は、アルファチャンネルを含め、すべてのチャンネルに畳み込みを適用します。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 である場合は、アルファ値が保持されず、アルファチャンネルを含め、すべてのチャンネルに畳み込みを適用します。true である場合は、畳み込みをカラーチャンネルだけに適用します。デフォルト値は true です。
 
clamp:Boolean (default = true)true の場合、ソースイメージの外にあるピクセルに対して、入力イメージの所定のエッジのカラー値を複製するという方法で、必要に応じて境界に沿って入力イメージを拡張します。false の場合は、別の色を使用します。その色は color プロパティと alpha プロパティで指定します。デフォルト値は true です。
 
color:uint (default = 0) — ソースイメージの外にあるピクセルを置換する 16 進数のカラー値です。
 
alpha:Number (default = 0.0) — 代替カラーのアルファです。
メソッドの詳細
clone()メソッド
override public function clone():BitmapFilter

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

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

戻り値
BitmapFilter — 元の ConvolutionMatrixFilter インスタンスとプロパティがすべて同じである新しい ConvolutionFilter インスタンスです。
例の使用法
ConvolutionFilterExample.as

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

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

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

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


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);
        }
    }
}




 

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flex/3_jp/langref/flash/filters/ConvolutionFilter.html