当一些字节错误时,BitmapFactory.decodeStream(inputStream) 总是返回 null。

3

我正在开发一个Android应用程序,目前遇到了从URL获取位图的问题。以下是我正在使用的代码:

public static Bitmap bmpFromURL(URL imageURL){

    Bitmap result = null;

    try {

        HttpURLConnection connection = (HttpURLConnection)imageURL .openConnection();

        connection.setDoInput(true);

        connection.connect();

        InputStream input = connection.getInputStream();

        result = BitmapFactory.decodeStream(input);


    } catch (IOException e) {


        e.printStackTrace();

    }

    return result;

}

当图片的字节出现错误时,结果会变成null。我认为这是可以预料的,因为在BitmapFactory.decodeStream文档中有这样的描述:
如果输入流为null,或无法用于解码位图,则该函数返回null。流的位置将在读取编码数据后的任何位置。
问题在于,我的错误图片在Web浏览器上可以很好地被解释,而且我也可以在iPhone平台上做到这一点。
是否有一种方法可以忽略那些错误的像素?也许可以使用选项参数?
感谢任何帮助。
Romain
2个回答

5

这是一个已知的错误,在Android的未来版本中会得到修复。您可以通过先将InputStream的内容复制到byte []数组中,然后解码byte数组本身来解决此问题。


1

试试这个吧..对我有用,希望能帮到你。

result = BitmapFactory.decodeStream(new PatchInputStream(input));

public class PatchInputStream extends FilterInputStream {
   public PatchInputStream(InputStream input) {
       super(input);
   }
   public long skip(long n) throws IOException {
       long m = 0L;
       while (m < n) {
           long _m = in.skip(n-m);
           if (_m == 0L) break;
           m += _m;
       }
       return m;
   }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接