2010-08-30 71 views
3

我正在构建一个android应用程序,我目前无法从URL中检索位图。下面是我使用的代码:BitmapFactory.decodeStream(inputStream)在某些字节出错时总是返回空值

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平台上这样做。

有没有办法排除那些错误的像素?也许用选项参数?

任何帮助表示赞赏

罗曼

回答

5

这是一个已知的bug修复Android的未来版本。您可以先解决它,方法是先将InputStream的内容复制到byte []数组中,然后解码字节数组本身。

+0

好的,我会试试这个。谢谢 – 2010-08-31 07:35:32

+1

你有一些示例代码来帮助我吗? – 2010-08-31 09:30:38

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; 
    } 
}