调整BitmapData对象大小的最佳方法是什么?

时间:2009-06-08 11:42:54

标签: flash actionscript-3 image resize bitmapdata

假设我有一个600x600的BitmapData,我想将其缩小到100x100。

6 个答案:

答案 0 :(得分:69)

这有效:

var scale:Number = 1.0/6.0;
var matrix:Matrix = new Matrix();
matrix.scale(scale, scale);

var smallBMD:BitmapData = new BitmapData(bigBMD.width * scale, bigBMD.height * scale, true, 0x000000);
smallBMD.draw(bigBMD, matrix, null, null, null, true);

var bitmap:Bitmap = new Bitmap(smallBMD, PixelSnapping.NEVER, true);

答案 1 :(得分:19)

public function drawScaled(obj:IBitmapDrawable, thumbWidth:Number, thumbHeight:Number):Bitmap {
    var m:Matrix = new Matrix();
    m.scale(WIDTH / obj.width, HEIGHT / obj.height);
    var bmp:BitmapData = new BitmapData(thumbWidth, thumbHeight, false);
    bmp.draw(obj, m);
    return new Bitmap(bmp);
}

IBitmapDrawable是DisplayObject和BitmapData的接口。

来自:http://www.nightdrops.com/2009/02/quick-reference-drawing-a-scaled-object-in-actionscript/

答案 2 :(得分:10)

平滑:

function BitmapScaled(source:IBitmapDrawable, thumbWidth:Number, thumbHeight:Number):BitmapData {
    var mat:Matrix = new Matrix();
    mat.scale(thumbWidth/source.width, thumbHeight/source.height);
    var bmpd_draw:BitmapData = new BitmapData(thumbWidth, thumbHeight, false);
    bmpd_draw.draw(source, mat, null, null, null, true);
    return bmpd_draw;
}

draw方法接受IBitmapDrawable,它是DisplayObject和BitmapData的接口。

答案 3 :(得分:1)

不自己编写代码。我接近这个的方法是创建一个所需大小的新BitmapData对象,然后使用bitmap.draw方法将大的一个复制到小的。 bitmap.draw方法还接受一个矩阵参数,您可以在复制时使用该参数进行缩放。

答案 4 :(得分:0)

使用矩阵缩放的问题在于它不进行任何抗锯齿或平滑 - 如果你确定你只会缩小尺寸,这可能没问题,但更通用的方法是使用Image类来做大小调整。在AS3中,这永远不会被添加到显示列表中,因此只能在“屏幕外”使用。像这样的东西(你的位图数据为“sourceBitmapData”):

var image:Image = new Image();
image.load(new Bitmap(sourceBitmapData, PixelSnapping.NEVER, true));

var scale:uint = 100/600; // this is from your example of 600x600 => 100x100
var scaledWidth:uint = sourceBitmapData.width * scale;
var scaledHeight:uint = sourceBitmapData.height * scale;

image.content.width = scaledWidth;
image.content.height = scaledHeight;

var scaledBitmapData:BitmapData = new BitmapData(scaledWidth, scaledHeight);
scaledBitmapData.draw(image.content); 

image = null;

然后您可以使用“scaledBitmapData”代替“sourceBitmapData”来执行任何操作。

答案 5 :(得分:0)

以上是上述内容的变体,增加了对缩放,拉伸和信箱的支持。它可能不提供剪辑支持。

<div class="btn-login1 btn-login-email" (click)="optionSelected('Email')">
        <i class="fa fa-at fa-fw"></i><span>
            Sign in with Email
        </span>
    </div>