パッケージ | flash.filters |
クラス | public final class ColorMatrixFilter |
継承 | ColorMatrixFilter BitmapFilter Object |
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 1.0, Flash Player 9 |
注意:RGBA 値の最上位バイトは赤チャネルの値を表し、後続のバイトはそれぞれ緑、青、アルファの値を表します。
新しいカラーマトリックスフィルターを作成するには、シンタックス new ColorMatrixFilter()
を使用します。フィルターの使用方法は、フィルターの適用先オブジェクトによって異なります。
- ムービークリップ、テキストフィールド、ボタン、およびビデオにフィルターを適用する場合は、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.BitmapData.applyFilter()
flash.display.DisplayObject.filters
flash.display.DisplayObject.cacheAsBitmap
プロパティ | 定義元 | ||
---|---|---|---|
constructor : Object
指定されたオブジェクトインスタンスのクラスオブジェクトまたはコンストラクター関数への参照です。 | Object | ||
matrix : Array
4 × 5 カラー変換用の 20 個のアイテムの配列です。 | ColorMatrixFilter |
メソッド | 定義元 | ||
---|---|---|---|
ColorMatrixFilter(matrix:Array = null)
指定されたパラメーターで新しい ColorMatrixFilter インスタンスを初期化します。 | ColorMatrixFilter | ||
[オーバーライド]
このフィルターオブジェクトのコピーを返します。 | ColorMatrixFilter | ||
オブジェクトに指定されたプロパティが定義されているかどうかを示します。 | Object | ||
Object クラスのインスタンスが、パラメーターとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。 | Object | ||
指定されたプロパティが存在し、列挙できるかどうかを示します。 | Object | ||
ループ処理に対するダイナミックプロパティの可用性を設定します。 | Object | ||
ロケール固有の規則に従って書式設定された、このオブジェクトのストリング表現を返します。 | Object | ||
指定されたオブジェクトのストリング表現を返します。 | Object | ||
指定されたオブジェクトのプリミティブな値を返します。 | Object |
matrix | プロパティ |
matrix:Array
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 1.0, 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 (where N is between 0.0 and 1.0)
高速バージョン。Intel® Pentium® 3 以降、Apple® G4 以降など、SSE/AltiVec アクセラレーター対応のプロセッサーでのみ使用できます。アクセラレーターは、乗数項の範囲が -15.99 ~ 15.99 で、加算項 [4]、a[9]、a[14]、および a[19] の範囲が -8000 ~ 8000 の場合に使用されます。
実装
public function get matrix():Array
public function set matrix(value:Array):void
例外
TypeError — 配列は、設定時に null に設定されます。
|
ColorMatrixFilter | () | コンストラクター |
clone | () | メソッド |
override public function clone():BitmapFilter
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 1.0, Flash Player 9 |
このフィルターオブジェクトのコピーを返します。
戻り値BitmapFilter — 元のインスタンスと同じプロパティをすべて備えた新しい ColorMatrixFilter インスタンスです。
|
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); } } }
Tue Jun 12 2018, 10:34 AM Z