There is always a need to way to export some sort of a report out to the user, previously I used the classical use of a serverside script in Java or PHP to enable user to take a screenshot of the component or the entire application. Since the flash player 10 provides the feature to save local file using file reference I am going to exploit that feature and export some BITMAP content into a Jpeg file.
following is the code for taking a snapshot of the component on some event/action
Prerequisite for making this components work.
- Build project in flex 4.0 + SDK
- Use flash player 10 and above (MUST)
- Include Corelib.swc for JPEGEncoder to work
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | //file reference declaration to enable user to save file to local system. private var file:FileReference = new FileReference(); //function can be called on button click or context menu click or any other interaction private function captureIt():void{ var df : DateFormatter = new DateFormatter(); df.formatString = "DD-MM-YY HH:NN" var bitmapData:BitmapData = new BitmapData(this.width, this.height); bitmapData.draw(this,new Matrix()); var bitmap : Bitmap = new Bitmap(bitmapData); var jpg:JPEGEncoder = new JPEGEncoder(); var ba:ByteArray = jpg.encode(bitmapData); var dt : Date = new Date(); var dtStr : String = df.format(dt.time); file.save(ba,'Screenshot at'+dt.time+'.jpg'); } |
Explanation
BitmapData ()
The BitmapData () function takes a height and width of the component which has to be converted to image, i have used this you can very well use any UIComponent or DisplayObject.
bitmapData.draw(this,new Matrix ());
This is the place where the actual conversion takes place (where the bitmap data is drawn), Again you can use any UIComponent or DisplayObject in this place.
Bitmap Encoding: jpg.encode (bitmapData);
The component or screen area to be captured is converted into BITMAP data so that it could be encoded into Jpeg file format for saving it, you can also use a PNG or GIF encoder in this place as per your requirement. At this place the Bitmap data is encoded into a JPEG file format.
var ba : ByteArray = jpg.encode (bitmapData);
Since BITMAP data cannot be saved directly to the local system we first convert it into a ByteArray.
Date : dt.time
The date is only used to give each screenshot a unique timestamps so that each time the function is called a new file is saved.
file.save ( ba,’Screenshot at’+dt.time+’.jpg’ );
Now we pass the byte array to the file reference and also pass the name by which the file has to be saved, as shown in the function above.
Vollia you can now save JPEG file to your local file system via Flex without using any third party Serverside script to do so. No more HTTP request and error handling to take care of.
GO MAKE THE WORLD A BETTER PLACE
Say no to paper, No need to print graphs when you can save them to jpeg






