Bitmap Drawable byte[]间的转换

Android在处理一写图片资源的时候,会进行一些类型的转换,现在有空整理一下: 


1、Drawable → Bitmap


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);    
        Canvas canvas =  new  Canvas(bitmap);    
         //canvas.setBitmap(bitmap);    
        drawable.setBounds( 0 ,  0 , drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());    
        drawable.draw(canvas);    
         return  bitmap;    
}   


2、从资源中获取Bitmap


Resources res=getResources();    
   
Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);   
Resources res=getResources();


Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);


3、Bitmap → byte[]


private   byte [] Bitmap2Bytes(Bitmap bm){    
    ByteArrayOutputStream baos =  new  ByteArrayOutputStream();      
    bm.compress(Bitmap.CompressFormat.PNG,  100 , baos);      
     return  baos.toByteArray();    
   }   
private byte[] Bitmap2Bytes(Bitmap bm){
    ByteArrayOutputStream baos = new ByteArrayOutputStream();  
    bm.compress(Bitmap.CompressFormat.PNG, 100, baos);  
    return baos.toByteArray();
   } 
4、 byte[] → Bitmap 


 


private  Bitmap Bytes2Bimap( byte [] b){    
             if (b.length!= 0 ){    
                 return  BitmapFactory.decodeByteArray(b,  0 , b.length);    
            }    
             else  {    
                 return   null ;    
            }    

      }  



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();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值