Domanda

Sto cercando di aprire un flusso a distanza di un'immagine JPEG e convertirla in un oggetto bitmap:

    BitmapFactory.decodeStream(
new URL("http://some.url.to/source/image.jpg")
.openStream());

I ritorni decoder NULL e nei registri ottengo il seguente messaggio:

DEBUG/skia(xxxx): --- decoder->decode returned false

Nota:
1. la lunghezza del contenuto è diverso da zero e tipo di contenuto è image/jpeg
2. Quando ho aperto l'URL nel navigatore posso vedere l'immagine.

Che cosa è che mi manca qui?

Si prega di aiuto. Grazie.

È stato utile?

Soluzione 2

Sembra che ci fosse qualche problema con il flusso e il modo in cui ha gestito Android; la patch in questo bug report risolto il problema per ora.

Altri suggerimenti

La soluzione fornita in Android bug n ° 6066 consiste nel sovrascrivendo il FilterInputStream std e poi inviarlo al 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;
    }
}

e quindi utilizzare la funzione decodeStream:

Bitmap bitmap = BitmapFactory.decodeStream(new FlushedInputStream(inputStream));

L'altra soluzione che ho trovato è quello di dare semplicemente un BufferedInputStream a th BitmapFactory:

Bitmap bitmap = BitmapFactory.decodeStream(new BufferedInputStream(inputStream));

Queste due soluzioni dovrebbero fare il trucco.

Maggiori informazioni possono essere trovate nei commenti bug report: Android bug No.6066

Per me il problema è con il tipo di colore di immagine: l'immagine è a colori = CYMK non in RGB

ho trovato una libreria, che può aprire le immagini su cui Android SKIA fallisce. Può essere utile per alcuni casi d'uso:

https://github.com/suckgamony/RapidDecoder

Per me è risolto il problema, come non sto caricando molte immagini contemporaneamente e molte immagini che ho caricare avere profilo ICC. Non ho provato integrandolo con alcune librerie comuni come Picasso o Glide.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top