アクセシビリティ

Flash記事

 

Flash 8 のイメージ API の概要


目次

ActionScript によるビットマップの使用

新しい BitmapData ActionScript クラスは、メモリ上のビットマップオブジェクトを表現するために使用します。このクラスのインスタンスを新規作成すると、メモリ上に空のイメージが作成され、それを土台にして BitmapData クラスの各種メソッドを使用した操作ができます。ただし、このクラスを使用するには、扱うビットマップについて熟知しておく必要があります。

ビットマップはデジタルイメージ形式の一種で、カラー値のグリッドによってイメージを表現します。グリッド内の個々のセルがそれぞれ 1 つのピクセルを表し、指定されたカラーでレンダラーが各ピクセルを描画することにより、イメージが形成されます。Flash Player 内では、ビットマップデータの格納形式に 32 ビットの色深度を使用します。つまり、どのピクセルのカラーもそれぞれ 32 ビット長のバイナリ数値として格納されていることになります。32 ビットイメージ (いわゆる "トゥルーカラー" イメージ) を構成する個々のピクセルは約 1670 万種類のカラーを表現できます ("トゥルーカラー" という呼称は、人間の視覚が約 1670 万種類のカラーを識別できることに由来します)。カラーには 4 つのカラーチャンネルが含まれています。この 4 つとは、よく知られた赤、緑、青の 3 原色のチャンネルに加え、カラーの透明度を表現するために使用されるアルファチャンネルです。

16 進数のカラー値

BitmapData クラスと共に使用するカラー値は、ActionScript では 32 ビットの 16 進数によって表現されます。32 ビットの 16 進数値は 8 桁の 16 進数字列であり、そのうち 2 桁ずつが各カラーチャンネル (赤、緑、青、アルファ) の強さを表します。1 つのカラーチャンネルの強さは、10 進数の 0 ~ 255 に相当する範囲の値をとります。16 進表記では、そのチャンネルの強さが最大であることを FF (255) で表し、最小であることを 00 (0) で表します。このように各チャンネルの値は、必要に応じて 0 を補うことにより 2 桁で表記します。たとえば、1 という値は 01 と表記します。これにより、1 つの 16 進数値は常に 8 桁で表されることになります。また、16 進数値には接頭辞の 0x を必ず付けます。たとえば、白のカラーはすべてのチャンネルの強さが最大なので、16 進表記で表すと 0xFFFFFFFF となり、黒には赤、緑、青のいずれのチャンネルのカラーも含まれないので、0xFF000000 となります。先頭の 2 桁はアルファチャンネルで、この 2 つの場合はいずれも最大の強さ (FF) にしましたが、これは、最大の強さ (FF) が透明度なしを意味し、強さゼロ (00) が完全な透明を意味します。したがって、カラー値が 0x00FFFFFF のピクセルは透明です。

ARGB から 16 進値への変換

人間が特定のカラーを覚えておく場合、16 進数値よりも、アルファ、赤、緑、青 (ARGB) の各 10 進数値のほうが都合がよいことがあります。そうした場合のために、ARGB から 16 進数値への変換方法を知っておくと役に立ちます。次に示す ActionScript 関数は、単にそれだけの処理を実行するものです。

function argbtohex(a:Number, r:Number, g:Number, b:Number)
{
return (a<<24 | r<<16 | g<<8 | b)
}

これを使用するには次のようにします。

hex=argbtohex(255,0,255,0) // 赤を表す 32 ビット 16 進値を 10 進数として出力

16 進値から ARGB への変換

16 進カラー値を、0 ~ 255 の値を持つ 4 つの 10 進数 (ARGB の各チャンネル) に戻すには、次のような ActionScript 関数を使用します。

function hextoargb(val:Number)
{
var col={}
col.alpha = (val >> 24) & 0xFF
col.red = (val >> 16) & 0xFF
col.green = (val >> 8) & 0xFF
col.blue = val & 0xFF
return col
}

これを使用するには次のようにします。

argb=hextoargb(0xFFFFCC00);
alpha=argb.alpha;
red=argb.red;
green=argb.green;
blue=argb.blue;

ActionScript でのビットマップの作成

ActionScript によって実行時にビットマップを作成するには、BitmapData クラスのインスタンスを次のように作成します。

myBitmap=new flash.display.BitmapData(width,height,transparent,fillColor)

BitmapData クラスは flash.display パッケージに属しています。何度も新規インスタンスを作成する場合は、最初に次のようにしてパッケージを読み込んでおくと、作成のたびにクラスの完全修飾パスを記述する必要がなくなります。

import flash.display.BitmapData

この場合、クラスのインスタンスを作成するときは次のようなコードを記述するだけで済みます。

myBitmap=new BitmapData(width,height,transparent,fillColor);

BitmapData クラスのコンストラクタには、引数として widthheighttransparentfillColor の 4 つを指定できます。width および height は、ビットマップのサイズを指定する引数です。ビットマップをグリッドと見なし、1 行に含まれるピクセルの個数を width に、行数を height に指定します。transparent 引数はブール値 (true / false) で、そのビットマップに透明度を含める意図があるかどうかを指定します。fillColor 引数には、そのビットマップ内のピクセルに対するデフォルトの 32 ビットカラーを指定します。ただし、transparent パラメータを false にすると、指定したカラーの最初の 8 ビットは無視されます。その場合、32 ビットの 16 進数値を渡す必要はなく、24 ビットで、たとえば白のピクセルならば 0xFFFFFF を渡せば済みます。transparent 引数と fillColor 引数はオプションです。省略すると、ビットマップは透明度の情報なしでメモリに格納され、各ピクセルのデフォルトは白 (0xFFFFFFFF) となります。

たとえば、幅 100 ピクセル、高さ 100 ピクセルで完全に不透明 (透明度ゼロ) な黒のイメージは、次のようなコードで作成できます。

import flash.display.BitmapData
myBitmap = new BitmapData(100,100,false,0xFF000000)

メモ : Flash Player では、ビットマップの最大サイズは幅、高さいずれも 2880 ピクセルに制限されています。この制約よりも大きい BitmapData インスタンスを作成しようとすると、ビットマップは作成されません。これは、クライアントの RAM を使い切るような Flash ムービーを作成できないようにするために設定されています。2880 × 2880 ピクセルのビットマップには、約 32 MB 程度の RAM が必要です。

BitmapData クラスのインスタンスを作成した後は、さまざまなメソッドを使用してビットマップを操作できます。たとえば、フィルタ効果の適用、特定領域のカラーの塗りつぶし、カラーパレットの修正、特定領域の透明化などが可能であり、可能性は限りなく広がります。ただし、この記事では、使用方法の基本を確実に身に付けるための基礎的な事項を説明するにとどめます。

跡を濁さず

BitmapData オブジェクトのインスタンスは、1 つしかない場合でも再生環境のメモリを急速に消費する可能性があります。ビットマップを構成する 1 つのピクセルを格納するために 4 バイト (ARGB 各カラーチャンネルに 1 バイト) のメモリが必要なので、サイズが 500 × 500 ピクセルのビットマップを 1 つ作成するだけで 1 MB 近い RAM を消費することになります。したがって、不要になった BitmapData オブジェクトはすぐに開放して、ビットマップ用に割り当てられたメモリを他に使用できるようにするのが正しい方法です。BitmapData クラスには、この目的のために用意された dispose() というメソッドがあります。これは次のようにして使用します。

myBitmap.dispose()

Flash ムービーがリソースを浪費しないよう、常に整理を心がけてください。使用しなくなったビットマップのメモリはすぐに開放しましょう。