Skia解码器无法解码远程stream

我试图打开一个JPEG图像的远程stream并将其转换成一个Bitmap对象:

BitmapFactory.decodeStream( new URL("http://sofzh.miximages.com/android/image.jpg") .openStream()); 

解码器返回null,并在日志中,我收到以下消息:

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

注意:
1.内容长度非零,内容types为image/jpeg
2.当我在浏览器中打开URL时,我可以看到图像。

我在这里错过了什么?

请帮忙。 谢谢。

Solutions Collecting From Web of "Skia解码器无法解码远程stream"

android bug 6066提供的解决scheme是覆盖std FilterInputStream然后发送到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; } } 

然后使用decodeStream函数:

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

我发现的另一个解决scheme是简单地给一个BufferedInputStream的BitmapFactory:

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

这两个解决scheme应该做的伎俩。

更多的信息可以在bug报告中find: android bug no.6066

似乎有一些问题,stream和android处理它的方式; 这个bug报告中的补丁现在解决了这个问题。

对我来说,问题在于图像的颜色types:图像的颜色= CYMK而不是RGB

我find了一个库,可以打开Android SKIA失败的图像。 对某些用途可能有用:

https://github.com/suckgamony/RapidDecoder

对我来说,它解决了这个问题,因为我不是一次加载许多图像,我加载的图像很多都有ICCconfiguration文件。 我还没有尝试将它与Picasso或Glide等一些常见的库集成在一起。