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

For what it does, copyPixels is insanely fast!

never thought of that!

Leave a comment



About this Entry

This page contains a single entry by darron published on August 11, 2005 10:45 AM.

One Suite Solution was the previous entry in this blog.

Car and Driver: Ride and Drive is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.

Archives

OpenID accepted here Learn more about OpenID
Powered by Movable Type 5.02