パッケージ | flash.filters |
クラス | public class ConvolutionFilter |
継承 | ConvolutionFilter BitmapFilter Object |
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 1.0, Flash Player 9 |
畳み込みフィルターを作成するには、シンタックス new ConvolutionFilter()
を使用します。フィルターの使用方法は、フィルターの適用先オブジェクトによって異なります。
- ムービークリップ、テキストフィールド、ボタン、およびビデオにフィルターを適用する場合は、DisplayObject から継承した
filters
プロパティを使用します。オブジェクトの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 ピクセルです。 例えば、フィルターが適用されたサイズの大きいムービークリップをズームインするとき、結果として得られるイメージが最大サイズを超える場合は、フィルターがオフになります。
関連する API エレメント
flash.display.DisplayObject.filters
flash.display.DisplayObject.cacheAsBitmap
matrix
プロパティ | 定義元 | ||
---|---|---|---|
alpha : Number
代替カラーのアルファ透明度の値です。 | ConvolutionFilter | ||
bias : Number
マトリックス変換の結果に加算するバイアス量です。 | ConvolutionFilter | ||
clamp : Boolean
イメージをクランプする必要があるかどうかを示します。 | ConvolutionFilter | ||
color : uint
ソースイメージの外にあるピクセルを置換する 16 進数のカラー値です。 | ConvolutionFilter | ||
constructor : Object
指定されたオブジェクトインスタンスのクラスオブジェクトまたはコンストラクター関数への参照です。 | Object | ||
divisor : Number
マトリックス変換中に使用する除数です。 | ConvolutionFilter | ||
matrix : Array
マトリックス変換に使用する値の配列です。 | ConvolutionFilter | ||
matrixX : Number
マトリックスの x 次元 (マトリックスの列数) です。 | ConvolutionFilter | ||
matrixY : Number
マトリックスの y 次元(マトリックスの行数)です。 | ConvolutionFilter | ||
preserveAlpha : Boolean
アルファチャンネルがフィルター効果なしで維持されるかどうか、またはカラーチャンネルだけではなくアルファチャンネルにも畳み込みフィルターが適用されるかどうかを示します。 | ConvolutionFilter |
メソッド | 定義元 | ||
---|---|---|---|
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 | ||
オブジェクトに指定されたプロパティが定義されているかどうかを示します。 | Object | ||
Object クラスのインスタンスが、パラメーターとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。 | Object | ||
指定されたプロパティが存在し、列挙できるかどうかを示します。 | Object | ||
ループ処理に対するダイナミックプロパティの可用性を設定します。 | Object | ||
ロケール固有の規則に従って書式設定された、このオブジェクトのストリング表現を返します。 | Object | ||
指定されたオブジェクトのストリング表現を返します。 | Object | ||
指定されたオブジェクトのプリミティブな値を返します。 | Object |
alpha | プロパティ |
bias | プロパティ |
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()
では、smallBox
を Rectangle
上に描画します。その幅と高さは 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 | プロパティ |
divisor | プロパティ |
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 拡張)を提供するプロセッサーで実行するときに処理が高速化されるフィルター仕様もあります。高速な畳み込み操作が可能となる基準は次のとおりです。
- 3 × 3 フィルターである。
- フィルター項はすべて -127 ~ +127 の整数である。
- すべてのフィルター項の合計の絶対値が 127 を超えていない。
- いずれかのフィルター項が負である場合、除数は 2.00001 ~ 256 である。
- フィルター項がすべて正である場合、除数は 1.1 ~ 256 である。
- バイアスは整数である。
注意:パラメーターなしのコンストラクターを使用して 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 | プロパティ |
matrixY | プロパティ |
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 インスタンスです。
|
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); } } }
Tue Jun 12 2018, 10:34 AM Z