我正在使用“com.android.camera.action.CROP”来裁剪来自用户图片库的图片。
裁剪功能:
private void performCrop(String picUri) {
try {
Intent cropIntent = new Intent("com.android.camera.action.CROP");
File f = new File(picUri);
Uri contentUri = Uri.fromFile(f);
cropIntent.setDataAndType(contentUri, "image/*");
cropIntent.putExtra("crop", "false");
cropIntent.putExtra("aspectX", 1);
cropIntent.putExtra("aspectY", 1);
cropIntent.putExtra("outputX", 1024); //512
cropIntent.putExtra("outputY", 1024); //512
cropIntent.putExtra("return-data", true);
startActivityForResult(cropIntent, RESULT_CROP);
}
catch (ActivityNotFoundException e) {
String errorMessage = "your device doesn't support the crop action!";
Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT);
toast.show();
}
}
并将结果设置为图像视图:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == GALLERY_ACTIVITY_CODE) {
if(resultCode == Activity.RESULT_OK){
picturePath = data.getStringExtra("picturePath");
//perform Crop on the Image Selected from Gallery
performCrop(picturePath);
}
}
if (requestCode == RESULT_CROP ) {
if(resultCode == Activity.RESULT_OK){
Bundle extras = data.getExtras();
Bitmap selectedBitmap = extras.getParcelable("data");
// Set The Bitmap Data To ImageView
addImageImageView.setImageBitmap(selectedBitmap);
addImageImageView.setScaleType(ImageView.ScaleType.FIT_XY);
}
}
}
在某些设备上,裁剪操作会返回模糊且小尺寸的图像(例如,4128 * 2322像素图像变为160 * 160像素裁剪图像)。在大多数设备上,它运行良好。我不确定outputX和Y是什么做的,但更改它们并不能解决我的问题。
答案 0 :(得分:0)
许多开发人员正在通过 com.android.camera.action.CROP 操作在Intent上调用 startActivity()。他们正在这样做以裁剪图像。
这是一个非常糟糕的主意。
在这种特定情况下,AOSP Camera应用程序支持此Intent操作。该应用程序并非在所有设备上都存在。缺少此应用程序的设备将不会对此未记录的Intent操作做出响应,并且您的应用程序将崩溃。
有几个用于在Android中裁剪图像的开源库。我没有尝试过任何一个,因此无法保证任何工作的良好程度。但是,与依靠任何特定用户设备上可能不存在的应用程序中未记录的Intent操作相比,它们是更安全的选择。
这里有一些库可供考虑:
希望这可以解决您的问题。