Android应用读取图片报错:BitmapFactory返回Null(FileNotFoundException)
问题原因与解决方案
你遇到的问题核心在于**BitmapFactory.decodeFile()是用来读取文件系统中的物理文件路径,而res目录下的资源是打包进APK的内部资源,并非手机文件系统里的独立文件**,所以直接用"drawable-v24/ean13.bmp"这种路径肯定找不到目标文件,自然会抛出FileNotFoundException并返回null。
下面是几种正确读取res中图片并获取Bitmap的方法:
方法一:使用BitmapFactory.decodeResource()
这是最直接适配Android资源体系的方式,通过资源ID来读取:
// 在Activity中直接调用 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ean13);
如果是在非Activity类(比如Fragment、自定义View)中,需要传入Context来获取Resources实例:
// Fragment中 Bitmap bitmap = BitmapFactory.decodeResource(requireContext().getResources(), R.drawable.ean13); // 自定义View中 Bitmap bitmap = BitmapFactory.decodeResource(getContext().getResources(), R.drawable.ean13);
注意:系统会自动根据设备API版本匹配对应的drawable目录(比如你放的drawable-v24),你不需要手动指定目录路径,只需要用
R.drawable.ean13即可。
额外检查项
- 确认你的资源文件名符合Android规范:只能包含小写字母、数字和下划线,不能有大写字母或特殊字符(你的
ean13.bmp是符合要求的,但如果是EAN13.bmp就会导致资源ID无法生成)。 - 检查图片是否真的存在于对应的res/drawable目录下,没有被误放到mipmap或其他文件夹中。
- 如果图片尺寸过大,可以添加采样率配置避免OOM,但你的场景只是检查像素,这个可能暂时不需要,不过如果后续仍出现Bitmap为null的情况,可以排查这个点。
内容的提问来源于stack exchange,提问作者Sba
相关产品推荐
相关产品推荐

