2009-10-11 7 views
5

Flex 3, ActionScript 3, lecteur Flash 9.Comment effacer une zone dans un objet BitmapData?

J'ai une image dans un objet BitmapData. Et un tableau de points. Je dois effacer la partie de l'image à l'intérieur d'un polygone spécifié par les points. En d'autres termes, dessinez un polygone spécifié par les points et remplissez-le de transparence.

Des idées sur comment cela peut-il être fait?

Répondre

9

obtenu fonctionnant avec le code suivant:

 var shape:Shape = new Shape(); 
     shape.graphics.beginFill(0x000000, 1); // solid black 
     shape.graphics.moveTo(points[0].x, points[0].y); 

     points.forEach(function (p:Point, i:int, a:Array):void { 
       shape.graphics.lineTo(p.x, p.y); 
      }); 
     shape.graphics.endFill(); 
     data.draw(shape, null, null, "erase"); 
+0

+1 C'est un bon. Envisager d'accepter votre propre réponse afin que cette question semble répondu dans les listes. – Amarghosh

+0

Ooohhh ... bien. Je ne savais pas que vous pouviez le faire :-p –

+0

"Non pris en charge par le rendu GPU." - http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BlendMode.html Donc, vous pourriez trouver (comme je l'ai fait) que cette approche ne fonctionne pas pour des cas similaires. – PeteB

1

Pour un rectangle, vous pouvez utiliser fillRect. Pour un polygone, vous devrez dessiner le polygone dans une couleur totalement différente (que les autres couleurs de l'image) et utiliser floodFill - mais je ne sais pas dessiner un polygone. Il n'y a pas de méthode dans la classe de données bitmap pour dessiner des lignes. Une autre option serait d'écrire votre propre logique pour trouver des pixels à l'intérieur du polygone et utiliser la méthode setPixel32 pour mettre leurs alphas à zéro.

Cette wikipedia page décrit des algorithmes pour trouver si un point est à l'intérieur d'un polygone donné. Vous pourriez le trouver utile.

+0

Existe-t-il d'autres options? Comme masquer le polygone. Je suppose que c'est possible, mais je ne sais pas comment – artemb

Questions connexes