Bitmap 和Drawable讲解

Android 应用中显示的图片不仅包括*.png*.jpg*.gif格式的位图,还包括使用xml资源文件定义的各种Drawable对象。

对于Drawable对象只要我们添加了图片资源,Android SDK会自动为其在R清单文件中添加一个Id,用户可以通过该id拿到对应的Drawable对象。Drawable对象的形成还可以是我们自定义的xml文件(例如 shape selectorxml文件)

对于Bitmap,其代表的是一个位图,我们可以将资源文件中图片加载为一个Bitmap对象,也可以将文件中的图片加载为一个Bitmap对象,每次加载Bitmap对象都是系统解析、创建Bitmap对象。由于手机内存比较小,不断的解析、创建Bitmap可能由于前面的内存还没有回收,而导致程序运行时引发OutOfMemoryOOM)内存溢出,导致程序崩溃。

 

Drawable

Drawable对象可以通过Resourse 类的getDrawableint id)获取,Drawable可用于显示为图片或背景图,或图片修饰等。

BitmapBitmapFactory

1BitmapBitmapDrawable关系

我们可以把一个Bitmap对象包装成BitmapDrawable对象,通过BitmapDrawable的构造器

BitmapDrawable drawable=new BitmapDraw(bitmap);

若希望获取BitmapDrawable所包装的Bitmap对象可以调用BitampDrawabled getBitmap()方法。

2Bitmap的方法,这些方法是Bitmap对象的获取和修改大小等的实现

1createBitmap(Bitmap sourse,int x,int y,int width,int height);将源位图的坐标(x,y)开始,从位图中挖去宽width,height的一块出来,创建新的Bitmap对象。

2createScaledBitmap(Bitmap src,int dstWidthint dstHeight,boolean filter);对源位图进行缩放,缩放成宽DSTWidth,高dstHeight的新位图。

3createBitmap(int width,int height,Bitmap.Config config);创建一个宽高width height的新位图

4createBitmap(Bitmap sourse,int x,int y,int width,int height,Matrix m,boolean filter);从源位图的指定坐标开始,从中挖取宽高的一块出来,创建新的Bitmap对象,并按照Matrix指定的规则变化

3BitmapFactory加载Bitmap对象

1decodeByteArray(byte[] data,int offset,int length);从指定字节数组的offse开始将长度为length的字节数据解析成Bitmap对象

2decodeFile(String pathName);PathName指定文件中解析创建Bitmap对象。

3decodeResourse(Resourse resint id);根据资源id将指定资源解析创建Bitmap对象。

4decodeStream(InputStream is);用于从输入流中解析创建Bitmap对象。

4、对于多次解析创建Bitmap造成的OOM,我们可以释放无用的Bitmap资源来减少内存的占用。

1boolean isRecycled();返回Bitmap对象是否已被回收。

2void recycle();强制Bitmap对象回收自己。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值