当某些字节错误时,BitmapFactory.decodeStream(inputStream)始终返回null

时间:2010-08-30 15:27:20

标签: java android bitmap byte inputstream

我正在构建一个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;

}

当图片写入时,一切正常,但是当某些字节错误时,结果为空。我认为这基本上是可以预料的,因为它是在BitmapFactory.decodeStream

的文档中写的
  

如果输入流为空,或者不能用于解码位图,则该函数返回null。流的位置将是读取编码数据后的位置。

问题是,我的错误图片可以通过我的网络浏览器很好地解释,我可以在iPhone平台上这样做。

有没有办法忽略那些错误的像素?也许使用选项参数?

任何帮助表示赞赏

罗曼

2 个答案:

答案 0 :(得分:5)

这是Android未来版本中修复的已知错误。您可以通过首先将InputStream的内容复制到byte []数组中然后解码字节数组本身来解决它。

答案 1 :(得分: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;
   }
}