Я пытаюсь загрузить изображения с URL-адреса, а затем декодировать их. Проблема в том, что я не знаю, насколько они велики, и если я сразу их декодирую, приложение вылетает из-за слишком больших изображений.
Я делаю следующее, и оно работает с большинством изображений, но с некоторыми из них он генерирует исключение java.io.IOException: Mark был признан недействительным
исключение.
Это не вопрос размера, потому что это происходит с изображением 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;
}