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;