来自URL的位图解码流返回为空(SkImageDecoder :: Factory返回null)

时间:2014-02-20 15:17:47

标签: android bitmap inputstream

我们尝试将图像流解码为Bitmap,但它返回为空。

来自此代码

URL aURL = new URL(url);
URLConnection conn = aURL.openConnection();
conn.connect();

InputStream is = conn.getInputStream();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(is, null, options);
options.inSampleSize = calculateInSampleSize(options, 768, 1280);
options.inJustDecodeBounds = false;

BufferedInputStream bis = new BufferedInputStream(is);
Bitmap bm = BitmapFactory.decodeStream(bis, options);
bis.close();
is.close();

我们得到Log cat

SkImageDecoder::Factory returned null

但是当我们只使用

InputStream is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
Bitmap bm = BitmapFactory.decodeStream(bis);

它正常工作。

2 个答案:

答案 0 :(得分:2)

我最近遇到了类似的问题。在两次传递中解码InputStream时存在问题(首先是图像边界,然后是实际解码),其中InputStream在第一次传递后未重置 - 这导致了错误我的情况。要解决此问题,我只需在第一次传递后重置InputStream,然后关闭用于获取图像边界的原始流,然后在执行实际Bitmap解码之前重新打开新流。

这解决了我的情况,但这是一个相当普遍的问题。如果执行上述操作无效 - 可能值得研究this Google代码问题,或this关于使用BufferedHttpEntities的帖子。

答案 1 :(得分:0)

我尝试在将inJustDecodeBounds设置为FALSE

之前添加以下代码
//... calculateInSampleSize
is.close();
conn = aURL.openConnection();
conn.connect();
is = conn.getInputStream();
options.inJustDecodeBounds = false;

这是正常的,但我不确定这是解决我的问题的最佳途径