flowerspring

기본적으로 Bitmap 인스턴스는, 참조하고 있는 BitmapData 객체에 setPixcel32()나 setPixel()이 호출되는 상황을 알아챈다.
비트맵의 모든 픽셀의 색상을 바꾸게 될 경우 setPixcel32()나 setPixcel()이 한프레임에서 자주 호출될때는 퍼포먼스가 떨어지게 되는데 이런경우 퍼포먼스 향상을 위해 lock()을 사용한다.

lock()을 호출하게 되면 AS는 Bitmap 객체가 setPixel32()나 setPixcel()의 실행을 알 수 없게 강제로 막는다.
그래서 연속된 setPixcel()이 호출되는 경우는 lock()을 호출하는 편이 좋다. 호출된 후 변경하려던 모든 픽셀이 변경이 완료된 경우는 unlock()을 호출해주면 Bitmap 객체가 모든 알림을 받을 수 있게 된다. 


var bitmapData:BitmapData = new BitmapData(1024, 1024, false);
var bmp:Bitmap = new Bitmap(bitmapData);
 
//퍼포먼스 향샹을 위해 lock을 걸어준다.
bitmapData.lock();    
    
for(var i:uint = 0; i < bitmapData.height; i++){
    for(var j:uint = 0; j < imgData.width; j++){
        bitmapData.setPixel(j, i, Math.floor(Math.random()*0xffffffff));
    }
}

bitmapData.unlock(); //lock 해제
 
container.addChild(bmp);

Comment +0