以前写的换头像的功能用到相机,代码大致如下:
- 先调用相机去拍照:
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;
private void takePic() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
mUriFile = new File(Environment.getExternalStorageDirectory() + "/Download/" + System.currentTimeMillis());
try {
mUriFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mUriFile));
startActivityForResult(intent, CAMERA_PIC);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case CAMERA_PIC:
cropPhoto(Uri.fromFile(mUriFile));
break;
case CROP_PIC:
//data.getParcelableExtra("data")
Log.d(TAG, "error");
break;
}
}
private void cropPhoto(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 2);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 200);
intent.putExtra("outputY", 300);
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
intent.putExtra("return-data", true);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", true);
startActivityForResult(intent, CROP_PIC);
}