|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Feb 2009
Сообщений: 63
|
расчет размера картинки до ее загрузки
для расчета размера картинки провожу следующую процедуру, описанную в нижеследующем коде. Используя URLStream считываю по 5000 байт картинки, данные интерпретируются в Bitmap при помощи Loader-a, пока не станут известны размеры картинки. Еще использую таймер, а не progress потока, для того чтобы считывать данные из потока, не зависимо от того завершилось ли считывание данных в поток
private function calculateSize(){ if (width==0 && height==0){ if (sizeStream) { try {sizeStream.close();} catch (err:Error) {}; sizeStream.removeEventListener(ProgressEvent.PROGRESS, sizeStreamProgressHandler); sizeStream.removeEventListener(Event.COMPLETE, completeHandler); sizeStream = null; } if (sizeLoader) { try {sizeLoader.close();} catch (err:Error) {} try {sizeLoader.unload();}catch (err2:Error) {} sizeLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onSizeCalculator); sizeLoader.contentLoaderInfo.removeEventListener(Event.UNLOAD, ioLUnloadHandler); sizeLoader = null; } sizeStream = new URLStream(); sizeLoader = new Loader(); sizeByteArray = new ByteArray(); sizeStream.addEventListener(ProgressEvent.PROGRESS, sizeStreamProgressHandler); sizeStream.addEventListener(Event.COMPLETE, completeHandler); sizeLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onSizeCalculator); sizeLoader.contentLoaderInfo.addEventListener(Event.UNLOAD, ioLUnloadHandler); sizeTimer = new Timer(100); sizeTimer.addEventListener(TimerEvent.TIMER, loadProgress); try { sizeStream.load(url); } catch (err2:Error){ trace("__calculateSize: "+err2); } } } function parseHeader() { trace("parseHeader "+url.url); trace("version: " + sizeStream.readByte()); } function completeHandler(event:Event){ trace("completeHandler: " + event); // parseHeader(); } function ioLUnloadHandler(e:Event){ trace("unloaded.. "+url.url); sizeLoader.loadBytes(sizeByteArray); } private function sizeStreamProgressHandler(e:ProgressEvent){ sizeStream.readBytes(sizeByteArray, sizeByteArray.length, 5000); sizeLoader.unload(); // sizeLoader.loadBytes(sizeByteArray); sizeTimer.start(); sizeStream.removeEventListener(ProgressEvent.PROGRESS, sizeStreamProgressHandler); } private function loadProgress(e:TimerEvent){ if (sizeBytesAdded){ trace("loading... "+url.url); sizeBytesAdded = false; sizeStream.readBytes(sizeByteArray, sizeByteArray.length, 5000); sizeLoader.unload(); sizeLoader.loadBytes(sizeByteArray); } } private function onSizeCalculator(e:Event){ try{ var tmpBitmap:Bitmap = sizeLoader.content as Bitmap; trace("convert.. "+url.url); if ((tmpBitmap.width==0) || (tmpBitmap.height==0)){ sizeBytesAdded = true; } else{ sizeTimer.stop(); sizeTimer.removeEventListener(TimerEvent.TIMER, loadProgress); sizeTimer = null; if (sizeStream) { try {sizeStream.close();} catch (err:Error) {trace(err)}; sizeStream.removeEventListener(ProgressEvent.PROGRESS, sizeStreamProgressHandler); sizeStream.removeEventListener(Event.COMPLETE, completeHandler); sizeStream = null; } width = tmpBitmap.width; height = tmpBitmap.height; trace("Calculated "+url.url+" "+width+":"+height); this.dispatchEvent(new Event(BitmapNode.CALCULATE_SIZE)); if (sizeLoader) { try {sizeLoader.close();} catch (err:Error) {} try {sizeLoader.unload();}catch (err2:Error) {} sizeLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onSizeCalculator); sizeLoader.contentLoaderInfo.removeEventListener(Event.UNLOAD, ioLUnloadHandler); sizeLoader = null; } sizeByteArray = null; } }catch(e:Error){trace(e)} } - почему алгоритм притормаживает на компе? - почему не всегда срабатывает (либо при локальном запуске, либо при запуске с сервера)? - есть алгоритмы проще? есть пример на сервере, где загружаются 6 картинок, паралельно определяется их размер, по заданному алгоритму: http://reditstudio.ru/tmp/galery.swf |
|
|||||
Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
|
Подтормаживает? Да он тормозит как собака!
Причина, скорее всего – в частых созданиях экземпляра Loader с последующей загрузкой в него данных. Операция достаточно ресурсоёмкая, а если она рпоисходит при загрузке каждых 5 килобайт – тогда всё понятно. А вы не думали грузить сразу Loader-ом? |
|
|||||
Регистрация: Feb 2009
Сообщений: 63
|
эм..
он позволяет узнать размеры до загрузки?) |
|
|||||
Регистрация: Feb 2009
Сообщений: 63
|
)
спасибо, а как же быть с png? |
|
|||||
mrMEM, советую использовать дебаг-версию плеера, ибо там какие-то ошибки полезли. Так я их не запомнил, а второй раз грузить эти тормоза нет никакого желания.
dimarik, очень интересная ссылка, отдельное спасибо.
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
Часовой пояс GMT +4, время: 20:03. |
|
« Предыдущая тема | Следующая тема » |
|
|