我们尝试将图像流解码为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);
它正常工作。
答案 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;
这是正常的,但我不确定这是解决我的问题的最佳途径