gpt4 book ai didi

crop - Android crop intent 不适用于系统图库应用,但适用于第 3 方应用

转载 作者:行者123 更新时间:2023-12-01 23:57:04 24 4
gpt4 key购买 nike

我尝试从 SD 卡中选择一张图片,然后对其进行裁剪。ACTION_PICK 可以,但是当我调用 ACTION_CROP 时,我的系统图库应用程序(我称之为 A)无法完成操作,但另一个应用程序 (B) 可以。
我尝试了以下案例:
1/由 A 选择然后由 A 裁剪 => 选择 OK,裁剪失败
2/B 采摘,A 裁剪 => 同第一种情况。
3/由 A 挑选,然后由 B 裁剪 => 一切正常。
4/由 B 挑选,然后由 B 裁剪 => 一切正常。
所以我的临时结论是:我的系统应用程序无法使用我的代码执行裁剪操作(可能是我忘记了什么)。这是我的代码:
ACTION_PICK:

public Intent galleryIntent() {
Intent galleryIntent = new Intent(Intent.ACTION_PICK);
galleryIntent.setType("image/*");
galleryIntent.putExtra("return-data", true);
return galleryIntent;
}


ACTION_CROP:

public Intent cropIntent(Uri inUri, int outputX, int outputY,
boolean isScale) {
Intent cropIntent = new Intent("com.android.camera.action.CROP");
cropIntent.setDataAndType(inUri, "image/*");
cropIntent.putExtra("crop", "true");
cropIntent.putExtra("aspectX", outputX);
cropIntent.putExtra("aspectY", outputY);
cropIntent.putExtra("outputX", outputX);
cropIntent.putExtra("outputY", outputY);
cropIntent.putExtra("scale", isScale);
cropIntent.putExtra("return-data", true);
return cropIntent;
}


我的 onActivityResult 方法

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case REQUEST_CODE_GALLERY:
imageUri = data.getData();
startActivityForResult(cropIntent(imageUri,
500, 500, true), REQUEST_CODE_CROP);
break;
case REQUEST_CODE_CROP:
Bundle extras = data.getExtras();
Bitmap tempBitmap = extras.getParcelable("data");
imgvMain.setImageBitmap(null);
imgvMain.setImageBitmap(tempBitmap);
break;
}
} else {
imageUri = null;
}
}


我错过了什么吗?
感谢您的关注!

最佳答案

我成功地将此代码用于 Android 2.2 及更高版本:

它会打开一系列可以获取图像文件的应用程序,例如图库应用程序。如果所选应用可以裁剪,它也会这样做。

裁剪后的图像将保存到提供的临时文件中。

(注意 KITKAT 的细微差别)。

        Intent intent = new Intent();

intent.setType("image/*");
intent.putExtra("crop", "true");
intent.putExtra("outputX", Constants.IMAGE_WIDTH);
intent.putExtra("outputY", Constants.IMAGE_HEIGHT);
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("scale", true);
intent.putExtra("scaleUpIfNeeded", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(<a temp file created somewhere>));
intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString());

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT)
{
intent.setAction(Intent.ACTION_GET_CONTENT);
}
else
{
intent.setAction(Intent.ACTION_PICK);
intent.setData(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
}

startActivityForResult(intent, RESULT_CROP);

编辑:我最终使用自定义裁剪使用:https://github.com/biokys/cropimage .这非常简单,我再也没有裁剪问题了:-)

关于crop - Android crop intent 不适用于系统图库应用,但适用于第 3 方应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23136251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com