Tôi đang cố gắng tải xuống imags từ url và sau đó giải mã chúng. Vấn đề là tôi không biết chúng lớn bao nhiêu và nếu tôi giải mã chúng ngay lập tức, ứng dụng sẽ gặp sự cố với hình ảnh quá lớn.Tại sao tôi nhận được java.io.IOException: Đánh dấu đã bị vô hiệu?
Tôi đang làm như sau và nó hoạt động với hầu hết các hình ảnh nhưng với một số trong số đó, nó ném ngoại lệ java.io.IOException: Mark has been invalidated
. Nó không phải là vấn đề về kích thước vì nó xảy ra với hình ảnh 75KB hoặc 120KB và không có hình ảnh 20MB hoặc 45KB. Ngoài ra định dạng cũng không quan trọng vì nó có thể xảy ra với hình ảnh jpg hoặc png.
pis
là 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;
}
Nhưng làm cách nào để chuyển InputStream chứa thông tin được chuyển đổi thành bitmap? ¿ – sergi
@sergi đây là cách tốt nhất để thực hiện. Bạn có một InputStream và 'decodeStream()' lấy một tham số dòng đầu vào. – Haphazard
Bây giờ tôi đã có nó làm việc theo cách này nhưng muốn xem đó là cách tốt nhất để làm điều đó .. – sergi