При изменении вида растрового изображения на уровне пикселов необходимо в первую очередь получить значения цветов пикселов в той области, с которой вы хотите работать. Для получения этих значений используйте метод
getPixel()
.
Метод
getPixel()
возвращает значение RGB по набору координат пиксела x, y, которые передаются как параметр. Если какие-либо пикселы, с которыми вы работаете, содержат прозрачность (альфа-канал), используйте метод
getPixel32()
. Этот метод также возвращает значение RGB, но в отличие от метода
getPixel()
значение, возвращаемое
getPixel32()
, содержит дополнительные данные, представляющие значение альфа-канала (прозрачности) данного пиксела.
Если же вы хотите просто изменить цвет или прозрачность пиксела растрового изображения, воспользуйтесь методом
setPixel()
или
setPixel32()
. Для задания цвета пиксела просто передайте координаты x, y и значение цвета одному из этих методов.
В примере ниже показано, как с помощью метода
setPixel()
нарисовать крестик на зеленом фоне. Затем метод
getPixel()
возвращает значение цвета пиксела с координатами 50, 50 и отрисовывает его.
import flash.display.Bitmap;
import flash.display.BitmapData;
var myBitmapData:BitmapData = new BitmapData(100, 100, false, 0x009900);
for (var i:uint = 0; i < 100; i++)
{
var red:uint = 0xFF0000;
myBitmapData.setPixel(50, i, red);
myBitmapData.setPixel(i, 50, red);
}
var myBitmapImage:Bitmap = new Bitmap(myBitmapData);
addChild(myBitmapImage);
var pixelValue:uint = myBitmapData.getPixel(50, 50);
trace(pixelValue.toString(16));
Если необходимо считать значение группы пикселов, а не отдельного пиксела, следует использовать метод
getPixels()
. Этот метод создает массив байтов из прямоугольной области данных пикселов, передаваемых как параметр. Каждый из элементов массива байтов (иными словами, значений пикселов) является целым числом без знака — 32-битным значением пиксела без множителя.
И наоборот, для изменения (или задания) значения группе пикселов используйте метод
setPixels()
. Этот метод подразумевает наличие двух параметров (
rect
и
inputByteArray
), при сочетании которых получается прямоугольная область (
rect
) данных пикселов (
inputByteArray
).
По мере чтения (и записи) данных из
inputByteArray
для каждого пиксела массива вызывается метод
ByteArray.readUnsignedInt()
. Если по какой-либо причине совокупность значений пикселов в
inputByteArray
не формирует прямоугольник, метод прекращает обработку, когда обнаруживает это.
Не забывайте, что и для получения, и для установки данных пикселов массив байтов должен иметь значения пикселов альфа, красного, зеленого и синего цветов (ARGB) с глубиной цвета 32 бита.
В следующем примере методы
getPixels()
и
setPixels()
используются для копирования группы пикселов из одного объекта BitmapData в другой.
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.utils.ByteArray;
import flash.geom.Rectangle;
var bitmapDataObject1:BitmapData = new BitmapData(100, 100, false, 0x006666FF);
var bitmapDataObject2:BitmapData = new BitmapData(100, 100, false, 0x00FF0000);
var rect:Rectangle = new Rectangle(0, 0, 100, 100);
var bytes:ByteArray = bitmapDataObject1.getPixels(rect);
bytes.position = 0;
bitmapDataObject2.setPixels(rect, bytes);
var bitmapImage1:Bitmap = new Bitmap(bitmapDataObject1);
addChild(bitmapImage1);
var bitmapImage2:Bitmap = new Bitmap(bitmapDataObject2);
addChild(bitmapImage2);
bitmapImage2.x = 110;