android中显示大图片

安卓中经常涉及到大图片的加载,当我们把整个图片都加载进去的时候会非常耗费内存,对于分辨率比较高的图片,由于手机屏幕分辨率没有那么高,全部加载进去意义不是很大,而且经常出现oom异常。所以我们可以通过代码压缩图片分辨率后再显示。

实现步骤

1.读取图片的基本信息

BitmapFactory.Options options = new BitmapFactory.Options();
//只读图片的头信息
options.inJustDecodeBounds = true;
Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.a,options);

//获取图片的实际尺寸
int oldWidth = options.outWidth;
int oldHeight = options.outHeight;

2.获取屏幕尺寸

WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
int width = wm.getDefaultDisplay().getWidth();
int height = wm.getDefaultDisplay().getHeight();

3.获取屏幕尺寸

WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
int width = wm.getDefaultDisplay().getWidth();
int height = wm.getDefaultDisplay().getHeight();

4.计算缩放比例

float c = 1;
if(a<1 && b<1){
    c = a>b?b:a;
}

5.设置缩放比例并关闭只加载图片头信息

options.inSampleSize = (int) c;
options.inJustDecodeBounds = false;

6.加载缩放后图片

Bitmap newbm = BitmapFactory.decodeResource(getResources(),R.drawable.a,options);

完整代码

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.a,options);

WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
int width = wm.getDefaultDisplay().getWidth();
int height = wm.getDefaultDisplay().getHeight();

int oldWidth = options.outWidth;
int oldHeight = options.outHeight;

float a = width/oldWidth;
float b = height/oldHeight;

float c = 1;
if(a<1 && b<1){
    c = a>b?b:a;
}
options.inSampleSize = (int) c;
options.inJustDecodeBounds = false;

Bitmap newbm = BitmapFactory.decodeResource(getResources(),R.drawable.a,options);
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值