首页 > 解决方案 > 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);
            
    }

标签: c#androidxamarinxamarin.formsmobile

解决方案


现在工作,我替换了这个:

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


推荐阅读