Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Отмена процесса кодирования JPEG (http://www.flasher.ru/forum/showthread.php?t=201818)

kuflash 23.06.2013 14:46

Отмена процесса кодирования JPEG
 
Всем доброго дня! В своем проекте мне необходимо преобразовывать отображаемые объекты в JPEG картинки. Для преобразования в JPEG я использую следующий класс для асинхронного JPEG кодирования:
http://tech.pro/tutorial/722/flex-tu...s-jpeg-encoder

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

Заранее благодарен за советы :)

Tails 23.06.2013 15:10

Кодирование же должно происходить почти мгновенно, для одной картинки?

kuflash 23.06.2013 15:15

У меня картинка очень большая. Порядка 3000x3000px
Потом эта картинка сохраняется в PDF. И вот процесс кодирования в JPEG идет порядка 30-35 секунд.

Tails 23.06.2013 16:05

Используйте воркеры для кодирования картинки без замораживания интерфейса:
http://help.adobe.com/ru_RU/FlashPla...em/Worker.html

kuflash 23.06.2013 16:21

Так вопрос то не в этом. Проблему заморозки интерфейса я решил с помощь того класса..
Я хочу узнать, возможно ли отменить процесс кодирования? Или с помощью этих воркеров это можно сделать? Опять же, они доступны начиная с версии 11.4. Но это буду решать потом, т.к. пока не указывалась версия плеера для данного проекта.

WisP 23.06.2013 16:27

Что значит "отменить"? Если кодируете из bitmapdata, то запоминайте эту bitmapdata и восстанавливайте, когда необходимо.

kuflash 23.06.2013 16:34

Отменить это значит "убить" процесс кодирования, по аналогии, как, когда отменяем скачивание файла. Т.е. скачивание прерывается и все. Мне не надо запоминать состояние bitmapdata, мне нужно просто отменить процесс кодирования.
Не знаю, понятно ли я объясняю...

Добавлено через 1 минуту
Вот кусок кода, где я кодирую изображение:
Код AS3:

                        templateRectangle = new Rectangle( 0, 0, templateWidth, templateHeight);
 
                        templatePDFBitmapData = new BitmapData(templateWidth, templateHeight, true);
 
                        templateGraphMatrix.translate(( templateWidth / 2 ), 0);
 
                        templatePDFBitmapData.draw(target, templateGraphMatrix, null, null, templateRectangle);
 
                        var encoder:JPEGAsyncEncoder = new JPEGAsyncEncoder(80);
                        encoder.PixelsPerIteration = 128;
                        encoder.addEventListener(JPEGAsyncCompleteEvent.JPEGASYNC_COMPLETE, encodeDone);
                        encoder.addEventListener(ProgressEvent.PROGRESS, encodeProg);
                        encoder.encode(templatePDFBitmapData);


Hauts 23.06.2013 16:43

А у JPEGAsyncEncoder`а нет метода для прерывания?

Этак FinishEncode к примеру, не поможет?

Опс, там же "private function" :(

kuflash 23.06.2013 16:46

Цитата:

Сообщение от Hauts (Сообщение 1139026)
А у JPEGAsyncEncoder`а нет метода для прерывания?

Вот к сожалению, я его там не обнаружил. Есть какой то метод FinishEncode, но вроде не он.
Если, интересно, то вот сами классы этой библиотеки:
https://dl.dropboxusercontent.com/u/19322412/pfp.zip

Tails 23.06.2013 17:49

Попробуйте запустить своё кодирование через воркер, для прерывания просто убивайте его: terminate()


Часовой пояс GMT +4, время: 07:01.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.