|
|
|||||
[+1.3 08.12.11]
Регистрация: Nov 2010
Сообщений: 22
|
Динамическая загрузка картинок
Привет всем,
Подскажите новичку, каким образом более эффективно загрузить в контейнер картинки из локальной папки. Попытался сделить "в лоб": 1) читаю содержимое папки 2) в цикле динамически создаю объекты Image (1..N), N > 50 3) вызываю метод imageN.load(file) 4) addChild(imageN) Вроде бы все грузится и отображается, но со значительной задержкой и появляется ошибка нехватки памяти при увеличении числа картинок, что, в общем-то, и понятно. А как сдалать иначе пока не соображу? Грузить через BitmapData и выводить Bitmap? Но проблема, мне кажется, не решится. Буду рад любой помощи или совету. Заранее спасибо. |
|
|||||
Регистрация: May 2009
Сообщений: 25
|
я через flash.display.Loader() гружу. вроде всё достаточно шустро.
import flash.display.Loader; import flash.net.URLRequest; import flash.display.Bitmap; var imgLoader: Loader; var img: Bitmap; imgLoader = new Loader(); imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); imgLoader.load(new URLRequest("image.jpg")); function onComplete(e:Event):void { img = Bitmap(imgLoader.content); } |
|
|||||
Тогда не пойму ничего. В предоставленном коде нет ничего что может тормозить.
|
|
|||||
Я бы наверное обратил внимание на вот сюда
Цитата:
Цитата:
Цитата:
|
|
|||||
[+1.3 08.12.11]
Регистрация: Nov 2010
Сообщений: 22
|
Спасибо всем, кто откликнулся
Привожу начальный вариант метода: private function _showImages(con:IVisualElementContainer, path:String): void { // преднастроенная корневая папка var appDir:File = pref.getFolder(); // path - относительный путь от корневой папки var photoDir:File = appDir.resolvePath(path); var arr:Array; arr = photoDir.getDirectoryListing(); for (var i:int=0; i < arr.length; i++) { var img:Image = new Image(); img.load( File(arr[i]).url ); img.width=100; img.height=100; img.scaleX = 1; img.scaleY = 1; con.addElement(img); } } Как я уже говорил грузится долго на компе с 2гб ОЗУ. Переделал метод по другому: private function _showImages(con:IVisualElementContainer, path:String): void { var appDir:File = pref.getFolder(); var photoDir:File = appDir.resolvePath(path); var arr:Array; arr = photoDir.getDirectoryListing(); for (var i:int=0; i < arr.length; i++) { var imgLoader: Loader = new Loader(); imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); imgLoader.load(new URLRequest(File(arr[i]).url)); } function onComplete(e:Event):void { var bmp: Bitmap; var img: Bitmap; var spr: SpriteVisualElement = new SpriteVisualElement(); img = e.target.content as Bitmap ; img.width=100; img.height=100; spr.width = 100; spr.height = 100; spr.addChild( img ); con.addElement(spr); } } то, что визуально бросилось в глаза сразу. Второй момент, можно ли как-то использовать только один объект Loader, вынеся его создание за тело цикла. Попробовал сам, но опять наткнулся на грабли - выводится только одна картинка из папки. Буду рад любым комментариям или советам, Заранее спасибо |
|
|||||
Регистрация: May 2009
Сообщений: 25
|
народ кажется спутал мой пример кода загрузки картинки с кодом топикстартера))
Цитата:
|
|
|||||
[+1.3 08.12.11]
Регистрация: Nov 2010
Сообщений: 22
|
Slip_91
Попробовал изменить код: ... var imgLoader: Loader = new Loader(); // imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); for (var i:int=0; i < arr.length; i++) { imgLoader.unload(); imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); imgLoader.load(new URLRequest(File(arr[i]).url)); ... |
|
|||||
Регистрация: May 2009
Сообщений: 25
|
да много может вариантов.
возможно, обработчик onComplete просто не успевает выполнится до того, как в imgLoader передаётся новая картинка. таким образом получается, что отображается только последняя. |
Часовой пояс GMT +4, время: 19:25. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|