5
我試圖從一個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()'接受一個輸入流參數。 – Haphazard
現在我已經用這種方式工作了,但想看看哪種方法是最好的方法。 – sergi