Drawable、Bitmap、byte[]之间的转换

本文详细介绍了Android中图片资源的多种类型转换方法,包括Drawable转Bitmap、资源获取Bitmap、Bitmap转byte[]、byte[]转Bitmap等核心操作,以及实际应用示例。

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

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;
  }
  }
  private Bitmap Bytes2Bimap(byte[] b){
  if(b.length!=0){
  return BitmapFactory.decodeByteArray(b, 0, b.length);
  }
  else {
  return null;
  }
  }

 

5、实例

 

public String ioToBase64() throws IOException {        String fileName = "d:/gril.gif"; //源文件        String strBase64 = null;        try {            InputStream in = new FileInputStream(fileName);            // in.available()返回文件的字节长度            byte[] bytes = new byte[in.available()];            // 将文件中的内容读入到数组中            in.read(bytes);            strBase64 = new BASE64Encoder().encode(bytes);      //将字节流数组转换为字符串            in.close();        } catch (FileNotFoundException fe) {            fe.printStackTrace();        } catch (IOException ioe) {            ioe.printStackTrace();        }        return strBase64;    }    public void base64ToIo(String strBase64) throws IOException {        String string = strBase64;        String fileName = "d:/gril2.gif"; //生成的新文件        try {            // 解码,然后将字节转换为文件            byte[] bytes = new BASE64Decoder().decodeBuffer(string);   //将字符串转换为byte数组            ByteArrayInputStream in = new ByteArrayInputStream(bytes);            byte[] buffer = new byte[1024];            FileOutputStream out = new FileOutputStream(fileName);            int bytesum = 0;            int byteread = 0;            while ((byteread = in.read(buffer)) != -1) {                bytesum += byteread;                out.write(buffer, 0, byteread); //文件写操作            }        } catch (IOException ioe) {            ioe.printStackTrace();        }    }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值