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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top