前言
图片加载框架有很多,例如 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