2011-01-07 28 views
0

我需要能夠檢測類似於圖畫書圖片的填充區域。用戶將點擊需要填充的區域。該圖像是用戶創建的位圖內容,因此必須在運行時檢測填充區域。如何檢測可以在ActionScript 3中的位圖中填充的區域?

<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有趣的名字來源,只想把它高達88閱讀並且那個助焊劑電容器必須完全充電並且您準備好去1.21 jigawatts :) – shaunhusain 2011-01-07 03:28:22

回答

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和mouseY的總是鼠標的位置添加一個點擊監聽到任何對象,只是使用mouseX/mouseY的,否則的MouseEvent的event.localX和event.localY爲對象的偵聽器附加到

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

這裏有一個解決方案,如果你,否則我無法通過的BitmapImage得到的位圖數據的句柄使用Flex 4.5英雄框架,上述方案也仍然有效使用Flex 3或4:

<?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> 

即使他們暴露的位圖數據在4.5框架,它是唯一的,雖然,所以我不得不把它複製,並重新分配給似乎工作

+0

偉大的斯科特!我祈禱的答案!我不得不問,有沒有機會這與火花圖像組件無效?我必須使用flex 4.我粘貼了上面使用的代碼。 – 2011-01-07 04:09:33

2

這聽起來像你正在尋找一個Flood Fill算法。

+0

真棒。這正是我想要做的! – 2011-01-07 03:39:10

相關問題