2012-08-30 48 views
0

我想爲包含圖像和標籤的列表實現itemRenderer。列表中的數據提供者是我從後端有對象的列表:bytearray到圖像

public class Object { 
private String label; 

private byte[] content; 

}

我的項目渲染:

<s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx"> 
<s:layout> 
    <s:HorizontalLayout/> 
</s:layout> 
<mx:Image source="{data.content}"/> 
<s:Label text="{data.label}"/> 

我只拿到了一個破圖片。有沒有人知道爲什麼以及如何解決這個問題。 由於事先 Yayo

+0

是什麼'打破image'是什麼意思? – RIAstar

+0

它看起來像有一個圖像,但你看不到圖像 – ayahya82

+0

@ user628213分享截圖? –

回答

0

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/components/Image.html#source

  • 位圖或BitmapData實例。
  • 代表 DisplayObject子類的類。
  • BitmapFill實例化類並創建一個 位圖渲染。 DisplayObject的一個實例。 BitmapFill將其複製到位圖中進行填充。
  • 外部圖像文件的名稱。

spark.components.Image不能使用ByteArray實例作爲源。 所以你需要將它轉換爲位圖實例。

事情是這樣的:

<?xml version="1.0"?> 
<s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"> 

    <fx:Script><![CDATA[ 
     private var _bytesLoader:Loader; 

     override public function set data(value:Object):void 
     { 
      super.data = value; 

      _loadBytes(data.bytes as ByteArray); 
     } 

     private function _loadBytes(bytes:ByteArray):void 
     { 
      _destroyBytesLoader(); 

      if (!bytes) 
      { 
       return; 
      } 

      _createBytesLoader(); 
      try 
      { 
       _bytesLoader.loadBytes(bytes); 
      } 
      catch (e:*) 
      { 
       _destroyBytesLoader(); 
      } 
     } 

     private function _createBytesLoader():void 
     { 
      _bytesLoader = new Loader(); 
      _bytesLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, _bytesLoader_completeHandler); 
      _bytesLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, _bytesLoader_errorHandler); 
      _bytesLoader.contentLoaderInfo.addEventListener(AsyncErrorEvent.ASYNC_ERROR, _bytesLoader_errorHandler); 
     } 

     private function _destroyBytesLoader():void 
     { 
      if (!_bytesLoader) 
      { 
       return; 
      } 

      _bytesLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, _bytesLoader_completeHandler); 
      _bytesLoader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, _bytesLoader_errorHandler); 
      _bytesLoader.contentLoaderInfo.removeEventListener(AsyncErrorEvent.ASYNC_ERROR, _bytesLoader_errorHandler); 

      try 
      { 
       _bytesLoader.unload(); 
      } 
      catch (e:*){} 

      _bytesLoader = null; 
     } 

     private function _bytesLoader_completeHandler(event:Event):void 
     { 
      try 
      { 
       myImage.source = Bitmap(_bytesLoader.content).bitmapData.clone(); 
      } 
      catch (e:*) 
      { 
      } 
      _destroyBytesLoader(); 
     } 

     private function _bytesLoader_errorHandler(event:Event):void 
     { 
      _destroyBytesLoader(); 
     } 

     ]]></fx:Script> 

    <s:layout> 
     <s:HorizontalLayout /> 
    </s:layout> 

    <s:Image id="myImage"/> 
    <s:Label text="{data.label}" /> 

</s:MXDataGridItemRenderer> 
+0

謝謝你的幫助。我發現這個問題。它在數據庫中。它不是正確的字節數組它僅適用於myImage.source = data.content – ayahya82