| パッケージ | flash.filters |
| クラス | public final class ColorMatrixFilter |
| 継承 | ColorMatrixFilter BitmapFilter Object |
| 言語バージョン : | ActionScript 3.0 |
| Player のバージョン : | Flash Player 9 |
メモ :RGBA 値では、最上位バイトが赤チャンネル値を表し、続いて緑、青、アルファを表します。
新しいカラーマトリックスフィルタを作成するには、シンタックス new ColorMatrixFilter() を使用します。フィルタの使用方法は、フィルタの適用先オブジェクトによって異なります。
filters プロパティを使用します。オブジェクトの filters プロパティを設定しても、オブジェクトは変更されません。filters プロパティをクリアすることにより、フィルタを取り消すことができます。 BitmapData.applyFilter() メソッドを使用します。BitmapData オブジェクトで applyFilter() を呼び出すことによって、ソース BitmapData オブジェクトとフィルタオブジェクトが取得され、フィルタを適用したイメージが生成されます。表示オブジェクトにフィルタを適用すると、表示オブジェクトの cacheAsBitmap プロパティは true に設定されます。すべてのフィルタを削除すると、cacheAsBitmap は元の値に戻ります。
結果として得られるイメージの幅または高さが 2880 ピクセルを超える場合、フィルタは適用されません。たとえば、フィルタが適用されたサイズの大きいムービークリップをズームインするとき、結果として得られるイメージが 2880 ピクセルの制限に達する場合は、フィルタがオフになります。
関連項目
| プロパティ | 定義元 | ||
|---|---|---|---|
![]() | constructor : Object
特定のオブジェクトインスタンスのクラスオブジェクトまたはコンストラクタ関数への参照です。
| Object | |
| matrix : Array
4 × 5 カラー変換用の 20 個のアイテムの配列です。
| ColorMatrixFilter | ||
![]() | prototype : Object
[static]
クラスまたは関数オブジェクトのプロトタイプオブジェクトへの参照です。
| Object | |
| メソッド | 定義元 | ||
|---|---|---|---|
|
ColorMatrixFilter(matrix:Array = null)
指定されたパラメータで新しい ColorMatrixFilter インスタンスを初期化します。
| ColorMatrixFilter | ||
|
このフィルタオブジェクトのコピーを返します。
| ColorMatrixFilter | ||
![]() |
オブジェクトに指定されたプロパティが定義されているかどうかを示します。
| Object | |
![]() |
Object クラスのインスタンスが、パラメータとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。
| Object | |
![]() |
指定されたプロパティが存在し列挙できるかどうかを示します。
| Object | |
![]() |
ループ処理に対するダイナミックプロパティの可用性を設定します。
| Object | |
![]() |
指定されたオブジェクトのストリング表現を返します。
| Object | |
![]() |
指定されたオブジェクトのプリミティブな値を返します。
| 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 インスタンスです。
|
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