Estoy tratando de descargar imags desde una url y luego decodificarlos. El problema es que no sé qué tan grande son y si los decodifico de inmediato, la aplicación se bloquea con imágenes demasiado grandes.¿Por qué recibo java.io.IOException: Mark ha sido invalidado?
Estoy haciendo lo siguiente y funciona con la mayoría de las imágenes pero con algunas de ellas arroja la excepción java.io.IOException: Mark has been invalidated
. No es una cuestión de tamaño porque ocurre con una imagen de 75 KB o 120 KB y no con una imagen de 20 MB o 45 KB. También el formato no es importante ya que puede suceder con una imagen jpg o png.
pis
es un 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;
}
Pero cómo puedo pasar el InputStream que contiene la información para ser convertida en un mapa de bits? ¿ – sergi
@sergi esta es la mejor manera de hacerlo. Usted tiene un InputStream y 'decodeStream()' toma un parámetro de flujo de entrada. – Haphazard
Ahora lo tengo trabajando de esta manera, pero quería ver cuál era la mejor manera de hacerlo ... – sergi