2009-10-11 11 views
5

Flex 3, ActionScript 3, Flash player 9.Jak usunąć obszar w obiekcie BitmapData?

Mam obraz w obiekcie BitmapData. I szereg punktów. Chcę usunąć część obrazu wewnątrz wielokąta określonego przez punkty. Innymi słowy, narysuj wielokąt określony przez punkty i wypełnij go przezroczystością.

Jakieś pomysły na to, jak można to zrobić?

Odpowiedz

9

Got to praca z następującego kodu:

 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 To jest dobre. Rozważ zaakceptowanie własnej odpowiedzi, aby na pytanie to pojawiło się w listach. – Amarghosh

+0

Ooohhh ... miło. Nie wiedziałem, że możesz to zrobić :-p –

+0

"Nieobsługiwane w ramach renderowania GPU." - http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BlendMode.html Możesz więc znaleźć (tak jak ja), że to podejście nie działa w podobnych przypadkach. – PeteB

1

Dla prostokąta można użyć fillRect. W przypadku wielokąta będziesz musiał narysować wielokąt w zupełnie innym kolorze (niż inne kolory w bitmapie) i użyć funkcji floodFill - ale nie wiem, jak narysować wielokąt. W klasie danych bitmap nie ma metody do rysowania linii. Inną opcją byłoby napisanie własnej logiki w celu znalezienia pikseli wewnątrz wielokąta i użycie metody setPixel32 do ustawienia ich alphasów na zero.

Opisuje ona algorytmy ustalania, czy punkt znajduje się w danym wielokącie. Może się przydać.

+0

Czy są jakieś inne opcje? Podobnie jak maskowanie wielokąta. Sądzę, że to możliwe, po prostu nie wiem, jak – artemb

Powiązane problemy