Bitmap手册

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

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

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

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

1. 优化内存

上代码先:

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


    Bitmap手册_第1张图片
  • 最关键部分的算法,通过比较原图宽高和我们要求的宽高来取得缩放比例。


    Bitmap手册_第2张图片

    用的时候:

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

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

接下来进行对比:

  • 不进行优化:



    打印:


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

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


    Bitmap手册_第3张图片

打印:


276676 Bytes=0.27MB
缩小了25倍。

强势的一匹

2. Bitmap和BitmapFactory各参数讲解:

1.创建bitmap:

  • Bitmap的静态方法`createBitmap()


    Bitmap手册_第4张图片
  • BitmapFactory的decode系列静态方法
    Bitmap手册_第5张图片

2 .Config:


Bitmap手册_第6张图片

有四个参数:

  • 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手册)