Podczas zmiany wyglądu obrazu bitmapowego na poziomie pikseli konieczne jest najpierw pobranie wartości koloru pikseli z obszaru, którym chce się manipulować. Metoda
getPixel()
służy do odczytu tych wartości pikseli.
Metoda
getPixel()
umożliwia pobieranie wartości RGB z zestawu współrzędnych x, y (piksel) przekazywanych w postaci parametru. Jeśli dowolny z pikseli, którym użytkownik chce manipulować, obejmuje informacje o przezroczystości (kanał alfa), konieczne jest zastosowanie metody
getPixel32()
. Metoda ta umożliwia również pobranie wartości RGB, lecz w przeciwieństwie do metody
getPixel()
, wartość zwracana przez metodę
getPixel32()
zawiera dane dodatkowe reprezentujące wartość kanału alfa (przezroczystości) wybranego piksela.
Alternatywnie, w przypadku potrzeby zmiany koloru lub przezroczystości piksela zawartego w bitmapie, można również użyć metody
setPixel()
lub
setPixel32()
. W celu ustawienia koloru piksela należy po prostu przekazać współrzędne x, y oraz wartości kolorów do jednej z tych metod.
W poniższym przykładzie opisano wykorzystanie metody
setPixel()
do wykreślania symbolu krzyża na zielonym tle BitmapData. Następnie używana jest metoda
getPixel()
umożliwiająca pobranie wartości koloru z piksela o współrzędnych 50, 50 i prześledzenia zwróconej w ten sposób wartości.
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));
W celu odczytania wartości grupy pikseli, nie zaś pojedynczego piksela, należy skorzystać z metody
getPixels()
. Metoda ta umożliwia generowanie tablicy bitowej danych z obszaru danych pikseli w kształcie prostokąta, i przekazaniu go jako parametru. Każdy z elementów tablicy bitowej (innymi słowy, wartości pikseli) to niepodpisane wartości całkowite — 32-bitowe, nieprzemnożone wartości pikseli.
I odwrotnie, w celu zmiany (lub ustawienia) wartości dla grupy pikseli, należy skorzystać z metody
setPixels()
. Metoda ta wymaga udostępnienia dwu parametrów: (
rect
i
inputByteArray
), których połączenie daje obszar w kształcie prostokąta (
rect
) danych pikseli (
inputByteArray
).
W miarę odczytu (i zapisu) danych z tablicy
inputByteArray
wywoływana jest metoda
ByteArray.readUnsignedInt()
dla każdego piksela w tablicy. Jeśli, z pewnych przyczyn, tablica
inputByteArray
nie zawiera pełnego prostokąta wartościowych danych pikseli, metoda przerywa w tym punkcie przetwarzanie danych.
Ważne jest, aby pamiętać, że zarówno w przypadku pobierania, jak i ustawiania danych pikseli, tablica bajtowa wymaga udostępnienia następujących wartości 32-bitowych pikseli: alfa, czerwony, zielony, niebieski (ang. ARGB).
W poniższych przykładach zilustrowane jest wykorzystanie metod
getPixels()
oraz
setPixels()
do skopiowania grupy pikseli z jednego obiektu BitmapData do drugiego:
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;