
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.