【Android】Android Drawable与Bitmap互转

Drawable转成Bitmap

方法一:创建空Bitmap并用canvas绘制
private Bitmap drawableToBitamp(Drawable drawable)
{    
    //声明将要创建的bitmap
    Bitmap bitmap = null;
    //获取图片宽度
    int width = drawable.getIntrinsicWidth();
    //获取图片高度
    int height = drawable.getIntrinsicHeight();
    //图片位深,PixelFormat.OPAQUE代表没有透明度,RGB_565就是没有透明度的位深,否则就用ARGB_8888。详细见下面图片编码知识。
    Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565;
    //创建一个空的Bitmap
    bitmap = Bitmap.createBitmap(width,height,config);
    //在bitmap上创建一个画布
    Canvas canvas = new Canvas(bitmap);
    //设置画布的范围   
    drawable.setBounds(0, 0, width, height);   
    //将drawable绘制在canvas上
    drawable.draw(canvas);
    return bitmap;
}

图片编码知识——在Android的Bitmap.Config中有四个枚举类型:
ALPHA_8 : 每个像素都需要1个字节(8位)的内存,只存储位图的透明度,没有颜色信息。
ARGB_4444:A(Alpha)、R(Red)、G(Green)、B(Blue)分别占4位,合计2个字节,也就是一个像素占两个字节的内存。由于该精度的位图质量较差,官方不推荐使用。
ARGB_8888:A,R,G,B各占8个位的精度,所以一个像素占4个字节的内存,质量较好,同时占用存储空间也较大。
RGB_565:R占5位精度,G占6位精度,B占5位精度,合计2个字节,只有颜色信息,没有透明度信息。

方法二:BitmapDrawable强转成Bitmap

此方法前提是drawable是一个BitmapDrawable类型的对象,强转成
BitmapDrawable后调用getBitmap方法即可获得bitmap对象:

private Bitmap drawableToBitamp(Drawable drawable)
{
    BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
    Bitmap bitmap = bitmapDrawable.getBitmap();
    return Bitmap;
}

由于Drawable就好几种,常用的有ColorDrawable、BitmapDrawable、ClipDrawable、AnimationDrawable等等加起来有二十多种,只有BitmapDrawable才可以获取bitmap。
Drawable的直接派生类:在这里插入图片描述Drawable的间接派生类:
在这里插入图片描述

Bitmap转Drawable

bitmap转Drawable就很简单,通过BitmapDrawable构造方法传入bitmap即可:

BitmapDrawable drawable=new BitmapDrawable(bitmap)//传入bitmap对象
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值