Масштабированное изображение не сохраняется при кадрировании actionscript-3 - PullRequest
0 голосов
/ 06 июня 2011

Когда я пытаюсь сохранить масштабированное обрезанное изображение, моя функция сохранения перестает работать, но прекрасно работает, когда изображение не масштабируется. Есть идеи?

Вот мой код:

var loada = new Loader();
loada.load(new URLRequest("img_one.jpg"));
loada.x = 205;
loada.y = 110;
loada.cacheAsBitmap = true;
loada.scaleX = 1.5;


function toCrop():void 
{
    //Matrix to holder the area to be cropped
    var maskRect = loada.mask.getBounds(loada);
    //Matrix of image to be cropped
    var imgMatrix= loada.mask.transform.matrix;
    //Cropped image
    var myCroppedImage:Bitmap = crop(maskRect, imgMatrix, loada.mask.width, loada.mask.height, loada );

    var m:Matrix = myCroppedImage.transform.matrix;

    var urlLoader:URLLoader = new URLLoader();
    //Set jpg quality of the image to be export 1-100
    var myEncoder:PNGEncoder = new PNGEncoder();
    //Create jpg to be exported
    var pngSource:BitmapData = new BitmapData (loada.mask.width, loada.mask.height, true, 0x00000000);
    pngSource.draw(myCroppedImage, m);
    //Create byte array to hold jpg data
    var byteArray:ByteArray = PNGEncoder.encode(pngSource);
    var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");
    //Send image to the server to be saved
    var savePNG:URLRequest = new URLRequest(glo.bal.base_url+"save_png.php?r="+glo.bal.fb_id+glo.bal.image_extension);
    savePNG.requestHeaders.push(header);
    savePNG.method = URLRequestMethod.POST;
    savePNG.data = byteArray;
    urlLoader.addEventListener(Event.COMPLETE, doNothing1);
    urlLoader.load(savePNG);
}

function doNothing1(e:Event):void
{
    trace ( e );
}

function crop( rect, matrix, _width:Number, _height:Number, displayObject:DisplayObject):Bitmap 
{
    //Create cropped image
    var croppedBitmap:Bitmap = new Bitmap( new BitmapData( _width, _height, true, 0x00000000), PixelSnapping.ALWAYS, true );
    croppedBitmap.bitmapData.draw(displayObject, matrix , null, null, rect, true );
    return croppedBitmap;
}

1 Ответ

0 голосов
/ 20 июня 2011

В своем методе кадрирования пытались ли вы нарисовать его, не передавая исходную матрицу преобразования DisplayObject?Мне кажется, что матрица преобразования не должна быть передана, тем более что вы хотите скопировать уменьшенную версию DisplayObject как есть.

Кроме того, в вашем методе кадрирования кажется немного задом наперед, чтобы создатьрастровое изображение перед отрисовкой отображаемого объекта, который вы хотите скопировать (я не думаю, что это все портит, но это может стоить посмотреть ...)

Я бы сделал:

var bmd:BitmapData  = new BitmapData (_width, _height, true, 0x00000000);
bmd.draw (displayObject, null, null, null, rect, true);
return new Bitmap (bmd, PixelSnapping.ALWAYS, true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...