![]() |
|
||||||||||
|
|||||
|
Регистрация: Nov 2013
Сообщений: 47
|
Добрый вечер. Вычитал на одном из сайтов такую методику при загрузке изображения. Цитирую один из пунктов: "Loader в дефолтном своем применении порождает утечки памяти. Поэтому если через него загружается картинка, то надо брать её BitmapData и делать bitmapData.clone(), сохраняя в другую переменную. А потом диспозить существующую картинку в Loader, а затем делать loader.unload(). Ещё на всякий случай можно cacheAsBitmap=false."
var bitmapData:BitmapData = (loader.contentLoaderInfo.content as Bitmap).bitmapData.clone(); (loader.content as Bitmap).cacheAsBitmap = false; (loader.content as Bitmap).bitmapData.dispose(); (loader.content as Bitmap).bitmapData = null; (loader.contentLoaderInfo.content as Bitmap).bitmapData = null; loader.unload(); |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Если это окажется правдой (а я так думаю), то можно будет сделать утилиту:
public static function getContent(loader:Loader):BitmapData { var infoContent:Bitmap = loader.contentLoaderInfo.content as Bitmap; var content:Bitmap = loader.content as Bitmap; var bitmapData:BitmapData = content.bitmapData.clone(); content.cacheAsBitmap = false; content.bitmapData.dispose(); content.bitmapData = null; infoContent.bitmapData.dispose(); infoContent.bitmapData = null; loader.unload(); return bitmapData; } |
|
|||||
|
Регистрация: Nov 2013
Сообщений: 47
|
У меня только такой вопрос. Если я загружаю изображение с локального диска, то как мне обратится к лоадеру после загрузки изображения? Ведь к изображению да и к лоадеру я смогу обратится только лишь после того, как будет отработано событие Event.COMPLETE
private function loadCompleteHandler(event:Event):void { var data:ByteArray = _fileReference.data; var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoadCompleteHandler); loader.loadBytes(data); _fileReference = null; } private function imageLoadCompleteHandler(event:Event):void { var image:Bitmap = event.target.content as Bitmap; // Как обратится к лоадеру, как показано в предыдущем посте с кодом } |
|
|||||
|
Регистрация: Nov 2013
Сообщений: 47
|
Попробовал второй вариант. Действительно, как то в голову не пришло, что через event.target доступно св-во loader. Вот финальный результат:
private function imageLoadCompleteHandler(event:Event):void { var bitmapData:BitmapData = (event.target.loader.contentLoaderInfo.content as Bitmap).bitmapData.clone(); (event.target.loader.content as Bitmap).cacheAsBitmap = false; (event.target.loader.content as Bitmap).bitmapData.dispose(); (event.target.loader.content as Bitmap).bitmapData = null; (event.target.loader.contentLoaderInfo.content as Bitmap).bitmapData = null; event.target.loader.unload(); _image = new Bitmap(bitmapData); } |
|
|||||
|
Цитата:
Цитата:
Цитата:
Добавлено через 46 минут P.S. Краткое описание работы с памятью.
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
Верное тут только одно - пользоваться лоадером как дисплей-обжектом - моветон.
лоадер должен грузить, а не показывать. Соответственно во имя богов ООП при любых раскладах надо из лоадера выдрать контент, а сам лоадер пришибать. А вот как его пришибать и как выдирать из него контент - вопрос левый.
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
|
При работе с вк апи я сделаю работу вк апи через жс, и оберну в свои адекватные интерфейсы.
Добавлено через 33 секунды Всмысле социальный враппер будет в жс, а не во флеше. А флеш будет с моим жс общаться а не с вк напрямую.
__________________
Кто к нам с чем для чего - тот у нас того от того. |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:01. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| loader as3 , memory leaks , память |
|
|