픽셀 수준에서 비트맵 이미지의 모양을 바꿀 때에는 먼저 조작할 영역 내에 포함된 픽셀의 색상 값을 확인해야 합니다. 이러한 픽셀 값은
getPixel()
메서드를 사용하여 확인할 수 있습니다.
getPixel()
메서드는 매개 변수로 전달된 x, y(픽셀) 좌표에서 RGB 값을 가져옵니다. 조작하려는 픽셀에 투명도(알파 채널) 정보가 포함된 경우에는
getPixel32()
메서드를 사용해야 합니다. 이 메서드도 RGB 값을 가져오지만
getPixel()
과는 다릅니다.
getPixel32()
에는 선택된 픽셀의 알파 채널(투명도) 값을 나타내는 추가 데이터가 포함되어 있습니다.
또는 비트맵에 포함된 픽셀의 색상이나 투명도만 변경하려는 경우에는
setPixel()
또는
setPixel32()
메서드를 사용할 수 있습니다. 픽셀 색상을 설정하려면 x, y 좌표 및 색상 값을 이러한 메서드 중 하나에 전달하기만 하면 됩니다.
다음 예제에서는
setPixel()
메서드를 사용하여 녹색 BitmapData 배경에 십자가를 그립니다. 그런 다음
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
)가 입력될 때까지 기다린 후 이 둘을 결합하여 픽셀 데이터(
inputByteArray
)의 사각형 영역(
rect
)을 출력합니다.
inputByteArray
에서 데이터를 읽고 기록하면 배열의 각 픽셀에 대해
ByteArray.readUnsignedInt()
메서드가 호출됩니다. 어떤 이유로 인해
inputByteArray
에 픽셀 데이터에 해당하는 전체 사각형이 포함되어 있지 않으면 해당 시점에서 메서드가 이미지 처리를 중단합니다.
픽셀 데이터를 가져오고 설정하려면 바이트 배열이 32비트 알파, 빨강, 녹색, 파랑(ARGB) 픽셀 값이어야 합니다.
다음 예제에서는
getPixels()
및
setPixels()
메서드를 사용하여 픽셀 그룹을 한 BitmapData 객체에서 다른 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;