Maximizing BitmapData.setPixel performance

| 2 Comments | No TrackBacks

Flash 8's ability to use bitmap / pixel data in the player is an awesome new feature addition. When you're doing a lot of pixel manipulation, here's a little trick to improve performance: Use an off-screen bitmap for setPixel and then copy the pixels into an on-screen bitmap.

Consider the following code snippet:

import flash.geom.Point; import flash.display.BitmapData; import flash.display.Bitmap; var width:Number = 100; var height:Number = 100; var offScreen:BitmapData = new BitmapData(width, height); var onScreen:BitmapData = new BitmapData(width, height); var zeroPoint:Point = new Point(0, 0); var clip:MovieClip = createEmptyMovieClip("clip", 1); clip._x = 10; clip._y = 10; clip.attachBitmap(onScreen, 1); // wire the bitmap to the screen onEnterFrame = function() { // do all of the pixel manipulation in the offScreen BitmapData for (var y:Number = 0; y < height; y++) { for (var x:Number = 0; x < width; x++) { offScreen.setPixel(x, y, x*y+getTimer()); } } // as a final step, copy all of the offScreen pixels to the onScreen BitmapData onScreen.copyPixels(offScreen, offScreen.rectangle, zeroPoint); }

The difference may not be huge, but it does make a difference. This technique, drawing off screen and then copying on screen, is called Double Buffering.

Already making great use of BitmapData, have you see Andre's 8ball lab yet?

No TrackBacks

TrackBack URL: http://www.darronschall.com/mt/mt-tb.cgi/59

2 Comments

Leave a comment

Flex.org - The Directory for Flex

Archives