DisplayObject の色の調整

Flash Player 9 以降、Adobe AIR 1.0 以降

ColorTransform クラス(flash.geom.ColorTransform)のメソッドを使用して、表示オブジェクトの色を調整できます。 各表示オブジェクトには、 transform プロパティがあります。このプロパティは Transform クラスのインスタンスであり、表示オブジェクトに適用される各種の変換(回転、スケールの変更、位置の変更など)に関する情報を格納します。また、Transform クラスは、図形変換に関する情報を格納するだけではなく、 colorTransform プロパティも備えています。このプロパティは ColorTransform クラスのインスタンスであり、このプロパティによって表示オブジェクトのカラーを調整できます。表示オブジェクトのカラー変換情報にアクセスするには、次のようなコードを使用します。

var colorInfo:ColorTransform = myDisplayObject.transform.colorTransform;

ColorTransform インスタンスを作成したらそのプロパティ値を読み取り、適用済みのカラー変換を確認できます。また、これらの値を設定して、表示オブジェクトに対してカラー変更を加えることもできます。何らかの変更後に表示オブジェクトを更新するには、ColorTransform インスタンスを transform.colorTransform プロパティに再割り当てする必要があります。

var colorInfo:ColorTransform = myDisplayObject.transform.colorTransform; 
 
// Make some color transformations here. 
 
// Commit the change. 
myDisplayObject.transform.colorTransform = colorInfo;

コードを使用したカラー値の設定

ColorTransform クラスの color プロパティを使用すると、特定の赤、緑、青(RGB)のカラー値を表示オブジェクトに割り当てることができます。次の例では、 color プロパティを使用し、 blueBtn という名前のボタンがクリックされたときに、 square という名前の表示オブジェクトの色が青に変わるようにします。

// square is a display object on the Stage. 
// blueBtn, redBtn, greenBtn, and blackBtn are buttons on the Stage. 
 
import flash.events.MouseEvent; 
import flash.geom.ColorTransform; 
 
// Get access to the ColorTransform instance associated with square. 
var colorInfo:ColorTransform = square.transform.colorTransform; 
 
// This function is called when blueBtn is clicked. 
function makeBlue(event:MouseEvent):void 
{ 
    // Set the color of the ColorTransform object. 
    colorInfo.color = 0x003399; 
    // apply the change to the display object 
    square.transform.colorTransform = colorInfo; 
} 
 
blueBtn.addEventListener(MouseEvent.CLICK, makeBlue);

color プロパティを使用して表示オブジェクトの色を変更すると、変更前のオブジェクトに複数の色があった場合でも、オブジェクト全体の色が完全に変更されます。上部に黒いテキストのある緑の円を含む表示オブジェクトがある場合、そのオブジェクトに関連付けられた ColorTransform インスタンスの color プロパティを赤の陰影に設定すると、オブジェクト、円、テキストがすべて赤になります(したがって、テキストを他のオブジェクト部分から判別することはできなくなります)。

コードを使用したカラーおよび明度効果の変更

複数の色を持つ表示オブジェクト(デジタル写真など)があり、オブジェクトの色を全面的に変更したくない(つまり、既存の色に基づいて表示オブジェクトの色を調整したい)という場合を想定します。このシナリオでは、こうした調整を作成するための乗数プロパティとオフセットプロパティが ColorTransform クラスに設定されています。 redMultiplier greenMultiplier blueMultiplier alphaMultiplier という名前の乗数プロパティは、色付きの写真フィルター(または色付きサングラス)と同様に動作し、表示オブジェクト内の特定の色を強くしたり弱くしたりします。 オフセットプロパティ( redOffset greenOffset blueOffset alphaOffset )は、オブジェクトに特定の色を余分に追加したり、特定の色に対して設定できる最小値を指定する場合に使用されます。

これらの乗数プロパティとオフセットプロパティの共通点は、プロパティインスペクターで「カラー」ポップアップメニューから「詳細」を選択すると、Flash オーサリングツールのムービークリップシンボルに対して詳細なカラー設定を利用できるようになることです。

次のコードでは、JPEG イメージをロードしてカラー変換を適用します。これにより、x 軸と y 軸に沿ってマウスポインターを移動すると、赤のチャンネルと緑のチャンネルが調整されます。 この例ではオフセット値が指定されていないため、画面上に表示される各カラーチャンネルのカラー値は、イメージ内の元のカラー値のパーセンテージになります。つまり、特定のピクセルで表示されるほとんどの赤や緑は、そのピクセル内の元の赤や緑の量と同じになります。

import flash.display.Loader; 
import flash.events.MouseEvent; 
import flash.geom.Transform; 
import flash.geom.ColorTransform; 
import flash.net.URLRequest; 
 
// Load an image onto the Stage. 
var loader:Loader = new Loader(); 
var url:URLRequest = new URLRequest("http://www.helpexamples.com/flash/images/image1.jpg"); 
loader.load(url); 
this.addChild(loader); 
 
// This function is called when the mouse moves over the loaded image. 
function adjustColor(event:MouseEvent):void 
{ 
    // Access the ColorTransform object for the Loader (containing the image) 
    var colorTransformer:ColorTransform = loader.transform.colorTransform; 
     
    // Set the red and green multipliers according to the mouse position. 
    // The red value ranges from 0% (no red) when the cursor is at the left 
    // to 100% red (normal image appearance) when the cursor is at the right. 
    // The same applies to the green channel, except it's controlled by the 
    // position of the mouse in the y axis. 
    colorTransformer.redMultiplier = (loader.mouseX / loader.width) * 1; 
    colorTransformer.greenMultiplier = (loader.mouseY / loader.height) * 1; 
     
    // Apply the changes to the display object. 
    loader.transform.colorTransform = colorTransformer; 
} 
 
loader.addEventListener(MouseEvent.MOUSE_MOVE, adjustColor);