PDA

Просмотр полной версии : JPEGEncoder виснет браузер


Makkssimka
06.06.2013, 19:28
Доброго времени суток! При перекодировки фото (средний вес 15 Mb) из BitmapData в ByteArray для последующей загрузке на сервер с помощью JPEGEncoder:

var img:ByteArray = new JPEGEncoder(90).encode(origBit);

Опера виснет на несколько секунд(10-15), причем пишет нет ответа. Вопрос как это можно исправить, заменить чем-либо, хотя бы чтоб выводилось идет обработка фото (просто нет у JPEGEncoder слушателя прогресса как и других)?

GBee
06.06.2013, 19:42
Вроде с какого то плеера можно параллельно пускать

Добавлено через 3 минуты
Хотя я вас вроде обманул.
Здесь посмотрите http://www.bytearray.org/?p=775

illuzor
06.06.2013, 21:33
Makkssimka, попробуйте нативный энкодер. http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#encode()

AlexCooper
06.06.2013, 22:02
Могу ошибаться но я бы сначало
private function extractBmpd( ARG_object:DisplayObject, ARG_x:Number, ARG_y:Number, ARG_width:Number, ARG_height:Number):BitmapData {

var cropArea:Rectangle = new Rectangle(0, 0, ARG_width, ARG_height);

var bmpd:BitmapData = new BitmapData(ARG_width, ARG_height);

var croppedBitmap:Bitmap = new Bitmap(bmpd, PixelSnapping.ALWAYS, true);

var cropMatrix:Matrix = new Matrix();
cropMatrix.translate(-ARG_x, -ARG_y);

bmpd.draw( ARG_object, cropMatrix, null, null, cropArea, true );
return bmpd;
} после уже перекодировал, но все конечно зависит от размера. Можно по частям резать и по частям отправлять как вариант.

Makkssimka
11.06.2013, 19:44
Всем спасибо за помощь, разобрался! Нашел интересный класс, он поддерживает не только асинхронность, но позаоляет вешать слушатели событий http://tech.pro/tutorial/722/flex-tutorial-an-asynchronous-jpeg-encoder