BitmapData.draw()
делает снимок заданного объекта, удаляя все преобразования и фильтры, примененные на сцене. Результирующее изображение показывает объект в том виде, в каком он присутствует в вашей библиотеке фильмов.
Существует два основных варианта рисования экранных объектов с преобразованиями и / или фильтрами.
- Вы можете применить все преобразования во время рисования с параметром матрицы для
BitmapData.draw()
. После рисования вы можете применить фильтры к полученному растровому изображению с помощью BitmapData.applyFilter()
.
- Просто нарисуйте родительский контейнер, а не сам объект.
Я обычно выбираю последнее. Это довольно просто. Есть некоторые недостатки: если вы выбираете второй метод, ваша цель должна иметь родительский список отображения, и вы можете рисовать нежелательный контент, который находится в родительском контейнере. (Однако эти недостатки легко устраняются.)
// bounds and size of parent in its own coordinate space
var rect:Rectangle = target.parent.getBounds(target.parent);
var bmp:BitmapData = new BitmapData(rect.width, rect.height, true, 0);
// offset for drawing
var matrix:Matrix = new Matrix();
matrix.translate(-rect.x, -rect.y);
// Note: we are drawing parent object, not target itself:
// this allows to save all transformations and filters of target
bmp.draw(target.parent, matrix);