c# - Imagecropper 插件正在将图像保存在缓存文件夹中。如何保存在图库文件夹中?
问题描述
我正在使用图像裁剪器插件来捕获图片并裁剪它。然后我使用 Xamarin.MediaGallery 插件将该照片保存在手机的图库文件夹中
ImageCropping.Form 参考:https ://github.com/stormlion227/ImageCropper.Forms Xamarin.GalleryImage 参考:https ://github.com/dimonovdd/Xamarin.MediaGallery
错误: **System.ArgumentException:** 'filePath'
在线的 MediaGallery.SaveAsync(MediaFileType.Image, FullPath.ToString());
它工作得很好,但唯一的问题是默认情况下,它将图像保存在cache
文件夹中。当我尝试使用第二个插件保存在画廊文件夹中时,我得到一个错误
//Use ImageCropping.Form to take a photo & Crop
new ImageCropper()
{
PageTitle = "Crop Photo",
AspectRatioX = 5,
CropShape = ImageCropper.CropShapeType.Rectangle,
SelectSourceTitle = "Select source",
TakePhotoTitle = "Take Photo",
PhotoLibraryTitle = "Photo Library",
Success = (imageFile) =>
{
Device.BeginInvokeOnMainThread(() =>
{
//Step#0: ImageCropping.Form, by defaults, saves the image to the following path & gives it a random name:
// /data/user/0/com.companyname.appname/cache/cropped296.png
//Step#1: Get image full path from step#0
var FullPath = ImageSource.FromFile(imageFile);
//Step#2: Save in Gallery folder
MediaGallery.SaveAsync(MediaFileType.Image, FullPath.ToString());
});
}
}.Show(this);
更新:
安卓 - MainAcivity.cs
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
NativeMedia.Platform.Init(this, savedInstanceState);
CrossFingerprint.SetCurrentActivityResolver(() => Platform.CurrentActivity);
Stormlion.ImageCropper.Droid.Platform.Init();
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App());
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
protected override void OnActivityResult(int requestCode, Result resultCode, Intent intent)
{
if (NativeMedia.Platform.CheckCanProcessResult(requestCode, resultCode, intent))
NativeMedia.Platform.OnActivityResult(requestCode, resultCode, intent);
Stormlion.ImageCropper.Droid.Platform.OnActivityResult(requestCode, resultCode, intent);
base.OnActivityResult(requestCode, resultCode, intent);
}
解决方案
现在工作,我替换了这个:
var FullPath = ImageSource.FromFile(imageFile);
和:
var FullPath = imageFile;
我没有注意到,Image source
开始时正在返回带有一些额外文本的图像路径。例如:
File: /data/user/0/com.companyname.appname/cache/cropped296.png
但是imageFile
只返回路径/data/user/0/com.companyname.appname/cache/cropped296.png