Recently in my diploma I need to encode jpeg file on client, after some research I found library created using Alchemy project( from C/C++ language).It allows you to encode jpeg both synchronous and asynchronous with maximum speed(unlike standard encode() method).
After downloading library and including it in your project, you should do:
1. Init library
This nethod should start with application running s:application applicationcomplete="initAlchemy()"
Parameters:
src:BitmapData - bitmapData to be encoded. cannot be null !
image_data:ByteArray - buffer where jpeg image will be written to. cannot be null !
imageWidth:int - 'src' image width
imageHeight:int - 'src' image height
quality:int - jpeg quality (1-100)
3.2 Or encode your image asynchronous
encodeAsync( callback:Function, src:BimapData, image_data:ByteArrat, imageWidth:uint, imageHeight:uint, quality:int, tuning:int );
Parameters:
callback:Function - callback function to be called when compression is finished. function is invoked with out parameter, image_data byteArray (the same passed as a image_data parameter
src:BitmapData - see synchronous method
image_data:ByteArray - see synchronous method
imageWidth:int - see synchronous method
imageHeight:int - see synchronous method
quality:int - see synchronous method
tuning:int - this is most important parameter, it defines 'how often' method is going to interrupted and control flow returned to other parts of application. it should be interpreted, rather as a 'number of scanlines to be compressed in a single timeslice'
References:
Flex Tutorial - An Asynchronous JPEG Encoder
Alchemy - asynchronous jpeg encoding #2
Alchemy - asynchronous jpeg encoding
First I tried bytearray.org
After downloading library and including it in your project, you should do:
1. Init library
This nethod should start with application running s:application applicationcomplete="initAlchemy()"
private var init1:CLibInit; private var lib : Object; private function initAlchemy():void { init1 = new CLibInit(); lib = init1.init(); }2.Prepare your image
private var bd:BitmapData ; //your image here public var byteArr:ByteArray = bd.getPixels( bd.rect );3.1 Encode your image synchronous
var ba:ByteArray = bd.getPixels( bd.rect ); ba.position = 0; byteArr = new ByteArray(); //result will be in byteArr lib.encode(ba, byteArr, bd.width, bd.height, 100); fileRef.save(byteArr,"NewFileName1.jpg");encode( src:BimapData, image_data:ByteArrat, imageWidth:uint, imageHeight:uint, quality:int );
Parameters:
src:BitmapData - bitmapData to be encoded. cannot be null !
image_data:ByteArray - buffer where jpeg image will be written to. cannot be null !
imageWidth:int - 'src' image width
imageHeight:int - 'src' image height
quality:int - jpeg quality (1-100)
3.2 Or encode your image asynchronous
lib.encodeAsync( finish, bd, ba,bd.width, bd.height, 100, tuning:int );
encodeAsync( callback:Function, src:BimapData, image_data:ByteArrat, imageWidth:uint, imageHeight:uint, quality:int, tuning:int );
Parameters:
callback:Function - callback function to be called when compression is finished. function is invoked with out parameter, image_data byteArray (the same passed as a image_data parameter
src:BitmapData - see synchronous method
image_data:ByteArray - see synchronous method
imageWidth:int - see synchronous method
imageHeight:int - see synchronous method
quality:int - see synchronous method
tuning:int - this is most important parameter, it defines 'how often' method is going to interrupted and control flow returned to other parts of application. it should be interpreted, rather as a 'number of scanlines to be compressed in a single timeslice'
References:
Flex Tutorial - An Asynchronous JPEG Encoder
Alchemy - asynchronous jpeg encoding #2
Alchemy - asynchronous jpeg encoding
First I tried bytearray.org
No comments:
Post a Comment