setVector()
yöntemini kullanarak pikselleri boyayın.
Pikselleri boyarken, bazı basit en iyileştirmeler BitmapData sınıfının uygun yöntemleri kullanılarak kolaylıkla gerçekleştirilebilir. Pikselleri boyamanın hızlı bir yolu,
setVector()
yöntemini kullanmaktır:
// Image dimensions
var wdth:int = 200;
var hght:int = 200;
var total:int = wdth*hght;
// Pixel colors Vector
var pixels:Vector.<uint> = new Vector.<uint>(total, true);
for ( var i:int = 0; i< total; i++ )
{
// Store the color of each pixel
pixels[i] = Math.random()*0xFFFFFF;
}
// Create a non-transparent BitmapData object
var myImage:BitmapData = new BitmapData ( wdth, hght, false );
var imageContainer:Bitmap = new Bitmap ( myImage );
// Paint the pixels
myImage.setVector ( myImage.rect, pixels );
addChild ( imageContainer );
setPixel()
veya
setPixel32()
gibi yavaş yöntemler kullanırken, öğelerin daha hızlı çalışması için
lock()
ve
unlock()
yöntemlerini kullanın. Aşağıdaki kodda, performansın iyileştirilmesi için
lock(
) ve
unlock()
yöntemleri kullanılıyor:
var buffer:BitmapData = new BitmapData(200,200,true,0xFFFFFFFF);
var bitmapContainer:Bitmap = new Bitmap(buffer);
var positionX:int;
var positionY:int;
// Lock update
buffer.lock();
var starting:Number=getTimer();
for (var i:int = 0; i<2000000; i++)
{
// Random positions
positionX = Math.random()*200;
positionY = Math.random()*200;
// 40% transparent pixels
buffer.setPixel32( positionX, positionY, 0x66990000 );
}
// Unlock update
buffer.unlock();
addChild( bitmapContainer );
trace( getTimer () - starting );
// output : 670
BitmapData sınıfının
lock()
yöntemi BitmapData nesnesi değiştiğinde bir görüntüyü kitler ve ona başvuran nesnelerin güncellenmesini önler. Örneğin, bir Bitmap nesnesi bir BitmapData nesnesine başvurursa, BitmapData nesnesini kilitleyebilirsiniz, değiştirebilirsiniz ve sonrasında kilidini açabilirsiniz. BitmapData nesnesinin kilidi açılana kadar Bitmap nesnesi değişmez. Performansı artırmak için,
setPixel()
veya
setPixel32()
yöntemine birçok çağrı yapmadan önce veya yaptıktan sonra
unlock()
yöntemiyle birlikte bu yöntemi kullanın.
lock()
ve
unlock()
yöntemlerinin çağrılması ekranın gereksiz yere güncellenmesini önler.
Not:
Görüntüleme listesinde olamayan bir bitmap’in piksellerini işlerken (çift arabellek) bu teknik bazen performansı arttırmaz. Bir bitmap nesnesi bitmap arabelleğine başvurmuyorsa
lock()
ve
unlock()
yönteminin kullanılması performansı arttırmaz. Flash Player arabelleğe başvurulmadığını ve bitmap’in ekran üzerinde oluşturulmadığını algılar.
getPixel()
,
getPixel32()
,
setPixel()
ve
setPixel32()
gibi pikselleri yineleyen yöntemler özellikle mobil aygıtlarda yavaş çalışabilir. Mümkünse tek çağrıda bütün pikselleri geri alan yöntemleri kullanın. Pikselleri okumak için,
getPixels()
yönteminden daha hızlı olan
getVector()
yöntemini kullanın. Ayrıca mümkünse, daha hızlı çalıştıkları için Vector nesnelerine dayanan API’leri kullanmayı unutmayın.