В Flex вы можете использовать Image Manipulation для достижения желаемого эффекта - см. http://www.insideria.com/2008/03/image-manipulation-in-flex.html:
private var original:BitmapData;
private static const MAX_WIDTH:uint = 2880;
private static var MAX_HEIGHT:uint = 2880;
private function loadImage(url:String):void
{
var request:URLRequest = new URLRequest(url);
var imageLoader:Loader = new Loader();
imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, image_completeHandler);
// add other listeners here
imageLoader.load(request)
}
private function image_completeHandler(event:Event):void
{
var bmd:BitmapData = Bitmap(event.currentTarget.content).bitmapData;
var originalWidth:Number = bmd.width;
var originalHeight:Number = bmd.height;
var newWidth:Number = originalWidth;
var newHeight:Number = originalHeight;
var m:Matrix = new Matrix();
var scaleX:Number = 1;
var scaleY:Number = 1;
if (originalWidth > MAX_WIDTH || originalHeight > MAX_HEIGHT)
{
sx = MAX_WIDTH / originalWidth;
sy = MAX_HEIGHT / originalHeight;
var scale:Number = Math.min(sx, sy);
newWidth = originalWidth * scale;
newHeight = originalHeight * scale;
}
m.scale(scale, scale);
original = new BitmapData( newWidth, , newHeight);
original.draw(bmd, m);
}
Вращающийся
Чтобы использовать матрицу для поворота изображения, вы либо создаете новую матрицу с соответствующими параметрами
var q:Number = 30 * Math.PI / 180 // 30 degrees in radians
var m:Matrix = new Matrix(Math.cos(q), Math.sin(q), -1 * Math.sin(q), Math.cos(q));
//or as a shortcut use the rotate method
var m:Matrix = new Matrix();
m.rotate(q) ;
Когда вы вращаете что-то во Flash Player, оно вращается вокруг своей точки регистрации. По умолчанию это верхний левый угол. Если вы хотите повернуть его вокруг другой точки, вам нужно сместить его в отрицательном направлении, выполните вращение, а затем верните его на прежнее место.
var m:Matrix = new Matrix();
// rotate around the center of the image
var centerX:Number = image.width / 2;
var centerY:Number = image.height /2;
m.translate(-1 * centerX, -1 * centerY);
m.rotate(q);
m.translate(centerX, centrerY);
листать
Перевернуть и изображение является двухэтапным процессом. Первый шаг - умножить текущие scaleX и / или scaleY на -1, а второй - отрегулировать положение x и y. Когда вы переворачиваете изображение, точка регистрации не меняется и она рисуется в противоположном направлении. Чтобы компенсировать это, вам нужно изменить положение x по ширине, а положение y по высоте.
var m:Matrix = new Matrix();
m.scale(-1, 0); // flip horizontal assuming that scaleX is currently 1
m.translate(image.width, 0); // move its x position by its width to put it in the upper left corner again