拡張の ActionScript 側とネイティブ側の間でビットマップを渡すには、ActionScript BitmapData クラスを使用します。ネイティブ関数の入力パラメーター、出力パラメーターまたは戻り値は、ActionScript BitmapData クラスオブジェクトに対応させることができます。
他の ActionScript クラスオブジェクトと同様に、FREObject 変数は ActionScript BitmapData オブジェクトをネイティブ側で表現したものです。C API には、FREObject 変数を使用して BitmapData クラスオブジェクトを操作するための関数が用意されています。
FRESetObjectProperty()
、
FREGetObjectProperty()
および
FRECallObjectMethod()
を使用すると、ActionScript ByteArray オブジェクトに対して、プロパティの取得および設定とメソッドの呼び出しができます。
ただし、BitmapData オブジェクト内のビットデータをネイティブコードから操作するには、C API の
FREAcquireBitmapData()
関数または
FREAcquireBitmapData2()
関数を使用します。これらは、ActionScript 側で作成された BitmapData オブジェクトのビットデータにアクセスするメソッドです。
FREResult FREAcquireBitmapData(
FREObject object,
FREBitmapData* descriptorToSet
);
// The type FREBitmapData is defined as:
typedef struct {
uint32_t width;
uint32_t height;
bool hasAlpha;
bool isPremultiplied;
uint32_t lineStride32;
uint32_t* bits32;
} FREBitmapData;
//Or:
FREResult FREAcquireBitmapData2(
FREObject object,
FREBitmapData2* descriptorToSet
);
// The type FREBitmapData is defined as:
typedef struct {
uint32_t width;
uint32_t height;
bool hasAlpha;
bool isInvertedY;
bool isPremultiplied;
uint32_t lineStride32;
uint32_t* bits32;
} FREBitmapData2;
FREBitmapData
構造体または
FREBitmapData2
構造体のすべてのフィールドは読み取り専用です。ただし、
bits32
フィールドは実際のビットマップ値をポイントします。これはネイティブ実装内で変更できます。
FREBitmapData2
構造体および
FREAquireBitmapData2
関数は、AIR 3.1 の API に追加されました。
FREBitmapData2
には
isInvertedY
という 1 つのフィールドが追加されています。このフィールドは、画像データの行が保存される順序を示すものです。
ネイティブ実装でビットマップのすべてまたは一部を変更したことを示すには、ビットマップの長方形領域を無効にします。C API 関数の
FREInvalidateBitmapDataRect()
を使用します。
FREResult FREInvalidateBitmapDataRect(
FREObject object,
uint32_t x,
uint32_t y,
uint32_t width,
uint32_t height
);
x
フィールドおよび
y
フィールドは、ビットマップの左上隅である 0,0 座標との相対位置として、無効にする長方形領域の座標を示します。
width
フィールドおよび
height
フィールドは、無効にする長方形領域の大きさをピクセル単位で示します。
ビットマップを操作した後で、C API 関数
FREReleaseBitmapData()
を使用します。
FREResult FREReleaseBitmapData(FREObject object);
注意:
FREAcquireBitmapData()
の呼び出しと
FREReleaseBitmapData()
の呼び出しの間で、
FREInvalidateBitmapDataRect()
を除く C API 関数を呼び出さないでください。これが禁止されるのは、他の呼び出しの副作用として、ビットマップコンテンツへのポインターを無効にするコードが実行されるからです。