Je suis en train de reproduire cette fonction à partir de la bibliothèque graphique Allegro:Stretching BitmapData en AS3
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
Ceci est un peu difficile en Flash, en raison de la fonctionnalité de chevauchement entre le rectangle et matrice arguments de la méthode BitmapData.draw() d'AS3.
C'est ce que j'ai jusqu'à présent. Cela ne fonctionne que la plupart du temps et est incroyablement inefficace (en raison de devoir échantillonner les pixels deux fois).
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);
}
Y a-t-il une meilleure façon de procéder?