美文网首页
Bitmap的高效加载

Bitmap的高效加载

作者: 流水线上的程序员 | 来源:发表于2018-03-09 15:58 被阅读0次

    一、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的高效加载

          本文链接:https://www.haomeiwen.com/subject/conpfftx.html