C# / Xamarin:在 Whatsapp 上保存图像和共享

C# / Xamarin: Saving image and Sharing on Whatsapp

我正在尝试从 Bitmap 中保存图像并在 whatsapp 中共享它,但是,当我将其保存在我的 phone 中并尝试打开它时,图像全黑了,所以,当我分享一下,我分享一张黑色图片。在我测试的其他 phone 中,我可以打开保存的图像,但在我正在测试的这个 phone 中,我不能。两者都是相同的 Android 版本。 在这张 phone 出现的黑色图像中,我可以在预览(画廊)中看到照片,但是,当我尝试打开它时它变黑了。

这是我保存位图的代码:

 public SKBitmap SaveImage(float ySize, SKBitmap bmpFormatted, SKBitmap standardBmp, int SKCanvasHeight)
        {
            float width = (float)screenSize.Width;
            bmpFormatted = new SKBitmap((int)width, SKCanvasHeight);
            SKRectI rect = new SKRectI(0, 0, (int)width, (int)ySize);
            standardBmp.ExtractSubset(bmpFormatted, rect);

            SKData data = bmpFormatted.Encode(SKEncodedImageFormat.Png, 100);
            byte[] bmpByte = data.ToArray();
            string directory = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, Android.OS.Environment.DirectoryDownloads);
            string path = Path.Combine(directory, "bmpSaved.png");

            File.WriteAllBytes(path, bmpByte);

            return bmpFormatted;
        }

这是我分享保存位图的代码:

string directory = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, Android.OS.Environment.DirectoryDownloads);
            string path = Path.Combine(directory, "bmpSaved.png");

            var _context = Android.App.Application.Context;

            Intent sendIntent = new Intent(global::Android.Content.Intent.ActionSend);

            sendIntent.PutExtra(global::Android.Content.Intent.ExtraText, "Whatsapp");
            sendIntent.SetType("image/*");

            sendIntent.PutExtra(Intent.ExtraStream, Android.Net.Uri.Parse("file://" + path));
            _context.StartActivity(Intent.CreateChooser(sendIntent, "Share"));
            return Task.FromResult(0);

有什么区别或其他方法吗?因为我需要它在两个 phone 中都有效。 有什么想法吗?

所以如果有人遇到和我一样的问题,试试这个(对我来说它有效):

using (var image = surface.Snapshot())
            using (var data = image.Encode(SKEncodedImageFormat.Png, 100))
            using (var stream = File.OpenWrite(Path.Combine(directory, "1.png")))
            {
                // save the data to a stream
                data.SaveTo(stream);
            }

感谢: