Как сохранить изображения на устройстве iOS с помощью .Net MAUI?

У меня есть приложение .Net MAUI (.NET 8), которое делает фотографии, и я хотел бы сохранить его в галерее, даже если оно находится в альбоме камеры. У меня есть следующий код для сохранения фотографии, но он на Android.

        public static async Task SaveImage(Stream imageStream)
        {
            using var stream = imageStream;
            using var memoryStream = new MemoryStream();
            stream.CopyTo(memoryStream);

            stream.Position = 0;
            memoryStream.Position = 0;

#if ANDROID
            var context = Platform.CurrentActivity;

            if (OperatingSystem.IsAndroidVersionAtLeast(29))
            {
                string albumPath = Path.Combine(Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDcim).AbsolutePath, "GPV2");
                if (!Directory.Exists(albumPath))
                {
                    Directory.CreateDirectory(albumPath);
                }
                Android.Content.ContentResolver resolver = context.ContentResolver;
                Android.Content.ContentValues contentValues = new();
                contentValues.Put(Android.Provider.MediaStore.IMediaColumns.DisplayName, "image.png");
                contentValues.Put(Android.Provider.MediaStore.IMediaColumns.MimeType, "image/png");
                contentValues.Put(Android.Provider.MediaStore.IMediaColumns.RelativePath, "DCIM/" + "image");
                Android.Net.Uri imageUri = resolver.Insert(Android.Provider.MediaStore.Images.Media.ExternalContentUri, contentValues);

                var os = resolver.OpenOutputStream(imageUri);
                Android.Graphics.BitmapFactory.Options options = new();
                options.InJustDecodeBounds = true;
                var bitmap = Android.Graphics.BitmapFactory.DecodeStream(stream);
                bitmap.Compress(Android.Graphics.Bitmap.CompressFormat.Png, 100, os);
                os.Flush();
                os.Close();
            }
            else
            {
                Java.IO.File storagePath = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures);
                string path = System.IO.Path.Combine(storagePath.ToString(), "image.png");
                System.IO.File.WriteAllBytes(path, memoryStream.ToArray());
                var mediaScanIntent = new Android.Content.Intent(Android.Content.Intent.ActionMediaScannerScanFile);
                mediaScanIntent.SetData(Android.Net.Uri.FromFile(new Java.IO.File(path)));
                context.SendBroadcast(mediaScanIntent);
            }

#endif
        }

Я оставлю это здесь, если это поможет.

Я новичок в создании приложений для устройств Apple, таких как iOS, и не знаю, смогу ли я делать то, что хочу.

У меня есть все разрешения на камеру и мультимедиа для iPhone.

🤔 А знаете ли вы, что...
C# (C Sharp) - это современный объектно-ориентированный язык программирования, разработанный Microsoft.


2
148
1

Ответ:

Решено

Они прислали мне следующую ссылку: https://learn.microsoft.com/en-us/answers/questions/1321167/how-to-save-image-to-album-of-cellphone-in-maui (сын Шивбабы).

Я поставил следующий код:

public static void SaveImageToPhotosAlbums(Stream imageStream)
{
    // Convert Stream to byte[]
    byte[] imageData;
    using (MemoryStream ms = new MemoryStream())
    {
        imageStream.CopyTo(ms);
        imageData = ms.ToArray();
    }

    // Convert byte[] to NSData
    var nsData = NSData.FromArray(imageData);

    // Load UIImage from NSData
    var image = UIImage.LoadFromData(nsData);

    // Save image to Photos Album
    image.SaveToPhotosAlbum((img, error) =>
    {
        if (error != null)
        {
            // Handle error
            Console.WriteLine($"Error saving image: {error.LocalizedDescription}");
        }
        else
        {
            Console.WriteLine("Image saved successfully.");
        }
    });
}

И при этом использовании:

использование Фонда; использование фотографий; использование UIKit;

И это работает для меня.