我一直在关注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);
答案 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 但大概有错误。我会关闭它,再看看并在必要时提出一个新问题。