gpt4 book ai didi

Android 图像裁剪 Uri 异常

转载 作者:太空宇宙 更新时间:2023-11-03 13:52:45 24 4
gpt4 key购买 nike

首先,我使用的是 Xamarin,但问题在原生 Java 项目上是一样的。我正在将 SDK 更新到 5.1,并且在之前运行良好的代码上遇到了一个奇怪的错误。

  imageStream = "file://" + imageStream;

Mvx.Trace("path: " + imageStream);

img = imageStream;

try {
Intent cropIntent = new Intent("com.android.camera.action.CROP");
// indicate image type and Uri
var fileUri = Android.Net.Uri.Parse(imageStream);
cropIntent.SetDataAndType(fileUri, "image/*");
// set crop properties
cropIntent.PutExtra("crop", "true");

// indicate aspect of desired crop
cropIntent.PutExtra("aspectX", 5);
cropIntent.PutExtra("aspectY", 4);
// indicate output X and Y
cropIntent.PutExtra("outputX", 1000);
cropIntent.PutExtra("outputY", 800);
// retrieve data on return
cropIntent.PutExtra("return-data", true);

// start the activity - we handle returning in onActivityResult
StartActivityForResult(cropIntent, PIC_CROP);
}

imageStream 是文件的路径。图像裁剪器本身可以正常加载并运行。然而,当我点击保存时,我在 logcat 中得到以下异常:

E/AndroidRuntime( 5333): FATAL EXCEPTION: BackgroundTask #1
E/AndroidRuntime( 5333): Process: com.google.android.apps.photos, PID: 5333
E/AndroidRuntime( 5333): java.lang.IllegalArgumentException: mediaStoreUri must be a MediaStore Uri

我没有在 MediaStore 或 MediaStore.Image 命名空间中找到与 Android.Net.Uri.Parse 类似的方法。这是否意味着我必须先将图像保存到 MediaStore,然后在调用 Intent 之前检索它?还是我错过了一个明显的解决方案?

干杯汤姆

最佳答案

好吧,看来我真的错过了一些东西,扩展了 uri 检索的代码以首先将图像放入媒体存储。

var file = new Java.IO.File(imageStream);
var bmp = BitmapFactory.DecodeFile(file.AbsolutePath);
img = MediaStore.Images.Media.InsertImage(ContentResolver, bmp, "" ,"");
var fileUri = Android.Net.Uri.Parse(img);

我觉得这可能有点矫枉过正,如果有的话请随时发表评论。但至少它解决了问题。

关于Android 图像裁剪 Uri 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33166216/

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