Utilisation des pixels

Pour peindre des pixels, utilisez la méthode setVector() .

Lors de la peinture de pixels, il est possible de réaliser des optimisations simples à l’aide des méthodes appropriées de la classe BitmapData. Pour peindre rapidement des pixels, vous pouvez utiliser la méthode 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 );

Lorsque vous utilisez des méthodes lentes, telles que setPixel() ou setPixel32() , faites appel aux méthodes lock() et unlock() pour accélérer le processus. Dans le code suivant, les méthodes lock( ) et unlock() ont pour objet d’accélérer les performances :

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

La méthode lock() de la classe BitmapData verrouille une image et empêche la mise à jour des objets qui y font référence lors de la modification de l’objet BitmapData. Si un objet Bitmap fait référence à un objet BitmapData, par exemple, vous pouvez verrouiller ce dernier, le modifier et le déverrouiller. L’objet Bitmap n’est pas modifié tant que l’objet BitmapData n’est pas déverrouillé. Pour améliorer les performances, utilisez cette méthode en conjonction avec la méthode unlock() avant et après des appels répétés de la méthode setPixel() ou setPixel32() . L’appel de lock() et unlock() empêche les mises à jour superflues de l’écran.

Remarque : lors du traitement des pixels d’un bitmap ne figurant pas sur la liste d’affichage (double mise en mémoire tampon), cette technique n’améliore pas toujours les performances. Si un objet bitmap ne fait pas référence à la mémoire tampon de bitmap, l’utilisation de lock() et unlock() n’apporte aucune amélioration des performances. Flash Player détecte que la mémoire tampon n’est pas référencée et le bitmap n’est pas rendu à l’écran.

Les méthodes faisant l’objet d’une itération sur les pixels, telles que getPixel() , getPixel32() , setPixel() et setPixel32() , sont souvent lentes, surtout sur les périphériques mobiles. Si possible, utilisez des méthodes qui extraient tous les pixels en une seule fois. Pour lire des pixels, utilisez la méthode getVector() , qui est plus rapide que la méthode getPixels() . Dans la mesure du possible, utilisez également des API qui s’appuient sur des objets Vector car, selon toute probabilité, leur exécution sera plus rapide.