2010-04-12 53 views
2

在Flash Builder(flex 4)中,我嘗試使用下一個代碼將用戶(來自文件系統)的圖像設置爲重複背景。它與mx:Image一起工作,但我想使用s:BitmapFill的很酷的repbiletis。如何動態設置s:BitmapFill的來源? (Flash Builder,Code Inside)

BTW:技術我用也不適用於S:BitmapImage。此外,FP不會返回任何錯誤。我該如何處理我的代碼才能使其工作?

<?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" 
       xmlns:net="flash.net.*" 
       minWidth="955" minHeight="600" > 

    <fx:Script> 
     <![CDATA[ 
      import mx.controls.Alert; 
      import mx.utils.ObjectUtil; 

      private function btn_click(evt:MouseEvent):void { 
       var arr:Array = []; 
       arr.push(new FileFilter("Images", ".gif;*.jpeg;*.jpg;*.png")); 
       fileReference.browse(arr); 
      } 

      private function fileReference_select(evt:Event):void { 
       fileReference.load(); 
      } 

      private function fileReference_complete(evt:Event):void { 
       img.source = fileReference.data; 
       Alert.show(ObjectUtil.toString(fileReference)); 
      } 
     ]]> 
    </fx:Script> 

    <fx:Declarations> 
     <net:FileReference id="fileReference" 
          select="fileReference_select(event);" 
          complete="fileReference_complete(event);" /> 
    </fx:Declarations> 

<s:Rect id="backgroundRect" left="0" right="0" top="0" bottom="0"> 
    <s:fill> 
     <s:BitmapFill id="img" source="@Embed('1.jpg')" fillMode="repeat" /> 
    </s:fill> 
</s:Rect> 
<mx:Button id="btn" 
         label="Browse and preview..." 
         click="btn_click(event);" /> 
</s:Application> 

回答

4

檢查這個代碼:

 private function fileReference_complete(evt:Event):void {   
      var loader:Loader = new Loader(); 
      loader.loadBytes(fileReference.data); 
      loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loaderCompleteHandler); 
     } 

     private function loaderCompleteHandler(evt:Event):void{ 
      img.source = evt.target.content; 
     } 

所以你需要以創建位圖對象使用加載器。

+0

+1 ...比Flex文檔更清晰,謝謝。只是一個挑剔的問題,但在調用** loadBytes **之前添加「完整」偵聽器會更安全嗎?如果該文件被緩存並立即加載,該處理程序可能永遠不會被調用。 – harpo 2011-01-11 16:29:19

+0

是的,我同意你的意見。不太確定這是否會在現實生活中發生(我認爲這個調用實際上是由FP執行後完成的,但我不確定)。 – 2011-01-13 19:54:20