Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.12.2012, 14:47
uglan вне форума Посмотреть профиль Отправить личное сообщение для uglan Посетить домашнюю страницу uglan Найти все сообщения от uglan
  № 1  
Ответить с цитированием
uglan

Регистрация: Mar 2003
Адрес: moscow
Сообщений: 102
Отправить сообщение для uglan с помощью ICQ Отправить сообщение для uglan с помощью Skype™
Question Торможение интерфейса Loader/BitmapData.draw

Всем привет!

Что делается: грузится в цикле набор больших картинок(2500px+) для галереи, с асинхронной загрузкой(loaderContext.imageDecodingPolicy = ImageDecodingPolicy.ON_LOAD то есть вроде все как надо. Затем из этих больших картинок на лету создаются мелкие превьюшки раза в 3-4 меньше оригинала и сохраняются в памяти как BitmapData

Проблем: Картинки действительно грузятся уже после появления контейнеров на экране, но во время загрузки все равно наблюдается "заморозка" интерфейса, или попросту говоря "лаги". Вопрос в том действительно ли это проблема загрузчика и асинхронная загрузка не справляется с задачей или тормоза появляются на этапе создания превью? И если второе то как понизить приоритет функции создания BitmapData и BitmapData.draw() чтобы избежать торможения интерфейса?

Спасибо!
__________________
uglan

Старый 10.12.2012, 15:00
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 2  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Не проще ли привьюшки отдельными картинками хранить, а не отрисовывать с больших в рантайме?
__________________
hauts.ru

Старый 10.12.2012, 15:01
DaFive вне форума Посмотреть профиль Отправить личное сообщение для DaFive Посетить домашнюю страницу DaFive Найти все сообщения от DaFive
  № 3  
Ответить с цитированием
DaFive
 
Аватар для DaFive

Регистрация: May 2008
Адрес: {0,0}
Сообщений: 754
Записей в блоге: 1
Отправить сообщение для DaFive с помощью ICQ
А как они создаются-то? Вряд ли асинхронная загрузка тому причина. Скорее синхронная операция вида draw или еще чего-то.
__________________
Кодинг, багинг, алгоритминг. me @

Старый 10.12.2012, 15:34
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 4  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Смотрите, "асинхронная" операция загрузки на самом деле состоит из 2 частей:
1) загрузка (ждем пока к нам по сети придут все байты от сервера)
2) преобразование (мы берем байты и делаем из них уже пиксели, если так можно сказать)

Операция 2 - синхронная. То есть начали, и пока не закончили ресурсы системе не возвращаем. Очевидно, что для больших картинок (а Ваши картинки можно назвать большими) вторая операция может сильно сказываться на производительности.
__________________
...вселенская грусть

Старый 10.12.2012, 15:51
uglan вне форума Посмотреть профиль Отправить личное сообщение для uglan Посетить домашнюю страницу uglan Найти все сообщения от uglan
  № 5  
Ответить с цитированием
uglan

Регистрация: Mar 2003
Адрес: moscow
Сообщений: 102
Отправить сообщение для uglan с помощью ICQ Отправить сообщение для uglan с помощью Skype™
Цитата:
Не проще ли привьюшки отдельными картинками хранить, а не отрисовывать с больших в рантайме?
Мне нужно чтобы размер проекта был "чем меньше тем лучше" и флешка может изменяться в размерах, то есть хранить превьюшки в адекватном качестве под каждое разрешение получится тяжело, поэтому и генерю на лету из оригиналов.
Цитата:
А как они создаются-то?Вряд ли асинхронная загрузка тому причина. Скорее синхронная операция вида draw или еще чего-то
Код AS3:
var imageLoader:Loader = Loader(e.target.loader);
var bm:Bitmap = Bitmap(imageLoader.content);
 
var Hires:BitmapData = new BitmapData(bm.width,bm.height,true,0x0);
Hires.draw(bm);
 
var LoRes:BitmapData = new BitmapData(bm.width>>2,bm.height>>2,true,0x0);
LoRes.draw(bm,new Matrix(0.25,0,0,0.25,0,0));
 
var previewBMP:Bitmap = new Bitmap(LoRes);
 
previewBMP.width = _w;
previewBMP.height = _h;
previewBMP.x = _x;
previewBMP.y = _y;
previewBMP.smoothing = true;
А можно как то назначить асинхронность этому процессу?
__________________
uglan

Старый 10.12.2012, 16:05
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 6  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
а почему не так:
Код AS3:
var hiRes:BitmapData = bm.bitmapData;
М? Вы на самом деле лишний раз копируете большую картинку без какой-либо цели
__________________
...вселенская грусть

Старый 10.12.2012, 16:41
uglan вне форума Посмотреть профиль Отправить личное сообщение для uglan Посетить домашнюю страницу uglan Найти все сообщения от uglan
  № 7  
Ответить с цитированием
uglan

Регистрация: Mar 2003
Адрес: moscow
Сообщений: 102
Отправить сообщение для uglan с помощью ICQ Отправить сообщение для uglan с помощью Skype™
Действительно... Но тем не менее остается еще одна синхронная операция по уменьшению оригинала. Я уж думал не использовать ли мне atf энкодер и atf формат вместо png. Из atf вроде можно мипмэп получить что уже само по себе является уменьшенной копией. Только он вроде только кратные размеры поддерживает.
__________________
uglan

Старый 10.12.2012, 17:16
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 8  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Можете попробовать получать уменьшенную копию с помощью ShaderJob.
Вот пример. Правда, асинхронность не прикручена.
(увы, не могу быть уверен в том, что асинхронность шейдерджоба работает вне AIR)
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

Старый 11.12.2012, 20:13
uglan вне форума Посмотреть профиль Отправить личное сообщение для uglan Посетить домашнюю страницу uglan Найти все сообщения от uglan
  № 9  
Ответить с цитированием
uglan

Регистрация: Mar 2003
Адрес: moscow
Сообщений: 102
Отправить сообщение для uglan с помощью ICQ Отправить сообщение для uglan с помощью Skype™
Цитата:
Можете попробовать получать уменьшенную копию с помощью ShaderJob.
Вот пример.
Ммм...Интересный класс! Спасибо. Но, к сожалению, в моем случае он почему то не работает. Пример полностью с сайта в своей интерпретации выложил тут:
http://support.kurchenko.ru/test_shaderJob.html
битмапдата из библиотеки, 4000+ пикселей. Флаг асинхронности в моем случае установлен в false(впрочем разницы никакой), AIR3.2.
Код AS3:
job.start(false); // true flag runs the job synchronously.
Не помогло в общем
__________________
uglan

Создать новую тему Ответ Часовой пояс GMT +4, время: 12:32.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
bitmapdata , ImageDecodingPolicy , loaderContext , тормозит
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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