Как отобразить изображения из sqlite в гибкую сетку данных - PullRequest
0 голосов
/ 12 июня 2011

У меня есть несколько миниатюрных изображений (длина 8K), хранящихся в базе данных sqlite, закодированных в виде строк base64.

Я хотел бы получить эти изображения и представить их в таблицу данных (вместе с некоторой другой информацией из БД)

Получение информации из базы данных работает, но я не могу "увидеть", как подключить декодированный результат из базы данных к сетке данных для отображения изображений.

Ниже приведен некоторый код, где я показываю (чтобы упростить вещи) просто DGrid и хочу использовать поставщик данных, чтобы указать на выбор из БД

Любая информация, показывающая, как мне нужно изменить этот код, будет принята с благодарностью: -)

  <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);        
  }

1 Ответ

0 голосов
/ 12 июня 2011

Вам необходимо использовать в 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...