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()

指示位图是否具有 alpha 通道。

public boolean isPremultiplied()

指示位图颜色是否已经乘以 alpha 值。

public int getLineStride32()

按位图扫描行获取 32 位的值的数量。

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() 方法访问和修改现有位图的像素值。也可以使用 FREObject getProperty() setProperty() 方法访问 BitmapData 对象的 ActionScript 定义的属性,并使用 FREObject callMethod() 函数调用该对象的 ActionScript 方法。

在调用 ActionScript 代码引用的 FREBitmapData 对象上的 getBits() 之前,使用 acquire() 方法锁定位图。这会阻止 AIR 运行时或应用程序在您的函数正在运行时(可能在另一个线程内运行)修改或丢弃位图对象。修改位图后,调用 invalidateRect() 通知运行时位图已更改并使用 release() 释放锁定。不能在获取锁定后使用 ActionScript 定义的属性和方法。

AIR 运行时将像素数据定义为 32 位值,其中包含三个颜色组成,加采用顺序 ARGB 的 alpha。数据内的每个组成为一个字节。有效的位图数据存储为颜色组成预乘以 alpha 组成。(但也可能接收一个技术上无效的 BitmapData,其中,颜色未进行预乘。例如,具有 Context3D 类的呈现位图可以产生此类无效位图。在这种情况下, isPremultiplied() 方法仍会报告 true 。)

方法详细信息

newBitmapData

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

创建一个 FREBitmapData 对象,该对象可以作为一个 BitmapData 实例返回到扩展的 ActionScript 端。

参数:

width
宽度(以像素为单位)。在 AIR 3+ 中,对位图的宽度和高度没有任何限制(除了 ActionScript 带符号整数的最大值)。但是,仍会有实际内存限制。位图数据会占用 32 位内存(每像素)。

height
高度(以像素为单位)。

transparent
指定此位图是否使用 alpha 通道。此参数对应于创建的 FREBitmapData 的 hasTransparency() 方法和 ActionScript BitmapData 对象的 transparent 属性。

fillColor
32 位,带有要填充新位图的 ARGB 颜色值。如果 transparent 参数为 false ,则会忽略颜色的 alpha 组成。

返回:

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 ,则会使用像素颜色值的 alpha 组成。如果值为 false ,则不使用颜色的 alpha 组成。调用此方法前必须先调用此对象的 acquire() 函数。

返回:

boolean
如果位图使用 alpha 通道,则值为 true。

isPremultiplied

public boolean isPremultiplied()

指示是否将位图像素作为预乘的颜色值进行存储。True 值表示像素颜色的红、绿和蓝组成预乘 alpha 组成。ActionScript BitmapData 对象目前始终进行预乘(但以后会对运行时进行更改,从而可以创建不进行预乘的位图)。有关预乘颜色值的详细信息,请参阅 用于 Adobe Flash Platform 的 ActionScript 3.0 参考 中的 BitmapData.getPixel()。调用此方法前必须先调用此对象的 acquire() 函数。

返回:

boolean
如果像素颜色组成已经乘以 alpha 组成,则值为 true

getLineStride32

public int getLineStride32()

指定位图的每个水平行的数据量。将此值与 getBits() 返回的字节数组结合使用以解析图像。例如,字节数组中紧跟位于位置 n 处的像素的位置为 n + getLineStride32() 。调用此方法前必须先调用此对象的 acquire() 函数。

返回:

int
图像中每个水平行的数据量。

示例:

以下示例将包含像素颜色的字节数组的位置移至位图中第三行的开始处:

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() 。若要对像素数据进行更改,请调用 invalidateRect() 以通知 AIR 运行时位图已更改。否则,不会更新显示的图形。

返回:

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 中添加了以下内容。