创建位图数据实例后是否可以更改其大小?
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.
如果您想避免复制位图数据,我建议使用显示对象遮罩裁剪可见区域。
我看到有一些方法可以在 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.
如果您想避免复制位图数据,我建议使用显示对象遮罩裁剪可见区域。