Bitmap手册

本篇参考大量文章学习总结:

深入理解bitmap
郭霖: Android高效加载大图、多图解决方案,有效避免程序OOM
玩转Android Bitmap

内容:
1.bitmap实现内存优化
2.bitmap和BitmapFactory各参数讲解

实现效果:一张原图从占内存6M多削减到占内存0.2M左右

1. 优化内存

上代码先:

  • 首先是decodeBitmapFraomResource(),参数顾名思义。


  • 最关键部分的算法,通过比较原图宽高和我们要求的宽高来取得缩放比例。



    用的时候:

Bitmap bitmap=decodeBitmapFromResource(getResources(),R.drawable.picture
                ,100,100);
imageView.setImageBitmap(bitmap);

非常强势,自动缩放成我们定义的100*100的尺寸要求。

接下来进行对比:

  • 不进行优化:



    打印:


也就是这张图片占用了6895876 Bytes=6.8MB内存

  • 进行优化:
    用上面刚写的算法来搞:


打印:


276676 Bytes=0.27MB
缩小了25倍。

强势的一匹

2. Bitmap和BitmapFactory各参数讲解:

1.创建bitmap:

  • Bitmap的静态方法`createBitmap()


  • BitmapFactory的decode系列静态方法

2 .Config:



有四个参数:

  • Bitmap.Config.ALPHA_8:颜色信息只由透明度组成,占8位。
  • Bitmap.Config.ARGB_4444:颜色信息由透明度与R(Red),G(Green),B(Blue)四部分组成,每个部分都占4位,总共占16位。
  • Bitmap.Config.ARGB_8888:颜色信息由透明度与R(Red),G(Green),B(Blue)四部分组成,每个部分都占8位,总共占32位。是Bitmap默认的颜色配置信息,也是最占空间的一种配置。
  • Bitmap.Config.RGB_565:颜色信息由R(Red),G(Green),B(Blue)三部分组成,R占5位,G占6位,B占5位,总共占16位。

通常我们优化Bitmap时,当需要做性能优化或者防止OOM(Out Of Memory),我们通常会使用Bitmap.Config.RGB_565这个配置,因为Bitmap.Config.ALPHA_8只有透明度,显示一般图片没有意义,Bitmap.Config.ARGB_4444显示图片不清楚,Bitmap.Config.ARGB_8888占用内存最多。

他们的工作原理:

int b = 1;
switch (bitmap.getConfig()) {
    case ALPHA_8:
        b = 1;
        break;
    case ARGB_4444:
        b = 2;
        break;
    case ARGB_8888:
        b = 4;
        break;
}
int bytes1 = bitmap.getWidth() * bitmap.getHeight() * b;
int bytes2 = bitmap.getByteCount(); 
//从api12才有的接口
//bytes=bytes2;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一直以来Bitmap都是开发中很棘手的问题,这个问题就是传说中的OOM(java.lang.OutofMemory...
    M悇芐冋忆阅读 4,947评论 0 11
  • 玩转Android Bitmap 1. 初识Bitmap Bitmap是一个final类,因此不能被继承。Bitm...
    passiontim阅读 1,552评论 0 2
  • 玩转Android Bitmap 1. 初识Bitmap Bitmap是一个final类,因此不能被继承。Bitm...
    lavor阅读 25,420评论 5 111
  • View 自定义View中在onDraw()方法中可以设置padding吗?答案是不能,设置padding后,Vi...
    ElvenShi阅读 1,940评论 0 0
  • 基本概念(是什么,应用场景)以及BitMap的编码原理(做引导) BitMap类在Android类中的基本实现(基...
    QiYiFridge阅读 1,487评论 1 5