Android:从数据库中检索位图的问题

Posted

技术标签:

【中文标题】Android:从数据库中检索位图的问题【英文标题】:Android: problem retrieving bitmap from database 【发布时间】:2011-01-16 23:39:21 【问题描述】:

当我从 sqlite 数据库中检索图像时,我的位图对象 bm 返回 null 值,谁能帮帮我..?

我在我的数据库中发现了问题..

当我将字节数组以 blob 数据类型存储在数据库表中时,字节数组的大小为 2280..

但是当我使用选择查询检索该 blob 数据类型时,我得到的字节数组大小在 12 以内。

我的代码是:

// Inserting data in database
byte[] b;  
ByteArrayOutputStream baos = new ByteArrayOutputStream();  
Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.icon);  
bm.compress(Bitmap.CompressFormat.PNG, 100, baos); //bm is the bitmap object  
b = baos.toByteArray();  
//here b size is 2280  
baos.close();  
try  
  
mDB = this.openOrCreateDatabase(MY_DATABASE_NAME, MODE_PRIVATE, null);  
mDB.execSQL("CREATE TABLE IF NOT EXISTS "
+ MY_DATABASE_TABLE
+ " (PICTURE BLOB);");    
mDB.execSQL("INSERT INTO "
+ MY_DATABASE_TABLE
+ " (PICTURE)"
+ " VALUES ('"+b+"');");  

  
catch(Exception e)  
  
Log.e("Error", "Error", e);  
  

finally  
  
if(mDB != null)  
mDB.close();  
  


// Retriving data from database  
byte[] b1;  
Bitmap bm;  
mDB = this.openOrCreateDatabase(MY_DATABASE_NAME, MODE_PRIVATE, null);  
try   
mDB.execSQL("CREATE TABLE IF NOT EXISTS "
+ MY_DATABASE_TABLE
+ " (PICTURE BLOB);");  

Cursor c = mDB.rawQuery("SELECT * FROM " + MY_DATABASE_TABLE + ";", null);  
c.moveToFirst();  
if (c != null)   
do   
b1=c.getBlob(0)); //here b1 size is 12   
bm=BitmapFactory.decodeByteArray(b1, 0, b1.length);   
while(c.moveToNext());  
  

【问题讨论】:

同样的问题!你找到解决方案了吗? 【参考方案1】:

这是我在写入数据库之前对图像进行编码的方式:

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
mBitmap.compress(Bitmap.CompressFormat.JPEG, THUMB_QUALITY, outputStream);
mByteArray = outputStream.toByteArray();  // write this to database as blob

然后像 from Cursor 一样对其进行解码:

ByteArrayInputStream inputStream = new ByteArrayInputStream(cursor.getBlob(columnIndex));
Bitmap mBitmap = BitmapFactory.decodeStream(inputStream);

【讨论】:

以上是关于Android:从数据库中检索位图的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何从数据库中检索位图图像?

在 Android Studio 中从用户那里获取图片并进行编码,以便可以将其存储在数据库中

android从onPreviewFrame获取像素数据转换为位图

Android:从位图转换为 Byte[] OutOfMemory 错误

如何在 Android 中调整位图的大小?

如何使用java在android移动设备中获取位图uri