如何裁剪其URI在Android中已知的图像?

时间:2011-02-16 12:55:13

标签: android image crop

我希望在图像视图中显示的图像被选择为具有特定部分(并且仅选择的部分需要突出显示而其他部分需要半透明),并且该部分也可以根据需要调整大小或者由用户在触摸事件上完成。

现在,图像的选定部分需要被折叠,然后显示并保存裁剪后的图像。

编辑:

我使用Intent打开图像并使用intent.putExtra(“crop”,“true”)裁剪它;

但是在传递意图时我想打开其URI已知的图像,而不是打开整个图库的专辑。

任何人都可以建议,我如何通过传递打开图像的意图来打开特定的URI。 提前谢谢。

4 个答案:

答案 0 :(得分:3)

关于问题的最后部分,如果您使用的是最新的Gingerbread(2.3.3,API级别10),则可以使用BitmapRegionDecoder裁剪图像。

这很有用,因为在此API存在之前,您必须在裁剪之前将整个图像加载到内存中。对于5mpix和8mpix相机,如果没有二次取样通常是不可能的(即裁剪后的图像会失去很多分辨率)。

答案 1 :(得分:2)

更新:在编辑问题并进行更精确描述后更改了我的答案。

你所面临的问题有很长的历史,也是在SO:

unable to find com.android.camera.CropImage activity in android

一个答案描述了您的需求。请注意,您使用的是不属于官方SDK的意图,您可能会遇到不同类型的问题。我经历的问题是在相机拍摄图像后立即使用裁剪。此外,它不兼容不同的Android版本,所以如果你让它工作1.5也许它不适用于2.3。其他有用的链接:

http://groups.google.com/group/android-developers/browse_thread/thread/2dd647523926192c/569f36b5b28f2661?lnk=gst&q=Crop+image+intent#569f36b5b28f2661

http://groups.google.com/group/android-developers/browse_thread/thread/2dd647523926192c/dcbe5aef29eddad6?lnk=gst&q=Crop+image+intent#dcbe5aef29eddad6

http://groups.google.com/group/android-developers/browse_thread/thread/d7b6a133c164aa17/184bf3b85da2ce58?lnk=gst&q=Crop+image+intent#184bf3b85da2ce58

答案 2 :(得分:1)

查看我对this question的回答。它不涉及问题的触摸调整大小方面,而是处理在原始图像上绘制图像的部分。

底线是,您不想使用ImageView,因为这主要用于显示具有各种缩放属性的静态图像。最好使用带有重写draw()方法的自定义视图。

答案 3 :(得分:0)

用于裁剪图像

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);
}