Pour modifier une image bitmap au niveau des pixels, il est d’abord nécessaire d’obtenir les valeurs colorimétriques des pixels de la zone à modifier. La méthode
getPixel()
permet d’obtenir ces valeurs de pixels.
La méthode
getPixel()
renvoie les valeurs RVB des coordonnées (de pixels) x et y qui lui sont passées en paramètres. Si l’un des pixels comporte des informations de transparence (canal alpha), il est nécessaire d’utiliser la méthode
getPixel32()
. Cette méthode récupère également une valeur RVB, mais contrairement à ce qui se passe avec
getPixel()
, la valeur renvoyée par
getPixel32()
contient des données supplémentaires qui représentent la valeur du canal alpha (transparence) du pixel sélectionné.
Pour simplement modifier la couleur ou la transparence d’un pixel contenu dans un bitmap, il est aussi possible d’utiliser la méthode
setPixel()
ou
setPixel32()
. Pour définir la couleur d’un pixel, il suffit de passer les coordonnées x et y et la valeur colorimétrique à l’une de ces méthodes.
Dans l’exemple suivant,
setPixel()
est utilisée pour tracer une croix sur un fond vert BitmapData. La méthode
getPixel()
permet ensuite de récupérer la valeur colorimétrique du pixel ayant les coordonnées 50, 50 et de suivre la valeur renvoyée.
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));
Pour lire la valeur d’un groupe de pixels, et non pas d’un pixel isolé, utilisez la méthode
getPixels()
. Cette méthode génère un tableau d’octets à partir d’une zone rectangulaire de données de pixels, et le passe en paramètre. Chaque élément du tableau d’octets (autrement dit, les valeurs des pixels) est un entier non signé (valeurs non multipliées sur 32 bits).
Inversement, pour modifier (ou définir) la valeur d’un groupe de pixels, utilisez la méthode
setPixels()
. Cette méthode attend deux paramètres (
rect
et
inputByteArray
), qui sont combinés pour produire une zone rectangulaire (
rect
) de données de pixels (
inputByteArray
).
Au fur et à mesure de la lecture (ou de l’écriture) des données dans
inputByteArray
, la méthode
ByteArray.readUnsignedInt()
est appelée pour chaque pixel du tableau. Si pour une raison quelconque
inputByteArray
ne contient pas un rectangle complet de données de pixels, la méthode interrompt le traitement des données de l’image.
Il est important de comprendre que pour lire ou modifier des données de pixels, le tableau d’octets attend les valeurs suivantes sur 32 octets : alpha, rouge, vert, bleu (ARVB).
L’exemple suivant utilise les méthodes
getPixels()
et
setPixels()
pour copier un groupe de pixels d’un objet BitmapData à un autre :
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;