因为老手机图片太大溢出,改成了这样:先检测图片宽度,超过屏幕宽度就缩小:
Bitmap bitmap;
try {
URL url = new URL(surl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream IS = conn.getInputStream();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true; //开启只读尺寸
bitmap = BitmapFactory.decodeStream(IS, null, options); //图片太大会崩溃
WindowManager WM = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics DM = new DisplayMetrics();
WM.getDefaultDisplay().getMetrics(DM);
int size = 1;
if (options.outWidth > DM.widthPixels) {
size = options.outWidth / DM.widthPixels;
}
options.inSampleSize = size; //缩小比例
options.inJustDecodeBounds = false; //关闭只读尺寸
bitmap = BitmapFactory.decodeStream(IS, null, options);
}
结果图片是黑色的了!
https://blog.csdn.net/oHeHeHou/article/details/39972961
可能 BitmapFactory.decodeStream 使用 InputStream 后,InputStream 自动清空。
解决方案:再获取一次。
Bitmap bitmap;
try {
URL url = new URL(surl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream IS = conn.getInputStream();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true; //开启只读尺寸
bitmap = BitmapFactory.decodeStream(IS, null, options); //图片太大会崩溃
WindowManager WM = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics DM = new DisplayMetrics();
WM.getDefaultDisplay().getMetrics(DM);
int size = 1;
if (options.outWidth > DM.widthPixels) {
size = options.outWidth / DM.widthPixels;
}
options.inSampleSize = size; //缩小比例
options.inJustDecodeBounds = false; //关闭只读尺寸
conn = (HttpURLConnection) url.openConnection(); //InputStream使用后自动清空,需要重新获取
IS = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(IS, null, options);
}