public void doClick(View view) {
/* 此种方式加载大图片(远远大于手机的分辨率)容易oom BitmapFactory.decodeFile(String);
* 故使用含有两个参数的构造函数BitmapFactory.decodeFile(String,options);
* 按照要求创建options参数
* */
//创建位图工厂配置参数
BitmapFactory.Options options = new BitmapFactory.Options();
// 设置为true 解码器不去真正解析位图 但是会获得位图的宽高信息(封装到options中 宽高)
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile("mnt/sdcard/1.jpg", options);// 不解析位图此处也不必要射返回值
//获得图片宽高
int Imgheight = options.outHeight;
int Imgwidgh = options.outWidth;
// 计算缩放比例 一般大于1 的时候进行缩放图片小于手机分辨率 不用进行缩放的
int scale = 1;//默认缩放比例
int scaleX = Imgheight / height;
int scaleY = Imgwidgh / width;
if (scaleX >= scaleY && scaleX > scale) {
scale = scaleX;
}
if (scaleY > scaleX && scaleY > scale) {
scale = scaleY;
}
//以上为固定步骤
//按照缩放比例进行缩放
options.inSampleSize = scale;// 以计算出的样品进行显示(可以不进行计算直接指定缩放比例 但是这种方法或有时缩放过度)
// 按照缩放比例真正解析位图
options.inJustDecodeBounds = false;//刚开始使用的时候不设置默认为false
Bitmap bitmap = BitmapFactory.decodeFile("mnt/sdcard/1.jpg", options);
// 显示图片
imageView.setImageBitmap(bitmap);
}
网友评论