У меня есть несколько миниатюрных изображений (длина 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);
}