FREBitmapData

パッケージ:
com.adobe.fre

継承
FREObject

ランタイムバージョン
AIR 3

FREBitmapData クラスは、ActionScript BitmapData オブジェクトを表します。

メソッド

メソッド

説明

public static FREBitmapData newBitmapData (int width, int height, boolean transparent, Byte[] fillColor)

ActionScript BitmapData オブジェクトを作成します。

public int getWidth()

ビットマップの幅を取得します。

public int getHeight()

ビットマップの高さを取得します。

public boolean hasAlpha()

ビットマップにアルファチャンネルが含まれるかどうかを示します。

public boolean isPremultiplied()

ビットマップのカラーにあらかじめアルファ値が乗算されているかどうかを示します。

public int getLineStride32()

ビットマップのスキャンライン 1 本に含まれる 32 bit 値の個数を取得します。

ByteBuffer getBits()

ビットマップのピクセルデータを取得します。

public void acquire()

ActionScript オブジェクトに対するロックを取得します。

void invalidateRect( int x, int y, int width, int height )

ビットマップ内の長方形領域を、更新が必要な部分としてマークします。

public void release()

ActionScript オブジェクトに対するロックを解放します。

AIR 3.1 の追加項目:

public boolean isInvertedY

画像データの行が格納される順番を示します。

FREBitmapData オブジェクトのプロパティは、ほとんどが読み取り専用です。例えば、ビットマップの幅や高さを変更することはできません(これらのプロパティを変更する必要がある場合は、変更後のサイズで FREBitmapData オブジェクトを新規作成します)。ただし、ビットマップ内に既にあるピクセルの値に対しては、 getBits() メソッドを使用してアクセスまたは変更ができます。また、BitmapData オブジェクト内の ActionScript で定義されたプロパティには FREObject getProperty() メソッドと setProperty() メソッドでアクセスでき、オブジェクトの ActionScript メソッドは FREObject callMethod() 関数を使用して呼び出すことができます。

ActionScript コードによって参照されている FREBitmapData オブジェクトに対して getBits() を呼び出す場合は、 acquire() メソッドでビットマップをロックしておく必要があります。ロックすると、その関数を実行する間、AIR ランタイムやアプリケーション(別のスレッドで動作している可能性もあります)によって、そのビットマップオブジェクトが変更または破棄されることはなくなります。ビットマップに変更を加えた後は、ビットマップが変化したことをランタイムに伝えるために invalidateRect() を呼び出し、 release() を呼び出してロックを解放します。ロックを保持している間は、ActionScript で定義されたプロパティやメソッドを使用することはできません。

AIR ランタイムの定義により、ピクセルデータは、3 原色とアルファの成分を ARGB の順に並べた 32 bit 値として表現されています。データ内の各成分は 1 バイトです。有効なビットマップデータの場合、格納された各カラー成分の値にはアルファ成分の値があらかじめ乗算されています(ただし、場合によっては、アルファが乗算されていない技術的に無効な BitmapData を受け取る可能性があります。例えば、Context3D クラスを使用してビットマップのレンダリングを実行すると、そのような無効なビットマップが生成されることがあります。こうした場合にも、 isPremultiplied() メソッドの戻り値は true になります)。

メソッドの詳細

newBitmapData

public static FREBitmapData newBitmapData (int width, int height, boolean transparent, Byte[] fillColor)

FREBitmapData オブジェクトを作成します。このオブジェクトは、BitmapData インスタンスとして拡張の ActionScript 側に返すことができます。

パラメーター:

width
ピクセル単位の幅。AIR 3+ では、ビットマップの幅と高さに恣意的な制限はありません(ActionScript の符号付き整数の上限値のみ)。ただし、実際に使用できるメモリの制約は存在します。ビットマップデータでは、1 ピクセルにつき 32 bit のメモリが使用されます。

height
ピクセル単位の高さ。

transparent
そのビットマップでアルファチャンネルが使用されているかどうかを示します。このパラメーターは、作成した FREBitmapData の hasTransparency() メソッドと、ActionScript BitmapData オブジェクトの transparent プロパティに対応します。

fillColor
新しいビットマップの全体に設定する 32 bit の ARGB カラー値。 transparent パラメーターが false の場合、このカラーのアルファ成分は無視されます。

戻り値:

FREBitmapData
ActionScript BitmapData オブジェクトに関連付けられている FREBitmapData オブジェクト。

例:

Byte[] fillColor = {0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf}; 
FREBitmapData bitmap = FREBitmapData.newBitmapData( 320, 200, true, fillColor );

getWidth

public int getWidth()

ビットマップの幅をピクセル単位で返します。この値は、ActionScript BitmapData クラスオブジェクトの width プロパティに対応します。このメソッドを呼び出す場合は、前もって、そのオブジェクトの acquire() 関数を呼び出しておく必要があります。

戻り値:

int
ビットマップの横軸方向のサイズをピクセル単位で表した数値。

getHeight

public int getHeight()

ビットマップのピクセル単位の高さ。この値は、ActionScript BitmapData クラスオブジェクトの height プロパティに対応します。このメソッドを呼び出す場合は、前もって、そのオブジェクトの acquire() 関数を呼び出しておく必要があります。

