We’ve all been there. You’re building an image gallery and you need to create consistently sized thumbnails from a set of images, of various sizes and orientations and with differing aspect ratios – or you need a fullscreen background which always fills the stage, regardless of a user’s screen resolution and browser window size – or maybe you just need to fit a DisplayObject into a rectangular area whilst maintaining the correct proportions of the original image.
Introducing DisplayUtils
Since this is a common task, one that I find myself coding over and over, I’ve whipped up a little class called DisplayUtils which will help with the scenarios mentioned above and more.
The main method in DisplayUtils is FitIntoRect. FitIntoRect can work in several ways. You can use it to resize a DisplayObject to fit inside a rectangle, or you can use it to generate a transformation matrix, which can be applied to an object or used with the BitmapData.draw method to create thumbnail previews, or both. There is also another method called createThumb, which uses fitIntoRect to quickly and easily create nicely cropped and scaled thumbnails from a source image with any aspect ratio.
Have a play with the demo above to see what you can do with these methods.
Using DisplayUtils and fitIntoRect
There are several parameters to control how fitIntoRect works. Here’s what you can pass to the method:
- displayObject : The DisplayObject to resize
- rectangle : A Rectangle object representing the space the DisplayObject should fit into.
- fillRect : Whether the DisplayObject should be transformed to fill the entire rectangle, or whether it should fit completely within it.
- align : The alignment of the DisplayObject within the rectangle, for example Top Left or Middle.
- applyTransform : Whether the calculated transformation matrix should be applied to the DisplayObject within the fitIntoRect method. If false, the DisplayObject will not be modified, but the Matrix returned by the fitIntoRect method can be used to transform objects or modify the draw command on a BitmapData object.
The download includes all necessary classes as well as several examples of how to use the fitIntoRect method. Here are some code snippets for getting started with…
Example Usage
Fit a DisplayObject into a Rectangle
var area:Rectangle = new Rectangle( 0, 0, 200, 100 );
DisplayUtils.fitIntoRect( myDisplayObject, area, true, Alignment.MIDDLE );
Create a fullscreen background image
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
function onStageResized( event:Event = null ):void
{
var area:Rectangle = new Rectangle( 0, 0, stage.stageWidth, stage.stageHeight );
DisplayUtils.fitIntoRect( myDisplayObject, area, true, Alignment.MIDDLE );
}
stage.addEventListener( Event.RESIZE, onStageResized );
onStageResized();
Create a thumbnail
var thumb:Bitmap = DisplayUtils.createThumb( myBitmap.bitmapData, 100, 100, Alignment.MIDDLE, true );
addChild( thumb );
Download
You can download the DisplayUtils class, as well as the Alignment class, which simply contains enumeration for the various alignment options when using fitIntoRect and createThumb.
A example of some of the uses discussed above is also available in the zip.
Download: DisplayUtils
awesome, thanks for sharing!
Awesome little utility. I recently had to do something similar on a project and this would have made it a lot easier.. Well there is always next time.
Nice work as usual! But I can’t figure out how to make thumbnails out of loaded images (xml gallery)…Maybey you can point me in the right direction….
I am not experienced in flex much can you give me the complete example.
Manas, the complete example is in the download: http://blog.soulwire.co.uk/download/displayutils
Hi there, it seems that this link is not working? I guess that link’s content was not the same as the one provided in the post?
It would be nice to have the actual example in the post
Can you please Give total source code of the above example?
The flv file is not opened in my Flash Software. I am using Flash 8 to open the flv file.
Is there an example of this using a dynamic thumbnail boxes? Let’s say I wanted to generate a set of thumbnail images from a bunch of large loaded images that come from an XML doc? This way I would not have to sit there in photoshop and make a tiny image for each photo.
dude you are amazing! good job again!
dude you are amazing! good job again!
great job, thank you so much!
Great tool – just ported it to haXe and the code gets smaller and shows nicely why haXe is great too:
http://cunity.me/devel/uk.soulwire.zip