|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Торможение интерфейса Loader/BitmapData.draw
Всем привет!
Что делается: грузится в цикле набор больших картинок(2500px+) для галереи, с асинхронной загрузкой(loaderContext.imageDecodingPolicy = ImageDecodingPolicy.ON_LOAD то есть вроде все как надо. Затем из этих больших картинок на лету создаются мелкие превьюшки раза в 3-4 меньше оригинала и сохраняются в памяти как BitmapData Проблем: Картинки действительно грузятся уже после появления контейнеров на экране, но во время загрузки все равно наблюдается "заморозка" интерфейса, или попросту говоря "лаги". Вопрос в том действительно ли это проблема загрузчика и асинхронная загрузка не справляется с задачей или тормоза появляются на этапе создания превью? И если второе то как понизить приоритет функции создания BitmapData и BitmapData.draw() чтобы избежать торможения интерфейса? Спасибо!
__________________
uglan |
|
|||||
Смотрите, "асинхронная" операция загрузки на самом деле состоит из 2 частей:
1) загрузка (ждем пока к нам по сети придут все байты от сервера) 2) преобразование (мы берем байты и делаем из них уже пиксели, если так можно сказать) Операция 2 - синхронная. То есть начали, и пока не закончили ресурсы системе не возвращаем. Очевидно, что для больших картинок (а Ваши картинки можно назвать большими) вторая операция может сильно сказываться на производительности.
__________________
...вселенская грусть |
|
|||||
Цитата:
Цитата:
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 |
|
|||||
Действительно... Но тем не менее остается еще одна синхронная операция по уменьшению оригинала. Я уж думал не использовать ли мне atf энкодер и atf формат вместо png. Из atf вроде можно мипмэп получить что уже само по себе является уменьшенной копией. Только он вроде только кратные размеры поддерживает.
__________________
uglan |
|
|||||
Можете попробовать получать уменьшенную копию с помощью ShaderJob.
Вот пример. Правда, асинхронность не прикручена. (увы, не могу быть уверен в том, что асинхронность шейдерджоба работает вне AIR)
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ" Мои ачивки: художник-паразит. |
|
|||||
Цитата:
http://support.kurchenko.ru/test_shaderJob.html битмапдата из библиотеки, 4000+ пикселей. Флаг асинхронности в моем случае установлен в false(впрочем разницы никакой), AIR3.2. Не помогло в общем
__________________
uglan |
Часовой пояс GMT +4, время: 11:06. |
|
« Предыдущая тема | Следующая тема » |
Теги |
bitmapdata , ImageDecodingPolicy , loaderContext , тормозит |
Опции темы | |
Опции просмотра | |
|
|