此处测试图像:
http://images.plurk.com/tn_4134189_bf54fe8e270ce41240d534b5133884ee.gif
我在网上找到了几种解决方案,但没有有效的解决方案。
我正在使用以下代码片段:
Url imageUrl = new Url("http://images.plurk.com/tn_4134189_bf54fe8e270ce41240d534b5133884ee.gif");
Bitmap image = BitmapFactory.decodeStream(imageUrl.openStream());
总是获取此日志:
DEBUG/skia(1441): --- decoder->decode returned false
有什么帮助吗?
谢谢。
编辑:
无法解码的图像也无法在
WebView
上显示。但可以在浏览器中查看是否打开。 最佳答案
将此作为临时解决方案:
首先添加以下类:
public static class PlurkInputStream extends FilterInputStream {
protected PlurkInputStream(InputStream in) {
super(in);
}
@Override
public int read(byte[] buffer, int offset, int count)
throws IOException {
int ret = super.read(buffer, offset, count);
for ( int i = 2; i < buffer.length; i++ ) {
if ( buffer[i - 2] == 0x2c && buffer[i - 1] == 0x05
&& buffer[i] == 0 ) {
buffer[i - 1] = 0;
}
}
return ret;
}
}
然后用plurkinputstream包装原始流:
Bitmap bitmap = BitmapFactory.decodeStream(new PlurkInputStream(originalInputStream));
如果这对你有帮助,请告诉我。
编辑:
抱歉,请尝试以下版本:
for ( int i = 6; i < buffer.length - 4; i++ ) {
if ( buffer[i] == 0x2c ) {
if ( buffer[i + 2] == 0 && buffer[i + 1] > 0
&& buffer[i + 1] <= 48 ) {
buffer[i + 1] = 0;
}
if ( buffer[i + 4] == 0 && buffer[i + 3] > 0
&& buffer[i + 3] <= 48 ) {
buffer[i + 3] = 0;
}
}
}
请注意,这不是有效的代码,也不是完整/正确的解决方案。这对大多数情况都有效,但不是全部。