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

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

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

Регистрация: Jul 2012
Сообщений: 148
По умолчанию Постепенная сборка изображения

Есть битмапа огромного размера, над ней нужно провести ряд преобразований с помощью фильтров и сохранить в картинку на локальном диске. Собрал тестовый вариант и прибалдел от загрузки ЦП.

Понимаю, что надо дробить картинку на битмапы меньшего размера, с которыми и работать.
Не понимаю как собрать куски bitmapdatа-ы в один большой?


Код AS3:
for (var $y:int = 0; $y < Math.floor(mc.height / block); $y++) {
	for (var $x:int = 0; $x < Math.floor(mc.width / block); $x++) {
		var bitmapdata = new BitmapData(block,block,true,0xFFFFFF);
			bitmapdata.draw(mc, new Matrix(1, 0, 0, 1, -$x * block, -$y * block), null, null, null, true);
	}
}
Разбивка на куски:
Изображения
 


Последний раз редактировалось Vlad84; 05.06.2015 в 18:39.
Старый 05.06.2015, 18:58
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 2  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Цитата:
Не понимаю как собрать куски bitmapdatа-ы в один большой?
Создаёте большую битмапДату, и в цикле пробегаетесь по маленьким битмапДатам и копируете из них пиксели (copyPixels) в большую. В методе copyPixels есть параметр, обозначающий в какую область копировать пиксели.

Старый 05.06.2015, 19:25
Vlad84 вне форума Посмотреть профиль Отправить личное сообщение для Vlad84 Найти все сообщения от Vlad84
  № 3  
Ответить с цитированием
Vlad84

Регистрация: Jul 2012
Сообщений: 148
А чем copyPixels принципиально отличается от метода draw?

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
1) тем, что draw врисует любой объект IDrawable, а copyPixels может только из BitmapData копировать
2) copyPixels может выбрать любой участок изображения без лишних заморочек, не требуя никаких матриц

Старый 05.06.2015, 20:27
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 5  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
3) так же copyPixels работает очень быстро.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Ну draw тоже достаточно шустрый метод

Старый 05.06.2015, 20:41
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 7  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Кстати, не уверен, что применение разных фильтров на маленькие кусочки дадут ожидаемый результат в конечной сборке в единое изображение, наверно появятся швы.
И почему-то есть подозрение, что разбивка не даст прирост в производительности.. Но надо конечно тестировать.

Старый 05.06.2015, 21:27
meiciuc вне форума Посмотреть профиль Отправить личное сообщение для meiciuc Найти все сообщения от meiciuc
  № 8  
Ответить с цитированием
meiciuc

Регистрация: Nov 2005
Сообщений: 149
1. зачем предварительно разбивать на куски большой битмап, если все равно над всеми кусками придется выполнять различные действия? Как это может положительно сказаться на производительности?
2. после применения фильтров к кускам, действительно, велика вероятность, что появятся швы
3. в данном случае draw будет быстрее, чем copyPixel - ведь во втором случае метод будет заключен в довольно медленный (и огромный!) цикл
4. а почему загрузка проца критична? И если все-таки критична, может, в сторону шейдеров посмотреть?
5. если дело в том, что приложение во время выполнения работы подвисает, может распределить применение фильтров по-времени?

Старый 05.06.2015, 21:55
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 9  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
meiciuc, в твоем комментарии ответ на пункт 1 раскрывается в пункте 5.
Про огромный цикл я не понял — есть же аргумент sourceRect.

Что касается неоднократно упомянутых швов, то их можно полностью избежать, если применять всякие blur/displace к тайлу с полями. С одной стороны это безусловно увеличит время обработки, с другой — это решение.
__________________
Поймай яблоко 2!

Старый 05.06.2015, 22:02
meiciuc вне форума Посмотреть профиль Отправить личное сообщение для meiciuc Найти все сообщения от meiciuc
  № 10  
Ответить с цитированием
meiciuc

Регистрация: Nov 2005
Сообщений: 149
Цитата:
Сообщение от Zebestov Посмотреть сообщение
meiciuc, в твоем комментарии ответ на пункт 1 раскрывается в пункте 5.
не совсем. Я имел ввиду, что если фильтров несколько, то их можно применить последовательно через какой-нибудь таймаут. Применить к оригинальной картинке - не нарезая ее.
Цитата:
Сообщение от Zebestov Посмотреть сообщение
meiciuc
Что касается неоднократно упомянутых швов, то их можно полностью избежать, если применять всякие blur/displace к тайлу с полями. С одной стороны это безусловно увеличит время обработки, с другой — это решение.
Конечно, можно усложнить себе задачу - применять фильтры к кусочкам с бордерами. Я только так и не понял - зачем? Каким образом нарезка большой картинки с последующим сшиванием может увеличить скорость преобразования этой картинки?

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

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

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


 


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


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