Verfpixels die de
setVector()
-methode gebruiken.
Wanneer u pixels verft, kunnen er eenvoudige optimalisaties worden uitgevoerd met behulp van methoden in de BitmapData-klasse. U kunt de methode
setVector()
gebruiken om snel pixels te tekenen:
// 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 );
Wanneer u langzame methoden gebruikt, zoals
setPixel()
of
setPixel32()
, gebruikt u de methoden
lock()
en
unlock()
voor een snellere uitvoering. In de volgende code worden de methoden
lock()
en
unlock()
gebruikt om de prestatie te verbeteren.
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
De
lock()
-methode van de BitmapData-klasse vergrendelt een afbeelding en voorkomt dat objecten die ernaar verwijzen worden bijgewerkt als het BitmapData-object wijzigt. Als een Bitmap-object bijvoorbeeld verwijst naar een BitmapData-object, kunt u het BitmapData-object vergrendelen, wijzigen en ontgrendelen. Het Bitmap-object wordt niet gewijzigd, voordat het BitmapData-object wordt ontgrendeld. Gebruik deze methode met de methode
unlock()
voor en na verscheidene aanroepen van de methode
setPixel()
of
setPixel32()
om de prestaties te verbeteren. Als u
lock()
en
unlock()
oproept, wordt het scherm niet onnodig bijgewerkt.
Opmerking:
Deze techniek niet altijd tot betere prestaties bij het verwerken van pixels op een bitmap die niet op de weergavelijst staat (dubbele buffering). Als een bitmapobject niet naar de bitmapbuffer verwijst, verbeteren de prestaties niet wanneer u
lock()
en
unlock()
gebruikt. Flash Player detecteert dat er niet naar de buffer wordt verwezen en de bitmap niet op het scherm wordt gerenderd.
Methoden die pixelherhalingen uitvoeren, zoals
getPixel()
,
getPixel32()
,
setPixel()
en
setPixel32()
, werken wellicht vrij langzaam, vooral op mobiele apparatuur. Gebruik, indien mogelijk, methoden die alle pixels in één oproep opvragen. Voor het lezen van pixels gebruikt u de
getVector()
-methode, die sneller is dan de
getPixels()
-methode. Gebruik waar mogelijk API's die gebruikmaken van Vector-objecten; deze zijn sneller.