【问题标题】:Android get URI of cropped image from IntentAndroid 从 Intent 获取裁剪图像的 URI
【发布时间】:2017-02-05 12:04:47
【问题描述】:

我正在尝试从 Android 相机捕获图像/从图库中选择图像,然后在对其执行其他操作之前对其进行裁剪。我无法取回裁剪图像的 URI。任何有关如何在图像被裁剪后取回图像 URI 的帮助将不胜感激!

下面的代码与我的 onActivityResult 和我执行裁剪的函数有关

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
        if (requestCode == SELECT_FILE || requestCode == REQUEST_IMAGE_CAPTURE) {
            if(!IS_CAMERA_USED) {
                selectedImageUri = data.getData();
            }
            performCrop();
        }
        else if(requestCode == CROP_IMAGE){
            selectedImageUri = data.getData();
            onSelectedImageResult();
        }
    }
}



    public void performCrop() {
    // take care of exceptions
    Display display = getWindowManager().getDefaultDisplay();
    try {
        // call the standard crop action intent (the user device may not
        // support it)
        Intent cropIntent = new Intent("com.android.camera.action.CROP");
        // indicate image type and Uri
        cropIntent.setDataAndType(selectedImageUri, "image/*");
        // set crop properties
        cropIntent.putExtra("crop", "true");
        // indicate aspect of desired crop
        cropIntent.putExtra("aspectY", 1);
        if(IS_PROFILE_PICTURE) {
            cropIntent.putExtra("aspectX", 1);
        }
        else {
            cropIntent.putExtra("aspectX", 2);
        }
        // indicate output X and Y
        cropIntent.putExtra("outputX", display.getWidth());
        cropIntent.putExtra("outputY", display.getHeight());
        // retrieve data on return
        cropIntent.putExtra("return-data", true);
        // start the activity - we handle returning in onActivityResult
        startActivityForResult(cropIntent, CROP_IMAGE);
    }
    // respond to users whose devices do not support the crop action
    catch (ActivityNotFoundException anfe) {
        Toast toast = Toast
                .makeText(this, "This device doesn't support the crop action!", Toast.LENGTH_SHORT);
        toast.show();
    }
}

问题在于selectedImageUri = data.getData() 行,其中data.getData() 在完成裁剪后返回null。如何取回裁剪图像的 URI?我不想得到data.getExtras.getParcelable("data"),因为它会返回缩略图并破坏图像分辨率。

提前致谢!

【问题讨论】:

标签: java android android-image android-implicit-intent android-crop


【解决方案1】:

您可以使用以下代码获取图像位图:

if (requestCode == CROP_IMAGE) {
    if (data != null) {
        Bundle extras = data.getExtras();
        if (extras != null) {
            Bitmap selectedBitmap = extras.getParcelable("data");

            //imgView.setImageBitmap(selectedBitmap);
        }
    }
}

我认为 URI 是不可能的,因为裁剪后的图像没有保存在存储中。

【讨论】:

    【解决方案2】:

    感谢您的所有回答,但我发现了一些更易于合并和使用的方法,可以避免由于 `com.android.camera.action.CROP' 类引起的所有麻烦,可以在here

    【讨论】:

      【解决方案3】:

      我认为您应该将裁剪后的 Bitmap 保存到存储中,然后使用裁剪后的 Bitmap 的 URI 对其执行某些操作! 我知道这不是一项专业的工作,但至少应该这样做

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-30
        • 1970-01-01
        相关资源
        最近更新 更多