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

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

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

Регистрация: Mar 2010
Сообщений: 18
По умолчанию Работа с альфа-каналом Bitmapdata с высокой производительностью

Всем доброго дня.

Мне нужно получить BitmapData, залитую одним цветом, чтоб она вся была полупрозрачной, а в некоторых местах чтоб в ней были полностью прозрачные "дыры" произвольной формы, с "мягкими" краями. И чтоб можно было программно управлять видом и положением этих дыр. Всё это нужно делать каждый кадр, а стало быть нужно делать быстро.
Размер BitmapData 600 на 500 пикселей. Она впоследствии будет с помощью copyPixels накладываться с прозрачностью на другую BitmapData. Это всё - часть программы визуализации на основе блиттинга.

Я пробовал сделать так.
  • создаю bd:BitmapData с поддержкой прозрачности и заливаю её желаемым цветом с желаемой прозрачностью всей итоговой BitmapData
  • создаю alpha_bd:BitmapData без поддержки прозрачности и заливаю ее цветом, в котором синяя и зеленая составляющие равны 0, а красная равна желаемой прозрачности всей итоговой BitmapData
Потом каждый кадр:
  • заливаю bd и alpha_bd теми же цветами с помощью fillRect
  • у меня есть массив с координатами и BitmapData-ми "дыр". BitmapData дыры вся черная и с альфа-каналом в форме дыры. Для каждой дыры:
    • с помощью copyPixels копирую "дыру" на alpha_bd в нужном месте
    • с помощью copyChannel копирую красный канал alpha_bd в альфа-канал bd, только в прямоугольнике, который изменился после наложения "дыры".
Готово! bd имеет нужный мне вид и готова к дальнейшему использованию.

Только производительность падает. Судя по моим измерениям, самое медленное место - copyChannel.

Подскажите пожалуйста, как можно сделать это всё быстрее?

Насколько я понимаю, существуют фреймворки, которые реализуют что-то подобное, но если это возможно, хотелось бы обойтись без них - весь остальной код уже написал сам и хочется всё сделать самому)

Спасибо!


Последний раз редактировалось romzes; 09.12.2012 в 15:23.
Создать новую тему   Часовой пояс GMT +4, время: 21:18.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
bitmapdata , copyChannel , производительность

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

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


 


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


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