【问题标题】:How to display images from sqlite into a flex datagrid如何将 sqlite 中的图像显示到 flex 数据网格中
【发布时间】:2011-06-12 10:44:31
【问题描述】:

我有许多缩略图(长度为 8K 左右),存储在 sqlite 数据库中,编码为 base64 字符串。

我想检索这些图像并将它们呈现到数据网格中(以及来自数据库的一些其他信息)

从数据库中检索信息是可行的,但我不能完全“看到”如何将数据库中的解码结果连接到数据网格以显示图像。

下面是一些代码,我在其中展示(为了简化)一个简单的 DGrid,并希望使用 dataprovider 指向数据库中的选择

任何详细说明我需要如何更改此代码将不胜感激:-)

  <mx:DataGrid id="dg2" dataProvider="{dp2}">
    <mx:columns>
      <mx:DataGridColumn headerText="Image"  dataField="image"  width="150"/>
    </mx:columns>
  </mx:DataGrid>

生成dp2信息的代码如下。 result2 数组按预期填充,ldr 似乎已填充,但 imageBMap 和(因此)dp2 为空。

    sql2.text = "SELECT image FROM  bookMarks;";
    sql2.execute();

    var result2:SQLResult = sql2.getResult();        
    var data2:Array = result2.data;

    var base64Dec:Base64Decoder;
    var byteArr:ByteArray;
    var bmap:Bitmap;
    var ldr:Loader = new Loader(); 
    base64Dec = new Base64Decoder();


    if(result2.data != null)
    {
      var numRows:int = result2.data.length;

      for(var i:int = 0; i < numRows; i++)
      {     
        for(var columnName:String in result2.data[i])
        {
          if(columnName == "image") // Normally there will be more than 1 column in the select, hence this check
          {
            base64Dec.decode(result2.data[i][columnName]);
            byteArr = base64Dec.toByteArray();                
            ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderComplete);                
            ldr.loadBytes(byteArr);
          } 
        } 
      } 
    } 
    var imageBMap:Bitmap = Bitmap(ldr.content);
    dp2 = ArrayCollection(imageBMap);
  }

  private function loaderComplete(event:Event):void
  {
    var loaderInfo:LoaderInfo = LoaderInfo(event.target);
    var bitmapData:BitmapData = new BitmapData(loaderInfo.width, loaderInfo.height, false, 0xFFFFFF);
    bitmapData.draw(loaderInfo.loader);        
  }

【问题讨论】:

    标签: apache-flex image sqlite actionscript datagrid


    【解决方案1】:

    需要在itemRenderer中使用才能显示图片:

    <mx:DataGridColumn headerText="Image" width="150">
        <mx:itemRenderer>
            <fx:Component>
                <s:Image source="{here you put the dataProvider}">
            </fx:Component>
        </mx:itemRenderer>
    </mx:DataGridColumn>
    

    【讨论】:

    • 感谢并理解。但是,imageBMap(因此 dp2)为空,我不确定如何更正代码。 byteArr 看起来不错,我相信 ldr 也是如此。
    猜你喜欢
    • 2011-09-12
    • 2012-06-05
    • 2019-09-08
    • 1970-01-01
    • 2016-09-16
    • 2017-03-14
    • 1970-01-01
    • 2017-01-08
    • 2010-12-24
    相关资源
    最近更新 更多