Comment puis-je obtenir les données bytearray à partir d'une image sous une certaine forme, par exemple une circule ou un carré? Disons que je veux modifier SEULEMENT le pixel à l'intérieur de cette circule, comment puis-je obtenir les données de Bytearray? Des idées?As3 et Image ByteArray Data
1
A
Répondre
2
Définissez un rectangle contenant le cercle, par rapport au coin supérieur gauche de l'image.
var radius:Number = 100;
var centerX:Number = 50;
var centerY:NUmber = 400;
var rect:Rectangle = new Rectangle(centerX-radius, centerY-radius, radius*2, radius*2);
Ensuite, utilisez le getPixels()
pour retourner un ByteArray
des pixels à l'intérieur du rectangle. Maintenant, vous pouvez parcourir chaque pixel et vérifier s'il est contenu dans le cercle.
var image:BitmapData;
var pixels:ByteArray = image.getPixels(rect);
for(var x:int; x<rect.width; x++){
for(var y:int=0; y<rect.height; y++){
// Read the pixels data ->
var pixel:uint = pixels.readUnsignedInt();
// Check this pixels distance from the center to make sure it is inside the circle.
var dx:Number = x - radius;
var dy:Number = y - radius;
if(dx*dx+dy*dy <= radius*radius){
// This pixel is inside the circle.
...
}
}
}
Ensuite, une fois que vous avez modifié si vous voulez, vous pouvez l'écrire de nouveau à l'image en utilisant setPixels()
image.setPixels(rect, pixels);
Je n'ai pas réellement utilisé ou testé tout cela, il pourrait donc pas fonctionner .
Il peut également être plus facile de travailler avec les données si vous utilisez getVector()
et setVector()
à la place.