Skia décodeur ne parvient pas à décoder flux à distance
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.
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.