创建位图数据实例后是否可以更改其大小?

Is it possible to change the size of a bitmap data instance after it has been created?

我看到有一些方法可以在 BitmapData 上合并、绘制和复制像素,但无论我尝试什么,它似乎都不会改变位图实例的大小。

这是我目前的情况:

var initialWidth:int = 100;
var initialHeight:int = 100;
bitmapData = new BitmapData(initialWidth,initialHeight,true,0xFFFFFFFF);
rectangle = new Rectangle(0, 0, newBitmapData.width, newBitmapData.height);
bitmapData.merge(newBitmapData, rectangle, new Point(), 0, 0, 0, 0);
bitmapData.drawWithQuality(newBitmapData, null, null, null, null, false, quality);
bitmapData.drawWithQuality(LoaderInfo(event.currentTarget).loader, null, null, null, null, false, quality);
bitmapData.copyPixels(newBitmapData, newBitmapData.rect, new Point());
bitmapData.merge(newBitmapData, null, new Point(), 0, 0, 0, 0);

或者是否可以缩小尺寸?

几乎是,但实际上不是! 可以重新创建位图数据,其宽度和高度是静态的 但是如果你只想剪辑它或将它调整到更小的区域,可以让未使用的像素保持透明。

var bmd:BitmapData = new BitmapData(100, 100, true, 0x0);
bmd.draw(s_omethin_g);
bmd = clipDown(bmd, new Point(50,50));


function clipDown(_bmd:BitmapData, _size:Point):BitmapData {
    var defaultBmdbound:bitmapData = new BitmapData(_bmd.width, _bmd.height, true, 0x0);
    var smatrix:Matrix = new Matrix();
    smatrix.scale(_size.x/_bmd.width, _size.y/_bmd.height);
    var resizedBmd:BitmapData = new BitmapData(_size.x, _size.y);
    resizedBmd.draw(_bmd, smatrix);
    var rect:Rectangle = new Rectangle(0,0,resizedBmd.width,resizedBmd.height);
    defaultBmdbound.copyPixels(resizedBmd, rect, new Point());
    return defaultBmdbound;
}

简短的回答是否定的,你不能。

为了完整起见,引用 Roger Braunstein ActionScript 3.0 Bible 的一段话:

The size of a bitmap is fixed at construction time. You have to pick it at the outset, and you can't change the size later on.

如果您想避免复制位图数据,我建议使用显示对象遮罩裁剪可见区域。