Bitmap从BitmapFactory.decodeFile(filename)返回null

当我调用这个函数没有图像视图中的图像bitmapFactory.decodefile(filename)显示空..请帮助这一点。

这是我的代码:

 public Bitmap ShowImage(String imageName,String userImageName ) { File sdcard_mainDirectory = new File(Environment.getExternalStorageDirectory(),"UserImages").getAbsoluteFile(); File file = new File(sdcard_mainDirectory, userImageName).getAbsoluteFile(); if (file != null) { try { String imageInSD = "/sdcard/UserImages/"+userImageName; Bitmap bitmap = BitmapFactory.decodeFile(imageInSD); return bitmap; } catch (Exception e) { e.printStackTrace(); } } return null; } 

Solutions Collecting From Web of "Bitmap从BitmapFactory.decodeFile(filename)返回null"

嗨它是null因为可能是图像的大小很大,得到exception,请检查您的日志,看看有没有outofmemory位图的任何错误,如果是的话,使用选项:

 BitmapFactory.Options options; try { String imageInSD = "/sdcard/UserImages/" + userImageName; Bitmap bitmap = BitmapFactory.decodeFile(imageInSD); return bitmap; } catch (OutOfMemoryError e) { try { options = new BitmapFactory.Options(); options.inSampleSize = 2; Bitmap bitmap = BitmapFactory.decodeFile(imageInSD, null, options); return bitmap; } catch(Exception e) { Log.e(e); } } 

你为什么要这样做String imageInSD =“/ sdcard / UserImages /”+ userImageName;

我想如果你得到一个.png文件存在然后只是,

  Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); 

注:另外检查你有一个Android支持的图像文件是在该位置存在..

尝试添加SD卡访问权限READ_EXTERNAL_STORAGE和/或WRITE_EXTERNAL_STORAGE。 这个对我有用。

确保在你的选项(BitmapFactory.Options)中, InJustDecodeBounds被设置为false ,否则它将返回null。 当你只是想要解码文件,但是在代码中不需要它的时候,这可以设置为true。 这样就不需要分配额外的内存。 在这里看到更多的解释。

这很简单:你的文件不是Android的Bitmap实现不支持的图像或图像,或者你的path是无效的。


查看BitmapFactory.decodeFile(String file)文档:

返回
得到的解码位图,如果无法解码则返回null。


通常当位图不能被解码时,一些日志被打印到logcat。 仔细检查他们。

我缺lessAPI级别大于16的运行时权限检查。