Ao alterar a aparência de uma imagem de bitmap no nível de pixel, você primeiro precisa obter os valores de cores dos pixels contidos dentro da área que deseja manipular. Use o método
getPixel()
para ler esses valores de pixel.
O método
getPixel()
recupera um valor RGB a partir de um conjunto de coordenadas x, y (pixel) transmitidas como parâmetros. Se qualquer um dos pixels que você deseja manipular incluir informações sobre transparência (canal alfa), será necessário usar o método
getPixel32()
. Esse método também recupera um valor RGB, mas diferente de
getPixel()
, o valor retornado por
getPixel32()
contém dados adicionais que representam o valor do canal alfa (transparência) do pixel selecionado.
Como alternativa, se você quiser simplesmente alterar a cor ou a transparência de um pixel contido em um bitmap, poderá usar o método
setPixel()
ou
setPixel32()
. Para definir uma cor de pixels, transmita simplesmente as coordenadas x, y e o valor da cor para um desses métodos.
O exemplo a seguir usa o método
setPixel()
para desenhar uma cruz em um plano de fundo BitmapData verde: Ele então usa
getPixel()
para recuperar o valor da cor do pixel nas coordenadas 50, 50 e liga o valor retornado.
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));
Se você quiser ler o valor de um grupo de pixels, use o método
getPixels()
. Esse método gera uma matriz de bytes a partir de uma região retangular dos dados de pixels que são transmitidos como um parâmetro. Cada um dos elementos da matriz de bytes (em outra palavras, os valores de pixel) são valores de pixel inteiros não assinados de 32 bits e não multiplicados.
Inversamente, para alterar (ou definir) o valor de um grupo de pixels, use o método
setPixels()
. Esse método espera dois parâmetros (
rect
e
inputByteArray
), que são combinados para resultar em uma região retangular (
rect
) dos dados de pixel (
inputByteArray
).
Como os dados são lidos (e gravados) fora de
inputByteArray
, o método
ByteArray.readUnsignedInt()
é chamado para cada um dos pixels na matriz. Se, por alguma razão,
inputByteArray
não contiver pelo menos um retangular inteiro de dados de pixel, o método interromperá o processamento dos dados da imagem naquele ponto.
É importante lembrar que, para obter e configurar dados de pixel, a matriz de byte espera valores de pixel vermelho, verde, azul e alfa de 32 bits (ARGB).
O exemplo a seguir usa os métodos
getPixels()
e
setPixels()
para copiar um grupo de pixels de um objeto BitmapData para outro:
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;