戻り値:

int
ビットマップの縦軸方向のサイズをピクセル単位で表した数値。

hasAlpha

public boolean hasAlpha()

そのビットマップでピクセル単位の透明効果がサポートされているかどうかを示します。この値は、ActionScript BitmapData クラスオブジェクトの transparent プロパティに対応します。この値が true の場合、ピクセルカラー値のアルファ成分が使用されます。 false の場合、カラーのアルファ成分は使用されません。このメソッドを呼び出す場合は、前もって、そのオブジェクトの acquire() 関数を呼び出しておく必要があります。

戻り値:

boolean
true の場合、そのビットマップではアルファチャンネルが使用されています。

isPremultiplied

public boolean isPremultiplied()

ビットマップのピクセルに乗算済みカラー値が格納されているかどうかを示します。true の場合は、ピクセルカラーの赤、緑、青のそれぞれの成分にアルファ成分の値があらかじめ乗算されています。現時点では、ActionScript BitmapData オブジェクトのデータは常に乗算済みです(将来的には、乗算済みでないビットマップを作成できるような変更がランタイムに加えられる可能性があります)。乗算済みカラー値について詳しくは、『 Adobe Flash Platform 用 ActionScript 3.0 リファレンスガイド 』で BitmapData.getPixel() の項を参照してください。このメソッドを呼び出す場合は、前もって、そのオブジェクトの acquire() 関数を呼び出しておく必要があります。

戻り値:

boolean
true の場合、ピクセルの各カラー成分にはアルファ成分の値があらかじめ乗算されています。

getLineStride32

public int getLineStride32()

ビットマップの水平ライン 1 本あたりのデータ量を示します。この値は、 getBits() から返されるバイト配列を使用して画像を解析する場合に使用します。例えば、バイト配列内の位置 n にあるピクセルのすぐ下にあるピクセルを表すデータの位置は、 n + getLineStride32() です。このメソッドを呼び出す場合は、前もって、そのオブジェクトの acquire() 関数を呼び出しておく必要があります。

戻り値:

int
画像の水平ライン 1 本あたりのデータ量。

例:

次の例では、ピクセルのカラー値を含んだバイト配列の位置を、ビットマップ内の 3 本目のラインの先頭に移動します。

Byte[] fillColor = {0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf}; 
FREBitmapData bitmap = FREBitmapData.newBitmapData( 320, 200, true, fillColor ); 
int lineStride = bitmap.getLineStride32(); 
bitmap.acquire(); 
ByteBuffer pixels = bitmap.getBits(); 
pixels.position( lineStride * 3 ); 
//do something with the image data 
bitmap.release();

getBits

ByteBuffer getBits()

ピクセルカラー値の配列を返します。このメソッドを使用する前には acquire() を呼び出し、データの変更が完了した後には release() を呼び出す必要があります。ピクセルデータに変更を加えた場合は、ビットマップが変化したことを AIR ランタイムに伝えるために invalidateRect() を呼び出します。そうしないとグラフィックの表示は更新されません。

戻り値:

java.nio.ByteBuffer
画像データ。

例:

FREBitmapData bitmap = FREBitmapData.newBitmapData( 320, 200, true, fillColor ); 
bitmap.acquire(); 
ByteBuffer pixels = bitmap.getBits(); 
//do something with the image data 
bitmap.release();

acquire

public void acquire()

その画像に対するロックを取得します。ロックを取得すると、アクセス中にランタイムやアプリケーションコードがその画像に変更を加えたり、破棄したりすることはできなくなります。ロックを取得する必要があるのは、拡張の ActionScript 側から関数に渡されたビットマップを操作する場合のみです。

ロックを保持している間は、 getBits() 関数から返されたデータに対するアクセスのみ可能です。FREBitmapData の他のプロパティに対してアクセスや変更を試みると、例外が発生します。

invalidateRect

void invalidateRect( int x, int y, int width, int height )

画像内の何らかの領域に変更を加えたことをランタイムに伝えます。このメソッドを呼び出さないと、ビットマップデータオブジェクトの変更内容が画面に反映されません。このメソッドを呼び出す場合は、前もって、そのオブジェクトの acquire() 関数を呼び出しておく必要があります。

パラメーター:

x
現在の表示を無効にする長方形領域の左上隅を表す座標。

y
現在の表示を無効にする長方形領域の左上隅を表す座標。

width
現在の表示を無効にする長方形領域の幅。

height
現在の表示を無効にする長方形領域の高さ。

release

public void release()

acquire() で取得したロックを解放します。 getBits() から返されるピクセルデータ以外のビットマッププロパティにアクセスするには、ロックが解放されている必要があります。

isInvertedY

public boolean isInvertedY()

画像データの行が格納される順番を示します。 true の場合、画像データの最後の行は getBits() メソッドから返されるバッファの最初に表示されます。Android の画像は一般的にはデータの最初の行から順番に格納されるので、Android プラットフォームではこのプロパティは通常 false になります。

AIR 3.1 の追加項目です。