Question

Je suis en train d'ouvrir un flux à distance d'une image JPEG et le convertir en un objet Bitmap:

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

Le rendement du décodeur null et dans les journaux que je reçois le message suivant:

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

Note:
1. la longueur du contenu est de type non nul et le contenu est image/jpeg
2. Quand j'ouvre l'URL dans le navigateur, je peux voir l'image.

Qu'est-ce que je suis absent ici?

S'il vous plaît aider. Merci.

Était-ce utile?

La solution 2

semble qu'il y avait un problème avec le flux et la façon dont il a traité Android; le patch dans ce rapport de bogue a résolu le problème pour l'instant.

Autres conseils

La solution fournie dans androïde bug n ° 6066 consiste en la substitution de la std FilterInputStream puis l'envoyer à l'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;
    }
}

puis utilisez la fonction decodeStream:

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

J'ai trouvé l'autre solution est de donner simplement à BufferedInputStream e BitmapFactory:

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

Ces deux solutions devraient faire l'affaire.

Plus d'informations peuvent être trouvées dans le rapport de bug commentaires: android bug no.6066

Pour moi, le problème est avec le type de couleur de l'image: l'image est en couleur = CMYK pas RGB

J'ai trouvé une bibliothèque, qui peut ouvrir des images sur Android qui ne parvient SKIA. Il peut être utile pour certains usecases:

https://github.com/suckgamony/RapidDecoder

Pour moi, il a résolu le problème que je ne se charge pas beaucoup d'images à la fois et beaucoup d'images que je charge ont le profil ICC. Je ne l'ai pas essayé l'intégrer avec des bibliothèques communes comme Picasso ou Glide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top