我正在尝试从 Allegro 图形库中复制此功能:
void stretch_blit(BITMAP *source, BITMAP *dest, int source_x,
int source_y, int source_width, int source_height,
int dest_x, dest_y, dest_width, dest_height);
http://www.allegro.cc/manual/api/blitting-and-sprites/stretch_blit
这在 Flash 中有些困难,因为 AS3 的 BitmapData.draw() 方法的 Rectangle 和 Matrix 参数之间的功能重叠。
这就是我到目前为止所拥有的。它只在大部分时间有效,而且效率极低(由于必须对像素进行两次采样)。
function stretch_blit(src:BitmapData, dest:BitmapData, source_x:int, source_y:int,
source_width:int, source_height:int, dest_x:int, dest_y:int,
dest_width:int, dest_height:int):void {
var tmp:BitmapData = new BitmapData(dest_width, dest_height, true);
var scalex:Number = dest_width/source_width;
var scaley:Number = dest_height/source_height;
var matrix:Matrix = new Matrix();
var matrix2:Matrix = new Matrix();
matrix.scale(scalex, scaley);
matrix.translate(source_x, -source_y);
tmp.draw(src, matrix, null, null, new Rectangle(0, 0, dest_width, dest_height));
matrix2.translate(dest_x-source_x, dest_y-source_y);
dest.draw(tmp, matrix2);
}
有一个更好的方法吗?