Руководство по actionscript. часть 5, стр. 036
Метод getPixels ( ) принимает следующий обобщенный вид:
объектаtmapData. getPi xels(область)
Здесь объектВтtmapData — объект BitmapData, из которого будут возвращаться значения цвета пикселов, а область — объект flash. geom. Rectangle, описывающий область возвращаемых пикселов. Метод getPixels ( ) возвращает объект ByteArray, содержащий 32-битные целочисленные значения цвета. Объект ByteArray — это список значений цвета для пикселов в указанной прямоугольной области, обход которых происходит слева направо и сверху вниз. Например, рассмотрим следующую диаграмму растрового изображения размером 4×4, пикселы которого для простоты обозначены буквами от А до Р:
А В С D Е F G Н I J К L М N О Р
Не забывая, что пиксел левого верхнего угла растрового изображения находится в точке с координатой (0; 0), если мы воспользуемся методом getPixels ( ) для получения значений цвета прямоугольной области пикселов от точки (2; 1) до точки (3; 3), возвращаемый объект ByteArray будет содержать следующие пикселы в таком порядке:
G, Н. К, L, 0. Р
Стоит отметить, что объект ByteArray представляет собой одномерный список и не содержит никакой информации о размерах и позиции прямоугольной области, из которой были получены данные пикселы. Таким образом, чтобы восстановить растровое изображение из пикселов, хранящихся в объекте ByteArray, в том порядке, в котором они находились ранее, мы должны иметь свободный доступ к ширине, высоте и позиции исходного прямоугольника. Информация об исходном прямоугольнике может быть присвоена переменной или даже добавлена в сам объект ByteArray.
Чтобы попрактиковаться в использовании метода get Pixel s ( ), скопируем прямоугольную область из одного растрового изображения в другое изображение. Сначала мы создадим два объекта BitmapData. Первый объект представляет квадрат синего цвета размером 20 х 20 пикселов, а другой — квадрат зеленого цвета размером 30 х 30 пикселов:
var blueSquare:BitmapData = new BitmapData(20. 20. false. OxFFOOOOFF); var greenSquare:BitmapData = new BitmapDataOO. 30. false. OxFFOOFFOO);
Затем мы определяем прямоугольную область пикселов, которую хотим получить из квадрата зеленого цвета. Левый верхний угол прямоугольника находится в точке с координатой (5; 5), а его ширина и высота равна 10 пикселам.
var rectRegion:Rectangle = new Rectangle(5. 5. 10. 10);
Теперь мы получаем пикселы зеленого цвета:
var greenPixels:ByteArray = greenSquare. getPixels(rectRegion);
Чтобы перенести пикселы зеленого цвета на квадрат синего цвета, мы используем метод экземпляра set Pixels ( ) класса BitmapData. Однако перед вызовом метода set Pixel s ( ) мы должны установить указатель файла объекта ByteArray в значение 0, чтобы метод setPixels( ) начал чтение значений цвета пикселов с начала списка:
greenPixels. position = 0;
Теперь мы можем прочитать пикселы из объекта ByteArray greenPixels и сохранить их в объекте BitmapData blueSquare:
blueSquare. setPi xels(rectRegi on. greenPi xels);
Чтобы убедиться, что все работает так, как ожидалось, мы отображаем два растровых изображения на экране:
var blueBmp:Bitmap = new Bitmap(blueSquare); var greenBmp:Bitmap = new Bitmap(greenSquare); addChild(blueBmp); addChild(greenBmp); greenBmp. x = 40;
На рис. 26.5 показаны результаты выполнения предыдущего кода.