När du ändrar utseendet på en bitmappsbild på pixelnivå, måste du först hämta färgvärdena för pixlarna inom det område som du vill ändra. Använd metoden getPixel() för att läsa dessa pixelvärden.
Med metoden getPixel() hämtas ett RGB-värde från en serie x-, y-koordinater (pixel) som skickats som parametrar. Om någon av de pixlar du vill ändra innehåller genomskinlighetsinformation (alfakanal) måste du använda metoden getPixel32(). Metoden hämtar också ett RGB-värde, men det värde som returneras med getPixel() innehåller, i motsats till det värde som hämtas med getPixel32() ytterligare data som representerar alfakanalsvärdet (genomskinlighet) för de valda pixlarna.
Om du bara vill ändra färg eller genomskinlighet på en pixel som finns i en bitmapp, kan du använda metoden setPixel() eller setPixel32(). Om du vill ange en pixels färg skickar du x-, y-koordinaterna och färgvärdet till någon av dessa metoder.
I följande exempel används setPixel() för att rita ett kors på en grön BitmapData-bakgrund. Därefter används getPixel() för att hämta färgvärdet från pixeln på koordinaten 50, 50, och det returnerade värdet kalkeras.
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));
Om du vill läsa värdet för en grupp pixlar, i motsats till en enstaka pixel, använder du metoden getPixels(). Med den här metoden genereras en byte-array från ett rektangulärt område med pixeldata som skickats som en parameter. Varje element i byte-arrayen (alltså pixelvärdena) är heltal utan tecken, 32-bitars icke-multiplicerade pixelvärden.
Om du omvänt vill ändra (eller ange) värdet för en grupp pixlar använder du metoden setPixels(). Den här metoden förväntar sig två parametrar (rect och inputByteArray) som kombineras för att mata ut ett rektangulärt område (rect) av pixeldata (inputByteArray).
När data läses (och skrivs) från inputByteArray anropas metoden ByteArray.readUnsignedInt() för varje pixel i arrayen. Om inputByteArray av någon anledning inte innehåller ett fullständigt rektangelvärde med pixeldata, stoppas hanteringen av bilddata av metoden.
Kom ihåg att byte-arrayen förväntar sig 32-bitars alfa, röd, grön, blå (ARGB) både vid hämtning och inställning av pixeldata.
I följande exempel används metoderna getPixels() och setPixels() för att kopiera pixlar mellan olika BitmapData-objekt:
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;