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

本文介绍Android开发中Bitmap与Drawable相互转换的方法,包括Bitmap转Drawable、Drawable转Bitmap等,并提供了具体的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多开发者表示,不知道AndroidDrawableBitmap之间如何相关转换。下面Android123给大家两种比较简单高效的方法。

一、Bitmap转Drawable
  1.   Bitmap bm=xxx; //xxx根据你的情况获取
  2.   BitmapDrawable bd=BitmapDrawable(bm);
复制代码
Android开发网提示因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。

二、 Drawable转Bitmap

转成Bitmap对象后,可以将Drawable对象通过Android的SK库存成一个字节输出流,最终还可以保存成为jpg和png的文件。
  1. Drawable d=xxx; //xxx根据自己的情况获取drawable
  2. BitmapDrawable bd = (BitmapDrawable) d;
  3. 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 ;                }          } 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值