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

时间:2016-11-28 14:00:31

标签: actionscript-3 flash air

我发现在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);

或者可以将尺寸缩小吗?

2 个答案:

答案 0 :(得分:1)

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

为了完整起见,Roger Braunstein引用ActionScript 3.0 Bible

  

位图的大小在构造时固定。你必须在一开始就选择它,以后你就不能改变它的大小。

如果您希望避免复制位图数据,建议使用显示对象蒙版剪切可见区域。

答案 1 :(得分: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;
}