2

我在一个类中有这个函数,它可以创建我传入的任何 DisplayObject 的位图。如您所见,每次创建新位图时,我都会创建一个新的 BitmapData 对象和一个新的 Bitmap 对象。

有没有办法调整这个函数,这样我每次运行这个函数时就不必重新创建这两个对象了?

private var bitmapData:BitmapData;
private var bm:Bitmap; 

crop(someSprite.width, someSprite.height, someSprite);

private function crop(_width:Number, _height:Number, displayObject:DisplayObject):void {

bitmapData.dispose();
bitmapData = new BitmapData( _width, _height, false, 0xFFFFFFFF );  
bitmapData.draw(displayObject);

bm = null;
bm = new Bitmap(bitmapData, PixelSnapping.ALWAYS, true);
bm.smoothing = true;
bm.alpha = 0;

}

谢谢,

标记

4

2 回答 2

3

如果显示对象尺寸每次都更改,则每次都必须重新创建BitmapData

对于Bitmap对象,您不需要重新创建它。您可以简单地直接设置位图数据:

bm.bitmapData = bitmapData;
于 2012-06-28T10:05:01.800 回答
2

如果您想避免每次只在您期望的最大尺寸中创建一个 BitmapData 时都创建一个新的 BitmapData,并且在您的裁剪方法中,您首先使用 yourMap.fillRect(yourMap.rect,0) 清除该地图,然后进行绘制右上角使用带有裁剪尺寸的剪辑矩形。为了获得额外的微小性能提升,您可以设置 Bitmap 对象的 ScrollRect 属性,以将其显示为裁剪后的尺寸。

于 2012-06-29T10:02:33.753 回答