Всем доброго дня.
Мне нужно получить 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.
Подскажите пожалуйста, как можно сделать это всё быстрее?
Насколько я понимаю, существуют фреймворки, которые реализуют что-то подобное, но если это возможно, хотелось бы обойтись без них - весь остальной код уже написал сам и хочется всё сделать самому)
Спасибо!