Bitmap的高效加载

一、Bitmap的基本概念

1.Bitmap是Android系统中处理图像的一个最重要的类

2.通过Bitmap我们可以获取图像的信息

3.获取到图片信息后,我们可以通过一些方法对其进行缩放、裁剪等操作

二、Bitmap的加载方式

1.BitmapFactory.decodeByteArray() :字节数组

2.BitmapFactory.decodeFile():文件

3.BitmapFactory.decodeResurece():资源ID

4.BitmaoFactory.decodeStream():数据流

三、为什么要高效的加载Bitmap?

1.防止内存溢出。

2.尽可能的节省内存开销。

3.使我们的APP运行的更加流畅。

四、BitmapFactory.options

 属性:

1.inJustDecodeBounds 是一个boolean类型的变量,设置为true时,BitmapFactory.decode...并不会返回一个bitmap对象,而是返回bitmap的width和height。

2.outWidth和outHeight,返回的width和height会存放在对应这两个变量中。

3.inSampleSize 采样率。

 示例

public class BitmapUtil {

/**

*

    * @param filePath 图片路径

    * @param pixlW 要显示的宽度

    * @param pixlH 要显示的高度

    * @return

    */

    public static Bitmap getBitmap(String filePath,int pixlW,int pixlH){

BitmapFactory.Options options =new BitmapFactory.Options();

options.inJustDecodeBounds =true;

options.inPreferredConfig = Bitmap.Config.RGB_565;

//预加载

        BitmapFactory.decodeFile(filePath,options);

//获取图片实际的宽和高

        int raWidth = options.outWidth;

int raHeight = options.outHeight;

//计算inSampleSize

        options.inSampleSize =getInSampleSize(raWidth,raHeight,pixlW,pixlH);

options.inJustDecodeBounds=false;

return BitmapFactory.decodeFile(filePath,options);

}

/**

* 计算inSampleSize

    * @param raWidth

    * @param raHeight

    * @param pixlW

    * @param pixlH

    * @return

    */

    private static int getInSampleSize(int raWidth,int raHeight,int pixlW,int pixlH) {

int sampleSize =1;//不压缩

        float widthSample =0;

float heightSample =0;

if(raWidth>pixlW){

widthSample = raWidth/pixlW;

}

if(raHeight>pixlH){

heightSample = raHeight/pixlH;

}

sampleSize = (int) Math.max(widthSample,heightSample);

if(sampleSize<=0){

sampleSize =1;

}

return sampleSize;

}

}

五、Android缓存

1.缓存的概念

缓存就将从服务器请求到的数据(json,file)等保存到本地,这就是缓存。

2.缓存常见的使用场景和优势

 使用场景:

 1)对Bitmap和File等大数据进行缓存,不必每次都从服务器下载,尤其是ListView。

2)数据不需要实时更新,采用缓存机制。

优势

1)对于一些不是经常发生变化的数据,我们可以使用本地缓存,这样可以提高应用的响应速度。

2)不再频繁的请求服务器,降低服务器的负载压力。

3)特殊场景:离线阅读

3.缓存策略

1.android LruCache实现内存缓存。

2.android DiskLruCache硬盘缓存。

LruCache概念

1.Lru是计算机科学中使用的一种近期最少使用算法。

2.LruCache内部采用的是LinkedHashMap。

demo地址:https://github.com/wo5813288/SampleImageLoader

你可能感兴趣的:(Bitmap的高效加载)