私は、URLからimagsをダウンロードし、それらを解読しようとしています。 問題は、どれくらいの大きさなのか分からず、すぐにデコードすれば、大きすぎる画像でアプリがクラッシュすることです。なぜ私はjava.io.IOExceptionを取得していますか:マークが無効になっていますか?
私は以下のことをしています。ほとんどの画像で動作しますが、一部では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;
}
しかし、どのように私はビットマップに変換するための情報が含まれているInputStreamを渡すことができますか?¿ – sergi
この@sergiはそれを行うための最善の方法です。あなたはInputStreamを持っていて、 'decodeStream()'は入力ストリームparamをとります。 – Haphazard
今私はこの方法で作業しているが、それを行う最良の方法を見たいと思った。 – sergi