使用 ActionScript BitmapData 类在扩展的 ActionScript 端和本机端传递位图。在本机函数中,输入参数、输出参数或返回值可以与 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
字段指向实际的位图值,您可以在本机实现中修改这些值。向 AIR 3.1 中的 API 添加了
FREBitmapData2
结构和
FREAquireBitmapData2
函数。
FREBitmapData2
包含一个额外字段
isInvertedY
,该字段指示存储图像数据行的顺序。
若要指示本机实现已修改位图的全部或部分,请使位图矩形无效。使用 C API 函数
FREInvalidateBitmapDataRect()
:
FREResult FREInvalidateBitmapDataRect(
FREObject object,
uint32_t x,
uint32_t y,
uint32_t width,
uint32_t height
);
x
和
y
字段是要失效的矩形的坐标,相对于 0,0 坐标,0,0 是位图的左上角。
width
和
height
字段是要失效的矩形的维度(以像素为单位)。
操作完位图后,请使用 C API 函数
FREReleaseBitmapData()
:
FREResult FREReleaseBitmapData(FREObject object);
注:
不要在调用
FREAcquireBitmapData()
和
FREReleaseBitmapData()
之间调用除
FREInvalidateBitmapDataRect()
之外的任何 C API 函数。存在这种限制的原因是其他调用执行的代码会使指向位图内容的指针无效。