Ich versuche, Imags von einer URL herunterzuladen und sie dann zu entschlüsseln. Das Problem ist, dass ich nicht weiß, wie groß sie sind und wenn ich sie sofort dekodiere, stürzt die App mit zu großen Bildern ab.
Ich tue das Folgende und es funktioniert mit den meisten Bildern, aber mit einigen von ihnen, wirft es die java.io.IOException: Mark has been invalidated
Ausnahme. Es hat nichts mit der Größe zu tun, denn es passiert bei einem 75KB oder 120KB Bild und nicht bei einem 20MB oder 45KB Bild. Auch das Format spielt keine Rolle, da es sowohl bei einem jpg- als auch bei einem png-Bild auftreten kann.
pis
ist ein 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;
}