2009-10-11 16 views
5

Flex 3, ActionScript 3, Flash player 9.Come cancellare un'area in un oggetto BitmapData?

Ho un'immagine in un oggetto BitmapData. E una serie di punti. Ho bisogno di cancellare la parte dell'immagine all'interno di un poligono specificato dai punti. In altre parole, disegna un poligono specificato dai punti e riempilo di trasparenza.

Qualche idea su come può essere fatto?

risposta

9

ottenuto che funziona con il seguente codice:

 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 Questo è buono. Considera di accettare la tua risposta in modo che questa domanda venga visualizzata nelle inserzioni. – Amarghosh

+0

Ooohhh ... bello. Non sapevo che potessi farlo :-p –

+0

"Non supportato dal rendering GPU." - http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BlendMode.html Quindi potresti trovare (come ho fatto) che questo approccio non funzioni per casi simili. – PeteB

1

Per un rettangolo, è possibile utilizzare fillRect. Per un poligono devi disegnare il poligono in un colore completamente diverso (rispetto ad altri colori nella bitmap) e usare floodFill - ma non so come disegnare un poligono. Non esiste alcun metodo nella classe di dati bitmap per disegnare linee. Un'altra opzione sarebbe quella di scrivere la propria logica per trovare i pixel all'interno del poligono e utilizzare il metodo setPixel32 per impostare i loro alfa a zero.

Questo wikipedia page descrive gli algoritmi per trovare se un punto si trova all'interno di un dato poligono. Potresti trovarlo utile

+0

Ci sono altre opzioni? Come mascherare il poligono. Immagino sia possibile, solo non so come – artemb

Problemi correlati