现在,需要裁剪所选的图像部分,然后显示和保存已裁剪的图像。
编辑:
我使用意图打开图像并使用intent.putExtra("crop","true");进行裁剪。
但是,在传递意图时,我想打开已知URI的图像,而不是打开整个图像库相册。
有人能否建议如何通过意图传递来打开特定的URI以打开图像。
提前致谢。
BitmapRegionDecoder
来裁剪图像。这非常有用,因为在此API出现之前,您必须将整个图像加载到内存中才能进行裁剪。对于5mpix和8mpix相机来说,通常不可能进行裁剪而不进行子采样(即裁剪后的图像会丢失大量的分辨率)。更新:在问题被编辑并更加准确地描述后,我修改了我的答案。
你遇到的问题已经有很长的历史了,也在stackoverflow上有相关讨论:
无法在Android中找到com.android.camera.CropImage activity
其中一个回答已经描述了你需要做的。请注意,你使用的intent不是官方SDK的一部分,你可能会遇到不同类型的问题。我遇到的问题是在相机拍摄图像后立即进行裁剪。此外,它在不同的Android版本之间不兼容,所以如果你在1.5上让它工作,可能在2.3上不起作用。其他有用的链接:
看看我对这个问题的回答。它没有涉及到你问题中的触摸调整大小方面,但是处理了在原始图像上绘制部分图像的问题。
底线是,你不想使用ImageView,因为它主要用于显示具有各种缩放属性的静态图像。你最好使用一个自定义视图,并重写draw()方法。
裁剪图片
private void cropImage() {
// Use existing crop activity.
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(capturedImageUri, IMAGE_UNSPECIFIED);
// Specify image size
intent.putExtra("outputX", IMAGE_DIMENSION);
intent.putExtra("outputY", IMAGE_DIMENSION);
// Specify aspect ratio, 1:1
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("scale", true);
intent.putExtra("return-data", true);
// REQUEST_CODE_CROP_PHOTO is an integer tag you defined to
// identify the activity in onActivityResult() when it returns
startActivityForResult(intent, REQ_CODE_CROP_PHOTO);
}