此处测试图像:
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;
                }
            }
        }

请注意,这不是有效的代码,也不是完整/正确的解决方案。这对大多数情况都有效,但不是全部。

10-05 22:31
查看更多