您的位置:首页 > 移动开发 > Android开发

Bitmap和Drawable相互转换方法!!!

2012-03-15 11:13 447 查看
很多开发者表示,不知道Android的Drawable和Bitmap之间如何相关转换。下面Android123给大家两种比较简单高效的方法。

一、Bitmap转Drawable

  Bitmap bm=xxx; //xxx根据你的情况获取

  BitmapDrawable bd=BitmapDrawable(bm);

复制代码
Android开发网提示因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。

二、 Drawable转Bitmap

转成Bitmap对象后,可以将Drawable对象通过Android的SK库存成一个字节输出流,最终还可以保存成为jpg和png的文件。

Drawable d=xxx; //xxx根据自己的情况获取drawable

BitmapDrawable bd = (BitmapDrawable) d;

Bitmap bm = bd.getBitmap();

复制代码
最终bm就是我们需要的Bitmap对象了。

R资源图片转bitmap:

Bitmap bmp=BitmapFactory.decodeResource(r, R.drawable.icon);
Bitmap newb = Bitmap.createBitmap( 300, 300, Config.ARGB_8888 );
Canvas canvasTemp = new Canvas( newb );
canvasTemp.drawBitmap(bmp, 50, 50, p);
1.  Bitmap 转化为 byte
ByteArrayOutputStream out = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
byte[] array= out.toByteArray();

2. byte转化为bitmap
final ContentResolver contentResolver = context.getContentResolver();
final PackageManager manager = context.getPackageManager();
final Cursor c = contentResolver.query(uri, null, null, null, null);
final int icon3DIndex = c.getColumnIndexOrThrow(ColumnName);
byte[] data = c.getBlob(icon3DIndex);
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

3. bitmap转化为Drawable
Drawable drawable = new FastBitmapDrawable(bitmap);
...
4. Drawable转化为bitmap
 a. BitmapDrawable, FastBitmapDrawable直接用getBitmap
 b. 其他类型的Drawable用Canvas画到一个bitmap上
      Canvas canvas = new Canvas(bitmap)
      drawable.draw(canvas)

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;   
}  
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 ;   
            }   
      } 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息