在像素级别更改位图图像的外观时,您首先需要获取要处理的区域中包含的像素的颜色值。使用 getPixel() 方法可读取这些像素值。
getPixel() 方法从作为参数传递的一组 x, y(像素)坐标中检索 RGB 值。如果您要处理的像素包括透明度(Alpha 通道)信息,则需要使用 getPixel32() 方法。此方法也可以检索 RGB 值,但与 getPixel() 不同,getPixel32() 返回的值包含表示所选像素的 Alpha 通道(透明度)值的附加数据。
或者,如果只想更改位图中包含的某个像素的颜色或透明度,则可以使用 setPixel() 或 setPixel32() 方法。若要设置像素的颜色,只需将 x、y 坐标和颜色值传递给这两种方法之一即可。
以下示例使用 setPixel() 在绿色 BitmapData 背景上绘制交叉形状。然后,此示例使用 getPixel() 从坐标 50, 50 处的像素中检索颜色值并跟踪返回的值。
import flash.display.Bitmap;
import flash.display.BitmapData;
var myBitmapData:BitmapData = new BitmapData(100, 100, false, 0x009900);
for (var i:uint = 0; i < 100; i++)
{
var red:uint = 0xFF0000;
myBitmapData.setPixel(50, i, red);
myBitmapData.setPixel(i, 50, red);
}
var myBitmapImage:Bitmap = new Bitmap(myBitmapData);
addChild(myBitmapImage);
var pixelValue:uint = myBitmapData.getPixel(50, 50);
trace(pixelValue.toString(16));
如果要读取一组像素而不是单个像素的值,请使用 getPixels() 方法。此方法从作为参数传递的矩形像素数据区域中生成字节数组。字节数组的每个元素(即像素值)都是无符号的整数(32 位未经相乘的像素值)。
相反,若要更改(或设置)一组像素的值,请使用 setPixels() 方法。此方法需要联合使用两个参数(rect 和 inputByteArray)来输出像素数据 (inputByteArray) 的矩形区域 (rect)。
从 inputByteArray 中读取(或写入)数据时,会为数组中的每个像素调用 ByteArray.readUnsignedInt() 方法。如果由于某些原因,inputByteArray 未包含像素数据的整个矩形,则该方法会停止处理该点处的图像数据。
必须记住的是,对于获取和设置像素数据,字节数组需要有 32 位 Alpha、红、绿、蓝 (ARGB) 像素值。
以下示例使用 getPixels() 和 setPixels() 方法将一组像素从一个 BitmapData 对象复制到另一个对象:
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.utils.ByteArray;
import flash.geom.Rectangle;
var bitmapDataObject1:BitmapData = new BitmapData(100, 100, false, 0x006666FF);
var bitmapDataObject2:BitmapData = new BitmapData(100, 100, false, 0x00FF0000);
var rect:Rectangle = new Rectangle(0, 0, 100, 100);
var bytes:ByteArray = bitmapDataObject1.getPixels(rect);
bytes.position = 0;
bitmapDataObject2.setPixels(rect, bytes);
var bitmapImage1:Bitmap = new Bitmap(bitmapDataObject1);
addChild(bitmapImage1);
var bitmapImage2:Bitmap = new Bitmap(bitmapDataObject2);
addChild(bitmapImage2);
bitmapImage2.x = 110;