性能优化之采样率图片压缩(加载大图片)

前言

图片加载框架有很多,例如 picasso 、glide 。imageloader, 本人基本上使用的是Glide框架 ,本人也对glide 进行了二次封装,上传了一个工具类,可以直接贴过去使用。地址 :http://blog.csdn.net/baidu_38477614/article/details/78871398
今天就来讲讲如何加载大图片。

介绍

为了避免内存溢出,最好在加载图片前都对尺寸做检查。也可以使用第三方的框架。我也很喜欢第三方框架,节省开发时间。但是还要懂其原理,正所谓学而不思则罔,思而不学则殆。

一般加载大图片的原理

为了同时加载大图片和小图片,我们只需要 获取移动设备的宽和高 ,在获取图片的宽和高 ,然后计算一个缩放比例 ,也就是采样率压缩。
主要是靠BitmapFactory 中的 options 的各种属性来实现。

代码实现

首先获取屏幕的分辨率

 //获取手机的分辨率
        WindowManager wm  = (WindowManager) getSystemService(WINDOW_SERVICE) ;
        DisplayMetrics metrics = new DisplayMetrics();
        wm.getDefaultDisplay().getMetrics(metrics);
        int  width=   metrics.widthPixels;
        int height = metrics.heightPixels;

获取图片的分辨率

        BitmapFactory.Options options = new BitmapFactory.Options();
        //当解析器为true时 能获取图片的宽和高 ,不会加载图片
        options.inJustDecodeBounds = true ;
        BitmapFactory.decodeFile(content+"/DCIM/laomao.jpg",options) ;
        int imgHeight = options.outHeight;//获得 图片的分辨率
        int imgWidth = options.outWidth ;

计算缩放比例

//计算缩放比
         scale = 1 ; //初始化 的缩放比 为 1 
        int scaleX = imgWidth / width ; //宽的缩放比例
        int scaleY = imgHeight / height ; //长的缩放比例

//判断宽和高的缩放比的大小 , 谁大按照那个缩放比进行缩放
        if(scaleX >= scaleY && scaleX > scale)
        { 
            scale = scaleX ;
        }
        if(scaleX < scaleY && scaleX > scale)
        {
            scale = scaleY ;
        }

显示图片

 // 进行缩放比显示
        options.inSampleSize = scale ;
 //解析位图 
        options.inJustDecodeBounds = false ; // 当值为false 时 加载图片
       Bitmap bitmap =  BitmapFactory.decodeFile("图片的路径",options);

        //显示图片
      iv.setImageBitmap(bitmap);

这样就可以实现所有的大图小图都能加载 了。

上一篇写了 性能优化之图片压缩(质量压缩、尺寸压缩) 地址

http://blog.csdn.net/baidu_38477614/article/details/78901107

猜你喜欢

转载自blog.csdn.net/baidu_38477614/article/details/78904241