Skia decodificador logra decodificar la corriente remota
Pregunta
Estoy intentando abrir una secuencia remota de una imagen JPEG y convertirlo en un objeto de mapa de bits:
BitmapFactory.decodeStream(
new URL("http://some.url.to/source/image.jpg")
.openStream());
Los rendimientos decodificador nulo y en los registros de recibo el mensaje siguiente:
DEBUG/skia(xxxx): --- decoder->decode returned false
Nota:
1. la longitud del contenido no es cero y tipo de contenido es image/jpeg
2. Al abrir la URL en el navegador puedo ver la imagen.
Lo que es que estoy perdiendo aquí?
Por favor, ayuda. Gracias.
Solución 2
Parece que hubo algún problema con la corriente y la forma en Android manejó; el parche en este informe de error resolvió el problema por ahora.
Otros consejos
La solución proporciona en androide bug n ° 6066 consiste en anular el FilterInputStream std y luego enviarlo a la BitmapFactory.
static class FlushedInputStream extends FilterInputStream {
public FlushedInputStream(InputStream inputStream) {
super(inputStream);
}
@Override
public long skip(long n) throws IOException {
long totalBytesSkipped = 0L;
while (totalBytesSkipped < n) {
long bytesSkipped = in.skip(n - totalBytesSkipped);
if (bytesSkipped == 0L) {
int byteValue = read();
if (byteValue < 0) {
break; // we reached EOF
} else {
bytesSkipped = 1; // we read one byte
}
}
totalBytesSkipped += bytesSkipped;
}
return totalBytesSkipped;
}
}
y luego utilizar la función decodeStream:
Bitmap bitmap = BitmapFactory.decodeStream(new FlushedInputStream(inputStream));
La otra solución que he encontrado es simplemente dar un BufferedInputStream a BitmapFactory º:
Bitmap bitmap = BitmapFactory.decodeStream(new BufferedInputStream(inputStream));
Estas dos soluciones debe hacer el truco.
Más información se puede encontrar en el informe de errores comentarios: androide error No.6066
Para mí el problema es con el tipo de color de la imagen: la imagen son de color CYMK = no en RGB
He encontrado una biblioteca, que puede abrir imágenes en la que fallaron Android SKIA. Puede ser útil para ciertos casos de uso:
https://github.com/suckgamony/RapidDecoder
Para mí resolvió el problema, ya que no estoy cargando muchas imágenes a la vez y gran cantidad de imágenes que cargar tener perfil ICC. No he probado su integración con algunas bibliotecas comunes como Picasso o deslizamiento.