Beim Ändern der Darstellung eines Bitmapbilds auf Pixelebene müssen Sie zunächst die Farbwerte der Pixel in dem zu bearbeitenden Bereich abrufen. Die entsprechenden Pixelwerte können mithilfe der
getPixel()
-Methode gelesen werden.
Mit der
getPixel()
-Methode wird ein RGB-Wert für ein x- und y-Koordinatenpaar (Pixel) abgerufen, das als Parameter übergeben wird. Wenn die zu bearbeitenden Pixel Transparenzinformationen (Alphakanal) enthalten, muss die
getPixel32()
-Methode verwendet werden. Mit dieser Methode wird ebenfalls ein RGB-Wert abgerufen. Im Gegensatz zu
getPixel()
enthält der von
getPixel32()
zurückgegebene Wert jedoch zusätzliche Daten, mit denen der Wert des Alphakanals (Transparenz) des ausgewählten Pixels angegeben wird.
Wenn Sie dagegen lediglich die Farbe oder die Transparenz eines Pixels in einer Bitmap ändern möchten, können Sie die
setPixel()
-Methode oder die
setPixel32()
-Methode verwenden. Übergeben Sie zum Festlegen der Farbe eines Pixels die x- und die y-Koordinate sowie den Farbwert an eine dieser Methoden.
Im folgenden Beispiel wird mithilfe von
setPixel()
ein Kreuz auf einem grünen BitmapData-Hintergrund gezeichnet. Anschließend werden mit
getPixel()
der Farbwert des Pixels an der Koordinate (50, 50) abgerufen und der zurückgegebene Wert ausgegeben.
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));
Verwenden Sie die
getPixels()
-Methode, wenn Sie anstelle eines einzelnen Pixelwerts den Wert einer Pixelgruppe abrufen möchten. Mit dieser Methode wird ein Byte-Array eines rechteckigen Bereichs von Pixeldaten erstellt, das als Parameter übergeben wird. Alle Elemente des Byte-Arrays (d. h. die einzelnen Pixelwerte) sind vorzeichenlose 32-Bit-Ganzzahlen und nicht multiplizierte Farbwerte.
Wenn Sie im Gegensatz dazu den Wert einer Pixelgruppe ändern (oder festlegen) möchten, verwenden Sie die
setPixels()
-Methode. Bei dieser Methode müssen zwei Parameter (
rect
und
inputByteArray
) angegeben werden, die zur Ausgabe eines rechteckigen Bereichs (
rect
) von Pixeldaten (
inputByteArray
) kombiniert werden.
Beim Lesen (und Schreiben) von Daten in
inputByteArray
wird die
ByteArray.readUnsignedInt()
-Methode für alle Pixel im Array aufgerufen. Wenn das
inputByteArray
aus bestimmten Gründen kein vollständiges Rechteck mit Pixeldaten enthält, wird die Verarbeitung der Bilddaten an der entsprechenden Position abgebrochen.
Bedenken Sie dabei immer, dass beim Abrufen und Festlegen von Pixeldaten für das Byte-Array 32-Bit-Pixelwerte für Alpha, Rot, Grün und Blau (ARGB) angegeben werden müssen.
Im folgenden Beispiel wird mithilfe der Methoden
getPixels()
und
setPixels()
eine Gruppe von Pixeldaten von einem BitmapData-Objekt in ein anderes BitmapData-Objekt kopiert:
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;