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);

猜你喜欢

转载自blog.csdn.net/qq_28859405/article/details/52652232
今日推荐