
Код AS3:
//есть у нас лоадер который загружен через fileReferance
//и вытаскиваем из него картинку и вставляем на экран
var bmp:Bitmap = loader.content as Bitmap;
// если мы просто добавим на экран bmp то при rotate - он будет поворачиваться от начала его координат
// а мне надо чтобы вращался вокруг своейго цента и поэтому я решил создать Sprite и вставить в него bmp
var sprite: Sprite = new Sprite();
bmp.x=-bmp.width/2;
bmp.y=-bmp.height/2;
sprite.addChild(bmp);
this.addChild(sprite);
//на sprite вещаем listeners на перемещение зажимая мышкой чтобы перемещать туда сюда...
// это сейчас не суть и поэтому упустим этот бытовой стандартный код
// теперь нарисуем поверх всего прямоугольник , который означает служит маской вырезания изображения
var rect:Sprite=new Sprite();
rect.graphics.lineStyle(1,0xff0000);
rect.graphics.drawRect(0,0,130,520);
rect.x=srite.width/2-rect.width/2;
rect.y=sprite.height/2-rect.height/2;// расположили в центре картинки
this.addChild(rect);
/// теперь эксперементы...
///-----------------------------------------------
///-----------------------------------------------
///-----------------------------------------------
///-----------------------------------------------
var matrix:Matrix=new Matrix();
matrix.tx=-sprite.width/2 +rect.x- sprite.x;
matrix.ty=-sprite.height/2+rect.y-sprite.y;
//создаем bitmapData и вырезаем в него кусок из картинки bmp маской rect у которого размеры 130x520
var bdata:BitmapData = new BitmapData(130, 520, true, 0xffffff);
bdata.draw(bmp,matrix, null, null, new Rectangle(0, 0, 130, 520), true);
// вырезается все нормально и правильно
//----------------------------
///-----------------------------------------------
///-----------------------------------------------
///-----------------------------------------------
///-----------------------------------------------
///-----------------------------------------------
// а теперь тоже самое но с повернутой картинкой !!!!!!!!!!!!!!!!!!!!!!!!!!
sprite.rotation=90;
var matrix:Matrix=new Matrix();
matrix.tx=-sprite.width/2 +rect.x- sprite.x;
matrix.ty=-sprite.height/2+rect.y-sprite.y;
matrix.rotate(sprite.rotation*180/Math.PI) // и в матрице делаем поворот , только перевели в радианы
//создаем bitmapData и вырезаем в него кусок из картинки bmp маской rect у которого размеры 130x520
var bdata:BitmapData = new BitmapData(130, 520, true, 0xffffff);
bdata.draw(bmp,matrix, null, null, new Rectangle(0, 0, 130, 520), true);
// вырезается криво!!!!! Угол поворота задан верно, но tx и ty сбиваются :-(
P.s.