Android 为什么BitmapFactory解码文件返回null?

Android 为什么BitmapFactory解码文件返回null?,android,bitmapfactory,Android,Bitmapfactory,我一直在遵循Android开发者指南创建一个应用程序,使用现有的摄像头应用程序拍摄一些照片。接下来,我将尝试使用指南的这一部分将它们放到imageview中 但BitmapFactory解码文件返回null。我将其简化为以下代码,但给出了相同的结果 Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath); imageView.setImageBitmap(bitmap); File dest = new File(mCurrent

我一直在遵循Android开发者指南创建一个应用程序,使用现有的摄像头应用程序拍摄一些照片。接下来,我将尝试使用指南的这一部分将它们放到imageview中 但BitmapFactory解码文件返回null。我将其简化为以下代码,但给出了相同的结果

Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath);
imageView.setImageBitmap(bitmap);
File dest = new File(mCurrentPhotoPath);
FileInputStream fis = null;
fis = new FileInputStream(dest);
Bitmap img = BitmapFactory.decodeStream(fis);
smallPhoto.setImageBitmap(img);
mCurrentPhotoPath设置为
image.getAbsolutePath()
,示例如下 存储/模拟/0/Android/data//files/Pictures/JPEG_20170503_102533_2060032401.jpg

我可以将mCurrentPhotoPath的值硬编码到一张已知的照片,但仍然得到null

但是如果我用 存储/仿真/0/DCIM/Camera/IMG_20161124_145814981_HDR.jpg (使用我的手机普通照相机应用程序单独创建的照片)然后它就可以工作了

我有

uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
在我的舱单上。这两个文件具有相同的权限,大小大致相同。我可以把它们复制到别处,它们似乎是有效的jpeg文件。 你知道会发生什么吗

我浏览了很多帖子,尝试了很多东西,包括下面的变化,但我得到了相同的结果

Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath);
imageView.setImageBitmap(bitmap);
File dest = new File(mCurrentPhotoPath);
FileInputStream fis = null;
fis = new FileInputStream(dest);
Bitmap img = BitmapFactory.decodeStream(fis);
smallPhoto.setImageBitmap(img);

必须通过“选项”方法缩放图像

 File dest = new File(mCurrentPhotoPath);
 FileInputStream fis = null;
 fis = new FileInputStream(dest);
 BitmapFactory.Options options = new BitmapFactory.Options();
 options.inSampleSize = scale;
 Bitmap img = BitmapFactory.decodeStream(fis, options);
 smallPhoto.setImageBitmap(img);

必须通过“选项”方法缩放图像

 File dest = new File(mCurrentPhotoPath);
 FileInputStream fis = null;
 fis = new FileInputStream(dest);
 BitmapFactory.Options options = new BitmapFactory.Options();
 options.inSampleSize = scale;
 Bitmap img = BitmapFactory.decodeStream(fis, options);
 smallPhoto.setImageBitmap(img);

我现在看到我用来拍照的过程是创建两个文件:存储/模拟/0/DCIM中的实际图像和在手机应用程序存储区域中创建的文件,所以问题似乎在于我如何创建/保存图像。我在这里使用代码
但我想我可能出了什么问题。我将关闭此窗口,再次查看并在必要时提出一个新问题。

我现在看到我用来拍照的过程是创建两个文件:存储/模拟/0/DCIM中的实际图像和手机上应用程序存储区域中创建的文件,所以问题似乎在于如何创建/保存图像。我在这里使用代码
但我想我可能出了什么问题。我将关闭此文件,再次查看并在必要时提出新问题。

路径以
/
开头。我预计您的所有操作都会失败,包括您所说的有效操作。可能传递了错误的BitmapOptions。第一个路径看起来格式不正确,中间有双
/
,如果位图变得太大而无法使用内存,则返回null。请尝试分辨率较小的图像。与其说文件大小重要,不如说分辨率重要;似乎可以使用/或不使用/。更正该帖子有//,但不知何故,这是我的错误:实际代码没有//。一幅图像不设置位图选项,也不进行缩放,另一幅则不设置。非常感谢,我们将尝试更低的分辨率。路径以
/
开头。我预计您的所有操作都会失败,包括您所说的有效操作。可能传递了错误的BitmapOptions。第一个路径看起来格式不正确,中间有双
/
,如果位图变得太大而无法使用内存,则返回null。请尝试分辨率较小的图像。与其说文件大小重要,不如说分辨率重要;似乎可以使用/或不使用/。更正该帖子有//,但不知何故,这是我的错误:实际代码没有//。一幅图像不设置位图选项,也不进行缩放,另一幅则不设置。谢谢,不过,我会尝试低分辨率。