Trabajo con píxeles

Pinte píxeles utilizando el método setVector() .

Al pintar píxeles, se pueden llevar a cabo algunas optimizaciones sencillas simplemente utilizando los métodos apropiados de la clase BitmapData. Un modo rápido de pintar píxeles consiste en usar el método setVector() :

// 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 );

Al emplear métodos lentos como, por ejemplo, setPixel() o setPixel32() , utilice los métodos lock() y unlock() para agilizar el proceso de ejecución. En el siguiente código, los métodos lock( ) y unlock() se utilizan para mejorar el rendimiento:

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

El método lock() de la clase BitmapData bloquea una imagen y evita que los objetos que le hacen referencia se actualicen cuando cambia el objeto BitmapData. Por ejemplo, si un objeto Bitmap hace referencia a BitmapData, es posible bloquear el objeto BitmapData, cambiarlo y posteriormente bloquearlo. El objeto Bitmap no se cambia hasta que se desbloquee el objeto BitmapData. Para mejorar el rendimiento, utilice este método junto con el método unlock() antes y después de realizar numerosas llamadas al método setPixel() o setPixel32() . Al llamar a lock() y unlock() , se evita que la pantalla se actualice de forma innecesaria.

Nota: cuando se procesan píxeles en un mapa de bits fuera de la lista de visualización (doble almacenamiento en búfer), a veces esta técnica no mejora el rendimiento. Si un objeto de mapa de bits no hace referencia al búfer de mapa de bits, el uso de lock() y unlock() no supone una mejora de rendimiento. Flash Player detecta que el búfer no cuenta con referencias y el mapa de bits no se representa en pantalla.

Es probable que los métodos que se repiten en los píxeles como, por ejemplo, getPixel() , getPixel32() , setPixel() y setPixel32() , sean lentos, especialmente en dispositivos móviles. Si es posible, utilice métodos que recuperen todos los píxeles en una llamada. Para la lectura de píxeles, utilice el método getVector() , que resulta más rápido que getPixels() . Asimismo, recuerde el uso de las API basadas en los objetos Vector, ya que es probable que su ejecución sea más rápida.