Bir bitmap görüntünün görünümünü piksel düzeyinde değiştirirken, öncelikle değişiklik yapmak istediğiniz alandaki piksellerin renk değerlerini bilmeniz gerekir. Bu piksel değerleri
getPixel()
yöntemi ile okunur.
getPixel()
yöntemi parametre olarak iletilen x, y (piksel) koordinatları kümesinden bir RGB değeri alır. Değişiklik yapmak istediğiniz piksellerden herhangi biri saydamlık (alfa kanalı) bilgisi içeriyorsa,
getPixel32()
yöntemini kullanmanız gerekir. Bu yöntem de bir RGB değeri alır ancak
getPixel()
yönteminden farklı olarak
getPixel32()
sonucunda dönen değer seçilen pikselin alfa kanalını (saydamlığını) temsil eden ek veri içerir.
Ayrıca, bir bitmap içerisinde bulunan piksellerden herhangi birinin rengini veya saydamlık değerini değiştirmek isterseniz,
setPixel()
veya
setPixel32()
yöntemini kullanabilirsiniz. Bir pikselin rengini ayarlamak için, bu yöntemlerden birine x, y koordinatlarını ve renk değerini iletin.
Aşağıdaki örnek yeşil bir BitmapData arka planı üzerine bir artı çizmek için
setPixel()
yöntemini kullanır. Ardından 50, 50 koordinatlarında bulunan pikselden renk değerini almak için
getPixel()
yöntemini kullanır ve dönen değeri izler.
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));
Tek bir piksel yerine bir piksel grubunun değerini okumak isterseniz,
getPixels()
yöntemini kullanın. Bu yöntem bir parametre olarak iletilen piksel verilerinin dikdörtgen bölgesinden bir bayt dizisi oluşturur. Bayt dizisinin (başka bir deyişle piksel değerlerinin) öğelerinden her biri birer işaretsiz tam sayı - 32-bit, çarpılmamış piksel değeridir.
Bir piksel grubunun değerini değiştirmek (veya belirlemek) için ise
setPixels()
yöntemini kullanın. Bu yöntem dikdörtgen şeklinde (
rect
) bir piksel verisi (
inputByteArray
) çıktısı oluşturmak için birleştirilen iki parametre (
rect
ve
inputByteArray
) bekler.
Veriler
inputByteArray
içerisinden okunduğu (ve içerisine yazıldığı) için
ByteArray.readUnsignedInt()
yöntemi dizi içindeki piksellerin her biri için çağrılır. Herhangi bir nedenden dolayı
inputByteArray
piksel değerine eşdeğer tam bir dikdörtgen içermezse, yöntem görüntü verisi işlemeyi o noktada durdurur.
Piksel verisini alırken ve ayarlarken bayt dizisinin 32-bit alfa, kırmızı, yeşil ve mavi (ARGB) piksel değerlerini beklediği unutulmamalıdır.
Aşağıdaki örnek, bir BitmapData nesnesindeki piksel grubunu başka bir BitmapData nesnesine kopyalamak için
getPixels()
ve
setPixels()
yöntemlerini kullanır:
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;