Quantcast
Channel: Lee Burrows » Lee
Viewing all articles
Browse latest Browse all 12

Asynchronous Image Encoders

$
0
0

A while back i posted some ThreadedImageEncoder classes to convert BitmapData objects to .PNG or .JPG format over multiple Flash frames. With the arrival of ActionScript Workers i figured they would become obsolete, but we’re still waiting for Workers in mobile AIR so i’m still using them. Anyway, i needed a ‘real’ project to practice generating ASDocs with, so i chose the image encoder classes. I wasn’t planning on doing more than adding some comments, but i got carried away and ended up refactoring a lot of the code too.

Now they’re a bit more polished, i’ve renamed them to AsyncImageEncoders and given them their own github repository. In the repo you’ll find all the source code, a precompiled SWC, ASDocs for the classes and instructions on using them.

They’re easy to use:

//generate a BitmapData object to encode
var myBitmapData:BitmapData = new BitmapData(1000, 1000, true, 0x80FF9900);

//create an encoder
var encoder:IAsyncImageEncoder = new AsyncPNGEncoder();

//add listeners
encoder.addEventListener(AsyncImageEncoderEvent.PROGRESS, encodeProgressHandler);
encoder.addEventListener(Event.COMPLETE, encodeCompleteHandler);

//start encoding for 20 milliseconds per frame
encoder.start(myBitmapData, 20);

function encodeProgressHandler(event:AsyncImageEncoderEvent):void
{
    //trace progress
    trace("encoding progress:", Math.floor(event.percentComplete)+"% complete");
}

function encodeCompleteHandler(event:Event):void
{
    encoder.removeEventListener(AsyncImageEncoderEvent.PROGRESS, encodeProgressHandler);
    encoder.removeEventListener(Event.COMPLETE, encodeCompleteHandler);
    //trace size of result
    trace("encoding completed:", encoder.encodedBytes.length+" bytes");
    //do something with the bytes...
    //..save to filesystem?
    //..upload to server?
    //..set as source for flex Image component?
}

There is also a stop() method if you get impatient with a long encode (large JPEGs on mobile can take ages) and an isRunning property which should need no explanation.

Lastly, the AsyncImageEncoderBase class can be extended to create other asynchronous encoders; hopefully, i will demonstrate that by adding a .BMP encoder in the next few days it took me 5 minutes to create a .BMP encoder.


Viewing all articles
Browse latest Browse all 12

Latest Images

Trending Articles





Latest Images