日期:2014-05-16  浏览次数:20380 次

转:Bitmap Drawable byte[] 三者之间的转换以及把数组存入数据库及提取数据重新组合成所需对象,如图像

?

直接入正题吧... ...

?

1.创建数据库表的时候选择存图片的字段类型为blob

?

StringBuffer createTableOfHistory = new StringBuffer();  
createTableOfHistory.append("CREATE TABLE "+某表名);  
createTableOfHistory.append(" ( _id INTEGER PRIMARY KEY AUTOINCREMENT ,");  
createTableOfHistory.append(该存图片的字段名+" BLOB ,");  
createTableOfHistory.append(其他字段名1+" TEXT ,");  
  
.......  
  
createTableOfHistory.append(其他字段名n+" TEXT );");//记得这里带个“;”封号  
db.execSQL(createTableOfHistory.toString());//执行该创表语句  

?

?

?

2.存储数据

? 2.1将数据流转成数组的方法

?

InputStream inputStream = getResources().openRawResource(R.drawable.icon);  
  
 private static byte[] streamToBytes(InputStream is) {  
       ByteArrayOutputStream os = new ByteArrayOutputStream(1024);  
       byte[] buffer = new byte[1024];  
       int len;  
       try {  
           while ((len = is.read(buffer)) >= 0) {  
               os.write(buffer, 0, len);  
           }  
       } catch (java.io.IOException e) {  
       }  
       return os.toByteArray();  
 }  

?

?

?2.2.将Bitmap对象转换成数组的方法【包含从资源文件中获得图片对象Bitmap】

?

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);  
  
  private static byte[] bitmapToBytes(Bitmap bitmap){  
  if (bitmap == null) {  
     return null;  
  }  
  final ByteArrayOutputStream os = new ByteArrayOutputStream();  
  // 将Bitmap压缩成PNG编码,质量为100%存储  
  bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);//除了PNG还有很多常见格式,如jpeg等。  
  return os.toByteArray();  
 }  
  
   
  
  ContentValues values = new ContentValues();  
  values.put(该存图片的字段名, readHistoryInfo.getBookIcon());  
  values.put(其他字段名1, “2011-05-17”);  
  
  ......  
  
  return mSqliteDatabase.insert(表名, null, values);//插入数据 

?