ライブラリにあるイメージにリンケージ識別子が割り当てられていれば、BitmapData.loadBitmap() メソッドを使用して、ライブラリ内から直接にビットマップオブジェクトを作成できます。これは BitmapData クラスの静的メソッドなので、クラスのインスタンスからアクセスするのではなく、クラス自体を指定して呼び出します。呼び出すと、正しいサイズを持ちすべてのピクセルデータを含んだ、設定済みのインスタンスが返されます。
ライブラリ内のイメージにリンケージ識別子を割り当てるには、次のようにします。
次に示す ActionScript では、"logo" というリンケージ識別子を既に割り当ててあるライブラリ内のイメージから、ビットマップを作成します。
import flash.display.BitmapData
logo = BitmapData.loadBitmap("logo")
このシンボルは、何の変換も適用しない状態でビットマップオブジェクトとして描画されます。ライブラリからロードしたシンボルをサイズ変更するには、一時的なムービークリップに Movieclip.attachMovie() メソッドでシンボルを割り当て、それから、ビットマップのサイズを変更するような変換マトリックスを適用してムービークリップのスナップショットを作成するのが最もよい方法です。その例を次に示します。
import flash.geom.Matrix
import flash.display.BitmapData
// ライブラリ内のシンボルをムービークリップに割り当て
this.attachMovie("largeSymbol","temp_mc",this.getNextHighestDepth()
scale=50 // 伸縮率 (%)
scale/=100
// ビットマップを伸縮するための変換マトリックスを作成
scaleMatrix = new Matrix()
scaleMatrix.scale(scale,scale)
scaledBitmap = new BitmapData(temp_mc._width*scale,temp_mc._height*scale,true,0x00FFFFFF)
/// 指定した変換マトリックスでビットマップを伸縮して表示
scaledBitmap.draw(temp_mc,scaledMatrix)
// 不要になったムービークリップを削除
temp_mc.removeMovieClip()
ライブラリからロードしたビットマップをサイズ変更する場合は、その後で Movieclip.attachMovie() によってビットマップをムービークリップにアタッチすることはできません。これを解決するには、次のようにビットマップオブジェクトを 2 つ使用する必要があります。1 つのビットマップオブジェクトに伸縮前のビットマップを格納し、それから、伸縮後のビットマップを含んだもう 1 つのビットマップを作成します。
import flash.geom.Matrix
import flash.display.BitmapData
// ライブラリから作成したビットマップをビットマップオブジェクトにアタッチ
largeBitmap=BitmapData.load("largeBitmap")
scale=50 // 伸縮率 (%)
// 伸縮率を正規化
scale/=100
// 新しい変換マトリックスを作成
scaleMatrix = new Matrix()
// マトリックスを伸縮
scaleMatrix.scale(scale,scale)
/*
アタッチしたビットマップが透明の場合は透明のピクセルで塗りつぶし、
そうでない場合は白のピクセルで塗りつぶす
*/
fillColor=(largeBitmap.transparent) ?0x00FFFFFF :0xFFFFFFFF
//
scaledBitmap = new BitmapData(largeBitmap.width*scale,largeBitmap.height*scale,largeBitmap.transparent,fillColor)
scaledBitmap.draw(largeBitmap,scaledMatrix)
// 不要になった大きいビットマップのメモリを開放
largeBitmap.dispose()