BitmapFactory.decodeStream(inputStream)返回null的解决方法
时间: 2024-02-03 18:04:01 浏览: 208
Android读取服务器图片的三种方法
当调用`BitmapFactory.decodeStream(inputStream)`方法返回`null`时,可能是以下原因之一:
1. `inputStream`为空或已关闭,因此需要确保输入流是正确打开并可用的。
2. 图片格式不受支持,例如图片格式为WebP或HEIF,可以使用`Options.inPreferredConfig`设置合适的图片格式。
3. 图片太大,超出了内存限制,可以通过设置`Options.inSampleSize`来减小图片大小,或者使用`BitmapFactory.decodeFile()`方法,将图片保存在本地并逐步加载。
4. 图片压缩方式不受支持,例如图片采用了透明压缩方式,可以使用`Options.inPreferredConfig`设置合适的图片压缩方式。
解决方法:
1. 确保输入流可用并未关闭。
2. 设置合适的图片格式和压缩方式。
3. 减小图片大小或者采用其他方式加载图片。
4. 检查代码是否正确,可以参考以下代码:
```
Bitmap bitmap = null;
try {
InputStream inputStream = getContentResolver().openInputStream(uri);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(inputStream, null, options);
inputStream.close();
int imageWidth = options.outWidth;
int imageHeight = options.outHeight;
int scaleFactor = Math.min(imageWidth / targetWidth, imageHeight / targetHeight);
inputStream = getContentResolver().openInputStream(uri);
options.inJustDecodeBounds = false;
options.inSampleSize = scaleFactor;
options.inPurgeable = true;
options.inInputShareable = true;
options.inPreferredConfig = Bitmap.Config.RGB_565;
bitmap = BitmapFactory.decodeStream(inputStream, null, options);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
```
注意:这里的`uri`是图片的URI,`targetWidth`和`targetHeight`是目标宽度和高度。
阅读全文