为什么BitmapFactory decodeFile返回null?

时间:2017-05-03 11:22:44

标签: android bitmapfactory

我一直在关注Android开发人员指南,以创建一个使用现有相机应用拍摄照片的应用。接下来我尝试使用指南https://developer.android.com/training/camera/photobasics.html#TaskScalePhoto的这一部分将它们放入图像视图中 但BitmapFactory decodeFile返回null。我将其简化为以下代码,但它给出了相同的结果。

Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath);
imageView.setImageBitmap(bitmap);

mCurrentPhotoPath设置为image.getAbsolutePath(),示例是 存储/模拟/ 0 / Android设备/数据文件// /图片/ JPEG_20170503_102533_2060032401.jpg

我可以将mCurrentPhotoPath的值硬编码为已知照片,但仍然会为空。

但是,如果我用它替换它 存储/模拟/ 0 / DCIM /相机/ IMG_20161124_145814981_HDR.jpg (使用我的手机普通相机应用程序单独创建的照片)然后它可以工作。

我有

uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"

在我的清单中。这两个文件具有相同的权限,大小相同。我可以将它们复制到别处,它们似乎是有效的jpeg文件。 可能会发生什么想法?

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

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

2 个答案:

答案 0 :(得分:0)

您必须通过选项方法缩放图像。

 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);

答案 1 :(得分:0)

我现在看到我用来拍照的程序是创建2个文件:存储中的实际图像/模拟/ 0 / DCIM以及在应用程序的存储区域中创建的文件电话,所以问题似乎在于我如何创建/保存图像。我在这里使用代码https://developer.android.com/training/camera/photobasics.html#TaskPath 但大概有错误。我会关闭它,再看看并在必要时提出一个新问题。