2011-01-07 3 views
0

Ich muss einen Füllbereich für etwas Ähnliches wie ein Malbuchbild erkennen können. Der Benutzer klickt in den Bereich, der ausgefüllt werden muss. Das Bild ist ein vom Benutzer erstellter Bitmap-Inhalt und daher muss der Füllbereich zur Laufzeit erkannt werden.Wie erkennen Sie einen Bereich, der in ActionScript 3 in einer Bitmap ausgefüllt werden kann?

<fx:Script> 
    <![CDATA[ 
     protected function myImage_clickHandler(event:MouseEvent):void 
     { 
      myImage.imageDisplay.bitmapData.floodFill(event.localX,event.localY,0xFFFFFF); 
     } 
    ]]> 
</fx:Script> 

<s:Image id="myImage" click="myImage_clickHandler(event)" source="/images/square.gif"/> 
+1

BTW komischen Namen schien zu funktionieren, nur um es Gotta bis 88 aufstehen und dieser Flusskondensator muss voll geladen sein und bereit sein, 1.21 jigawatts :) – shaunhusain

Antwort

2

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html?filter_coldfusion=9&filter_flex=3&filter_flashplayer=10&filter_air=1.5#floodFill%28%29

mouseX und mouseY sind immer die Mausposition einen Klick Zuhörer auf jedes Objekt hinzufügen und verwenden nur die mouseX/mouseY oder auch die event.localX und event.localY für das Objekt des Mouseevent, dass der Hörer angebracht ist zu

<mx:Image id="myImage" click="(myImage.content as Bitmap).bitmapData.floodFill(event.localX,event.localY,0xFFFFFF)" source="http://www.carolynsbloomingcreations.com/images/square.gif"/> 

Hier eine Lösung ist, wenn Sie den Flex 4.5 Helden Rahmen sonst verwenden konnte ich nicht einen Griff auf der bitmapdata durch die Bitmap, die oben genannte Lösung funktioniert auch mit Flex 3 oder 4 nach wie vor erhalten:

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:local="*"> 
    <s:layout> 
     <s:VerticalLayout/> 
    </s:layout> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 

    <!-- 
    <mx:Image 
     id="myImage" 
     click="(myImage.content as Bitmap).bitmapData.floodFill(event.localX,event.localY,0xFFFFFF)" 
     source="http://www.carolynsbloomingcreations.com/images/square.gif"/> 
    --> 
    <fx:Script> 
     <![CDATA[ 
      private function handleClick(event:MouseEvent):void 
      { 
       trace('test'); 
       var tempData:BitmapData = new BitmapData(myBitmapImage.width,myBitmapImage.height); 
       tempData = myBitmapImage.bitmapData; 

       var localPoint:Point = container.globalToLocal(new Point(mouseX,mouseY)); 
       tempData.floodFill(localPoint.x,localPoint.y,0xFFFFFFFF); 
       myBitmapImage.source = tempData; 
       trace(localPoint.x + ":" + localPoint.y); 
      } 
     ]]> 
    </fx:Script> 
    <s:Group 
     id="container" 
     click="handleClick(event)"> 
     <s:BitmapImage 
      id="myBitmapImage" 
      source="@Embed('square.gif')" /> 
    </s:Group> 


</s:Application> 

obwohl sie die bitmapdata im 4.5 Framework ausgesetzt nur gelesen hat, aber so hatte ich es zu kopieren und neu ordnen es die Quelle, die

+0

großer scott! die Antwort auf meine Gebete! Ich muss fragen, gibt es eine Chance, dass dies nicht mit Funken Bildkomponente funktioniert? Ich muss flex 4 verwenden. Ich habe den Code eingefügt, den ich oben verwende. –

+1

Ich bin mir nicht sicher, ob das Spark Image BitmapData hat, da es Inhalt ist, lass es mich ausprobieren, kompiliert in Flex 4, aber benutze ein mx: Image eine Minute. – shaunhusain

+1

Okay, ich habe gerade etwas damit herumgespielt und was ich gefunden habe, ist _bitmapData als private Variable innerhalb von s: BitmapImage, aber es ist nicht zugänglich in der 4.0 Version entsprechend den Dokumenten, die im Hero SDK verfügbar sind, also greife ich das jetzt und versuche es ... das obige funktioniert auch in 4.0 obwohl – shaunhusain

2

Es klingt wie Sie nach einem Flood Fill Algorithmus suchen.

+0

Awesome. Genau das versuche ich! –

Verwandte Themen