2010-10-19 6 views
1

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? alt text Des idées?As3 et Image ByteArray Data

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.