android中使用BitmapFactory的decodeStream()方法解碼圖片失敗問題

來源:互聯網
上載者:User

 從網路擷取圖片,資料為InputStream流對象,然後調用BitmapFactory的decodeStream()方法解碼擷取圖片。代碼如下:

 

private Bitmap getUrlBitmap(String url)
{
Bitmap bm;
try{
URL imageUrl=new URL(url);
HttpURLConnection conn=(HttpURLConnection)imageUrl.openConnection();
conn.connect();
InputStream is=conn.getInputStream();
//byte[] bt=getBytes(is); //注釋部分換用另外一種方式解碼
//bm=BitmapFactory.decodeByteArray(bt,0,bt.length);
bm=BitmapFactory.decodeStream(is); //如果採用這種解碼方式在低版本的API上會出現解碼問題
is.close();
conn.disconnect();
return bm;
}
catch(MalformedURLException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
return null;

}

結果在運行時編譯器提示:          DEBUG/skia(xxx): --- decoder->decode returned false 

已經確定從網路擷取的資料流沒有出現問題,而是在圖片解碼時出現錯誤。上網尋找了不少資料,也沒有得出確切的原因,不過有幾條意見值得關注。

一種說法是在android 較低版本的api中會有不少內部的錯誤,My Code運行時選擇2.1API Level 7和2.2API Level 8都會出現這個問題,而選擇2.3 API Level 9後能夠正常解碼圖片。

我的另外一種做法是換用別的解碼方式對圖片解碼,見代碼中被注釋的那倆行,使用decodeByteArray()方法在低版本的API上也能夠正常解碼,解決了這個問題。

其中getBytes(InputStream is)是將InputStream對象轉換為Byte[]的方法,具體代碼如下:

private byte[] getBytes(InputStream is) throws IOException {

ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] b = new byte[1024];
int len = 0;

while ((len = is.read(b, 0, 1024)) != -1)
{
baos.write(b, 0, len);
baos.flush();
}
byte[] bytes = baos.toByteArray();
return bytes;
}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.