Bitmap高效加载及Android缓存策略

119 阅读2分钟

##Bitmap高效加载

    1. Bitmap的基本概念
    1. Bitmap加载(decode)方式
    1. 如何高效加载Bitmap

####1. Bitmap的基本概念 普适:

  • 总的说, Bitmap为开发者提供了对图像文件操作支持, 就如File类为我们提供了对本地文件操作支持一样。 有了Bitmap,才可以对本地的图片资源图片网络图片进行各种各样的操作通过第2节中的API全集可以体会到Bitmap在处理图片上的强大;
  • Bitmap不是Android特有的概念,计算机图形学中就有这个概念,即位图
  • 主要作用就是把图像转换成像素信息加入到内存中; 而后可以对这些像素信息进行一定的操作来生成我们想要的效果

在Android中:

  • BitmapAndroid系统中的图像处理的最重要的类之一, 几乎只要涉及到图像处理,就要使用到Bitmap
  • 通过Bitmap我们可以获取到图片的信息, 如宽度上的像素值高度上像素值总的像素值α值等等, 还可以通过一个Bitmap去创造一个新的Bitmap
  • 获取到信息后,可以对其进行缩放、裁剪等操作;
  • 其他功能(可见Bitmap用途非常广):   可以与画笔Paint结合实现一些特效, 如BitmapShader(shader. 着色器)相关操作等等;

####2. Bitmap加载(decode)方式

  • 因为图片可能是我们的资源(res、Resource), 也可能是就是一个文件/Flie; 也有可能是一个字节数组/ByteArray; 还有可能是一个网络流/Stream;等等 所以Android系统针对不同的图片数据来源提供着多种加载方式

下面是四种比较主要的加载方式:

  1. BitmapFactory.decodeByteArray()(来源:字节数组)
  2. BitmapFactory.decodeFile()(来源:文件路径)
  3. BitmapFactory.decodeResource()(来源:资源ID)
  4. BitmapFactory.decodeStream() (来源:流)

###BitmapAPI全集:

##个别API简介

  • extractAlpha()取bitmap对象的α值出来单独生成一张Bitmap;
  • compress()对bitmap进行压缩;
  • getByteCount()获取到字节数;
  • 获取宽高:
  • 通过不同的参数create一系列新的Bitmap ###为什么要用BitmapFactory,而不是直接用Bitmap呢?
  • Bitmap有引起内存泄漏的风险; 所以使用系统提供的工厂类BitmapFactory中的静态方法来创建一个Bitmap
  • Bitmap本身的构造方法是private;不允许直接new Bitmap();

实际使用示例:

        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher_background, null);
        bitmap.

####为什么要高效加载(decode)Bitmap

Bitmap,图片,意味着内存消耗大; 市面上现今的相机像素非常高,产出的图片大小以M计数;直接把这样大图片加载进来是十分消耗内存的;

  1. 防止内存溢出
  2. 尽可能的节省内存开销
  3. 内存优化,健壮应用,使app更加流畅地run ####如何高效加载Bitmap BitmapFactory的内部类Options 为我们的高效加载提供了可能