Piksellerle çalışma

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.