Revision: 26164
Updated Code
at April 19, 2010 13:16 by adrianparr
Updated Code
// This code assumes there is a MovieClip on stage with the instance // name of 'pattern_mc'. Inside 'pattern_mc' there could be a mask which // is masking all the other layers. var bounds:Rectangle = getRealBounds(pattern_mc); var bmpd:BitmapData = new BitmapData(bounds.width, bounds.height); var matrix:Matrix = new Matrix(); matrix.translate(-bounds.x, -bounds.y); bmpd.draw(pattern_mc, matrix, null, null, null, true); var bmp:Bitmap = new Bitmap(bmpd); bmp.x = 20; bmp.y = 20; addChild(bmp); function getRealBounds(displayObject:DisplayObject):Rectangle { var bounds:Rectangle; var boundsDispO:Rectangle = displayObject.getBounds( displayObject ); var bitmapData:BitmapData = new BitmapData( int( boundsDispO.width + 0.5 ), int( boundsDispO.height + 0.5 ), true, 0 ); var matrix:Matrix = new Matrix(); matrix.translate( -boundsDispO.x, -boundsDispO.y); bitmapData.draw( displayObject, matrix, new ColorTransform( 1, 1, 1, 1, 255, -255, -255, 255 ) ); bounds = bitmapData.getColorBoundsRect( 0xFF000000, 0xFF000000 ); bounds.x += boundsDispO.x; bounds.y += boundsDispO.y; bitmapData.dispose(); return bounds; }
Revision: 26163
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at April 19, 2010 13:12 by adrianparr
Initial Code
var bounds:Rectangle = getRealBounds(pattern_mc); var bmpd:BitmapData = new BitmapData(bounds.width, bounds.height); var matrix:Matrix = new Matrix(); matrix.translate(-bounds.x, -bounds.y); bmpd.draw(pattern_mc, matrix, null, null, null, true); var bmp:Bitmap = new Bitmap(bmpd); bmp.x = 20; bmp.y = 20; addChild(bmp); function getRealBounds(displayObject:DisplayObject):Rectangle { var bounds:Rectangle; var boundsDispO:Rectangle = displayObject.getBounds( displayObject ); var bitmapData:BitmapData = new BitmapData( int( boundsDispO.width + 0.5 ), int( boundsDispO.height + 0.5 ), true, 0 ); var matrix:Matrix = new Matrix(); matrix.translate( -boundsDispO.x, -boundsDispO.y); bitmapData.draw( displayObject, matrix, new ColorTransform( 1, 1, 1, 1, 255, -255, -255, 255 ) ); bounds = bitmapData.getColorBoundsRect( 0xFF000000, 0xFF000000 ); bounds.x += boundsDispO.x; bounds.y += boundsDispO.y; bitmapData.dispose(); return bounds; }
Initial URL
http://blog.open-design.be/2010/01/26/getbounds-on-displayobject-not-functioning-properly/
Initial Description
If you need to use bitmapData.draw() method on a DisplayObject that has a mask as a child then it can be awkward getting it to work properly. Using Thomas John's getRealBounds method is a great solution.
Initial Title
AS3 bitmapData.draw() with Masked DisplayObject
Initial Tags
Initial Language
ActionScript 3