如何通过调用 Intent(MediaStore.ACTION_IMAGE_CAPTURE) 获取拍摄的照片的位图?



首先,我创建了唯一的文件路径来存储使用日期的照片:

File file = new File(Environment.getExternalStoragePublicDirectory( 
Environment.DIRECTORY_DCIM),"raspberry");
String dateString = new SimpleDateFormat("MM/dd/yyyy_HH:mm:ss").format(new Date());
filePath=new File(file,"SideBySide4_"+dateString+".jpg");

我使用我在清单和 xml 中定义的文件提供程序从filePath生成了一个 URI:

mUri = FileProvider.getUriForFile(this,
BuildConfig.APPLICATION_ID + ".provider",
filePath);
mCurrentPhotoPath = "file:" + filePath.getAbsolutePath();//for getting Bitmap in onActivityResult()

然后,我启动了相机Intent,并给它Uri来存储拍摄的照片:

Intent takePictureIntent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, mUri);
startActivityForResult(takePictureIntent,REQUEST_TAKE_PHOTO);

然后在onActivityResult()中,我尝试获取位图:

Uri imageUri=Uri.parse(mCurrentPhotoPath);
File file=new File(imageUri.getPath());
try{
InputStream ims=new FileInputStream(file);
photoBitmap=BitmapFactory.decodeStream(ims);
}catch(FileNotFoundException e){
return;
}

但是照片位图是空

解决方案:

你可以做这样的事情:

在你的onActivityResult((中,点击图片后,你会得到data中的数据,所以:

Bitmap picture = (Bitmap) data.getExtras().get("data");

可以使用。

希望有用。

最新更新