Я пытаюсь загрузить изображения с URL-адреса, а затем декодировать их.
Проблема в том, что я не знаю, насколько они велики, и если я их сразу декодирую, приложение вылетает со слишком большими изображениями.
Я делаю следующее, и оно работает с большинством изображений, но с некоторыми из них выдает исключение java.io.IOException: Mark has been invalidated
.
Это не вопрос размера, потому что это происходит с изображением размером 75 КБ или 120 КБ, а не с изображением размером 20 МБ или 45 КБ.
Также формат не важен, так как это может происходить с изображением jpg или png.
pis
является InputStream
.
Options opts = new BitmapFactory.Options();
BufferedInputStream bis = new BufferedInputStream(pis);
bis.mark(1024 * 1024);
opts.inJustDecodeBounds = true;
Bitmap bmImg=BitmapFactory.decodeStream(bis,null,opts);
Log.e("optwidth",opts.outWidth+"");
try {
bis.reset();
opts.inJustDecodeBounds = false;
int ratio = opts.outWidth/800;
Log.e("ratio",String.valueOf(ratio));
if (opts.outWidth>=800)opts.inSampleSize = ratio;
return BitmapFactory.decodeStream(bis,null,opts);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}