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

来源:互联网 发布:花园战争2淘宝 编辑:程序博客网 时间:2024/06/06 02:50

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);
 
 privatestatic byte[] streamToBytes(InputStream is) {
       ByteArrayOutputStream os =new ByteArrayOutputStream(1024);
       byte[] buffer =new byte[1024];
       intlen;
       try{
           while((len = is.read(buffer)) >= 0) {
               os.write(buffer,0, len);
           }
       }catch (java.io.IOException e) {
       }
       returnos.toByteArray();
 }

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


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

3.提取数据库中的数组数据并转换成Bitmap或DrawableBitmap对象【包含byte[] —> Bitmap】

某类对象m(该类是负责创表,删表,插入数据,删除数据的类).openOrCreateDB();//openOrCreateDB()也是该类的一个打开或创建数据库的方法。


Cursor cursor = 某类对象m.getData(该存图片的字段名,null);
if (cursor.moveToFirst()) {
 
   // byte[] —> Bitmap
   byte[] bytes = cursor.getBlob(cursor.getColumnIndex(该存图片的字段名));
   Bitmap bitmap = BitmapFactory.decodeByteArray(bytes,0, bytes.length, null);
   BitmapDrawable bitmapDrawable =new BitmapDrawable(bitmap);
 
}

4.Drawable —> Bitmap


Bitmap bm = xxx; //xxx根据你的情况获取
  BitmapDrawable bd=new BitmapDrawable(bm);
 
  提示:因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。

public static Bitmap drawableToBitmap(Drawable drawable) {
          
        Bitmap bitmap = Bitmap.createBitmap(
                                   drawable.getIntrinsicWidth(),
                                   drawable.getIntrinsicHeight(),
                                   drawable.getOpacity() != PixelFormat.OPAQUE ?
 
                                   Bitmap.Config.ARGB_8888: Bitmap.Config.RGB_565);
        returnbitmap;
  }

Drawable d=xxx; //xxx根据自己的情况获取drawable
BitmapDrawable bd = (BitmapDrawable) d;
Bitmap bm = bd.getBitmap();
原创粉丝点击