Смешно,но так работает ! (тестировал на ~7000x7000 )

Код AS3:
private function imageLoadComplete(event:Event):void{
var bitmap:Bitmap = new Bitmap(Bitmap(ImgL.content).bitmapData);
var bitmapData:BitmapData = bitmap.bitmapData;//Bitmap(ImgL.content).bitmapData.clone();
var sMx :Matrix = new Matrix();
var _max_size :Number = 400;
var _w :Number = bitmapData.width;
var _h :Number = bitmapData.height;
var tan :Number = (_h/_w);
var bmd :BitmapData;
if( _w > _max_size || _h > _max_size )
if( _w <= _h && _w >= _max_size ){
bmd = new BitmapData( _max_size, (int)(_max_size*tan), true, 0x00000000);
sMx.scale( _max_size/_w, (int)(_max_size*tan)/_h );
}else{
bmd = new BitmapData( (int)(_max_size/tan), _max_size, true, 0x00000000);
sMx.scale( (int)(_max_size/tan)/_w, _max_size/_h );
}
bmd.draw(bitmapData,sMx);
GlobalStore.add(new Bitmap(bmd));
}