【发布时间】:2021-08-12 04:51:07
【问题描述】:
我正在使用图像裁剪器插件来捕获图片并裁剪它。然后我使用 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);
更新:
android - 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);
}
【问题讨论】:
-
您是否有权限在手机中存储文件?
-
是的,它将照片保存在缓存文件夹中,而不是画廊文件夹
-
嗯,你调试过它并查看它用于 FullPath 的路径吗?
-
FullPath 对我来说是
/data/user/0/com.companyname.appname/cache/cropped296.png完全正确,但在某些地方显然我错了 -
我有点困,所以我希望我能正确阅读代码。显示给客户端的图像实际上是现在通过缓存在其硬盘驱动器上的图像。当您执行 ImageSouce.FromFile(imageFille) 时,您实际上只是获取了该本地复制图像的路径,这是他们的缓存......并且您将其存储在同一个地方。
标签: c# android xamarin xamarin.forms mobile