ActionScript BitmapData オブジェクトの操作

拡張の 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 関数を呼び出さないでください。これが禁止されるのは、他の呼び出しの副作用として、ビットマップコンテンツへのポインターを無効にするコードが実行されるからです。