以前写的换头像的功能用到相机,代码大致如下:
- 先调用相机去拍照:
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, mUriFile);
startActivityForResult(intent, TAKE_PHOTO);
- 后裁剪:
private void cropPhoto(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
// 开启在intent中设置显示的View可裁剪
intent.putExtra("crop", true);
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪图片的宽高
intent.putExtra("outputX", AVATAR_SIZE);
intent.putExtra("outputY", AVATAR_SIZE);
intent.putExtra("return-data", true);
startActivityForResult(intent, CROP_PHOTO);
}
- 然后再onactivityresult里获取:
photo = data.getParcelableExtra("data");
但是photo获取出来为null,怎么破?
求帮助
先谢过
你好,你在拍照的时候传入了MediaStore.EXTRA_OUTPUT参数,这样就会导致在onActivityResult中的
data.getData("data")为null。
你可以不设置MediaStore.EXTRA_OUTPUT参数,能正常获取Uri uri = data.getData("data");
但是这个uri地址的图片是经过系统压缩的,应该不符合你的需求。
或者你可以设置mUriFile为全局变量,在cropPhoto方法中直接使用。
希望可以帮助到你 :)
private File mUriFile;
private static final int CAMERA_PIC = 1;
private static final int CROP_PIC = 2;