在像素層級變更點陣圖影像的外觀時,必須先取得包含在您要操作的區域中之像素顏色值。您可以使用
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 物件複製到另一個 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;