説明Starlingフレームワーク1.3から、フィルタのクラスが備わりました。ColorMatrixFilterクラスは、4行×5列のRGBAカラー変換行列を表します。この変換行列をイメージのピクセルごとに適用することにより、新たなイメージがつくられます。コントラストなどが変えられます。カラーの変換を表す行列は、ColorMatrixFilter.matrixプロパティで参照できます。このプロパティは、4行×5列の行列成分を順に20の数値エレメントとして納めたVectorオブジェクト(Numberベース型)です。このVectorオブジェクトのエレメント値を書替えると、カラー変換行列が変わるので、異なる変換結果が得られます。カラー変換行列を表すVectorオブジェクトは、ColorMatrixFilter()コンストラクタの引数に渡すこともできます。ColorMatrixFilter(Vectorオブジェクト)コンストラクタの引数を省くと、ColorMatrixFilterインスタンスにはデフォルトのカラー変換行列が定められます。デフォルトのカラー変換行列をオブジェクトに適用しても、カラーは変わりません。コントラストなどが変えられます。ひとつのColorMatrixFilterインスタンスに、複数のカラー変換を組合わせてかけることもできます。オブジェクトにフィルタを適用するには、DisplayObject.filterプロパティにフィルタのインスタンスを与えます。3.0(DisplayObject.filtersプロパティ)と違い、プロパティ名が単数形です。フィルタのオブジェクトを配列には入れず、直に定めることにご注意ください。フィルタオブジェクトColorMatrixFilter.reset()メソッドを呼出すと、ColorMatrixFilterインスタンスのカラー変換行列がデフォルトに戻ります。ColorMatrixFilter.matrixプロパティにnullを与えても、カラー変換行列はデフォルトになります。ColorMatrixFilterオブジェクトを使い回したいときに用いるとよいでしょう。例つぎのスクリプトは、デフォルトのColorMatrixFilterインスタンス(myFilter)をつくり、ColorMatrixFilter.adjustSaturation()メソッドで無彩色(グレースケール)を定めて、オブジェクト(instance)に適用します(図001)。-1つぎのスクリプトは、デフォルトのColorMatrixFilterインスタンス(myFilter)に、ColorMatrixFilter.adjustHue()とColorMatrixFilter.adjustBrightness()、およびColorMatrixFilter.adjustContrast()でそれぞれ色相・明度・コントラストを変えて、オブジェクト(instance)に適用します(図002)。myFilter;図002■ColorMatrixFilterのメソッドで色相・明度・コントラストを変えてオブジェクトに適用したつぎのスクリプトは、セピアカラーのカラー変換行列をVectorオブジェクト(colorSepia)に定め、ColorMatrixFilter()コンストラクタに渡してつくったColorMatrixFilterインスタンス(myFilter)をオブジェクト(instance)に適用します(図003)。myFilter;図003■セピアカラーのカラー変換行列をオブジェクトに適用してセピア調に変えた実装ColorMatrixFilterクラスのコンストラクタとColorMatrixFilter.reset()メソッド、およびColorMatrixFilter.matrixプロパティの実装を見ます。ColorMatrixFilter()コンストラクタは、内部的(private)にカラー変換行列のVectorオブジェクト(Numberベース型)のプロパティ(mUserMatrix)を初期化して、ColorMatrixFilter.matrixプロパティにnullを与えます。ColorMatrixFilter.reset()メソッドも、ColorMatrixFilter.matrixプロパティをnullに定めています。つぎに、ColorMatrixFilter.matrixプロパティは内部的にはget/setアクセサメソッドで定められています。値にnullが与えられると、内部的なカラー変換行列のVectorオブジェクト(mUserMatrix)を初期化して、静的定数(IDENTITY)でもつデフォルト値をVector.push()メソッドにより、(Function.apply()メソッドで)エレメントに加えます。渡された値がカラー変換行列のVectorオブジェクトであれば、内部的(private)なメソッドcopyMatrix()に渡します。copyMatrix()メソッドは、渡されたVectorオブジェクトの20の数値エレメントを、内部的なカラー変換行列のプロパティ(mUserMatrix)に定めています。from[i];}数学解説カラー変換行列は、4行×5列の数学の行列で表されます。行列の中の各数値は「成分」と呼ばれ、文字で表すときは行番号と列番号を添える(aij)のが一般です。a')は行列の成分をつぎのように用いた式で求められます。a45適用してもカラーが変わらないデフォルトのカラー変換行列[*1]は、つぎのように表されます。matrix)と呼んでいます。単位行列とは、左上から右下の対角成分が1で、他の成分はすべて0の「正方行列」をいいます。正方行列は行と列の数が等しい行列です。デフォルトのカラー変換行列は4行×5列ですので、厳密には単位行列とはいえません(5行×5行の単位行列の5行目が除かれた行列です)。演算してももとの値を変えないという性質は、単位行列と同じです。