Android学习 之 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); //插入数据

 

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);
         return bitmap;
   }
?
Drawable d=xxx; //xxx根据自己的情况获取drawable
BitmapDrawable bd = (BitmapDrawable) d;
Bitmap bm = bd.getBitmap();

 

转载于:http://www.cnblogs.com/enricozhang/archive/2011/09/29/2195601.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值