URLからイメージをダウンロードしてデコードしようとしています。問題は、サイズがわからないことと、すぐにデコードすると、大きすぎる画像でアプリがクラッシュすることです。
私は次のことを行っていますが、ほとんどの画像で動作しますが、一部の画像ではjava.io.IOException: Mark has been invalidated
例外がスローされます。75KB または 120KB のイメージで発生し、20MB または 45KB のイメージでは発生しないため、サイズの問題ではありません。また、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;
}