繁体   English   中英

将来自 Xam.Plugin.Media 5.0.1 的 imageSource 转换为 Xamarinforms 中的字节数组?

[英]Convert imageSource coming from Xam.Plugin.Media 5.0.1 to byte array in Xamarinforms?

if (!CrossMedia.Current.IsPickPhotoSupported)
        {
            await Application.Current.MainPage.DisplayAlert("Photos Not Supported", ":( Permission not granted to photos.", "OK");
            return;
        }
        var file = await Plugin.Media.CrossMedia.Current.PickPhotoAsync(new Plugin.Media.Abstractions.PickMediaOptions
        {
            PhotoSize = Plugin.Media.Abstractions.PhotoSize.Medium,
        });


        if (file == null)
            return;

        var tmpSrc = ImageSource.FromStream(() =>
        {
            var stream = file.GetStream();
            file.Dispose();
            return stream;
        });

ImageSource toBeConverted = tmpSrc;

  • 我希望将变量toBeConverted转换为 Byte[] 以便我可以将其发送到我的 webapi ...

ImageSource是一种为 Xamarin.Forms.Image 提供源图像以显示某些内容的方法。 如果您已经在屏幕上显示了某些内容,则您的Image视图填充了来自其他地方的数据,例如文件或资源或存储在内存中的数组中...... 您可以保留对它的引用并根据需要上传它,而不是尝试从ImageSource取回该数据。

因此,您可以在选择照片后从文件中获取字节数组。

var file = await Plugin.Media.CrossMedia.Current.PickPhotoAsync(new Plugin.Media.Abstractions.PickMediaOptions
    {
        PhotoSize = Plugin.Media.Abstractions.PhotoSize.Medium,
    });
if (file == null)
return;    
var bytes = File.ReadAllBytes(file.Path); // you could get  the byte[] here from the file path.
  • 这段代码也对我有用......

     private async void Capture() { if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported) { await Application.Current.MainPage.DisplayAlert("No Camera", ":( No camera available.", "OK"); return; } var file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions { Directory = "Test", SaveToAlbum = true, CompressionQuality = 75, CustomPhotoSize = 50, PhotoSize = PhotoSize.Medium, DefaultCamera = CameraDevice.Front }); if (file == null) return; var stream = file.GetStream(); if (stream != null) { var StreamByte = ReadAllBytes(stream); var NewStream = new MemoryStream(StreamByte); // stream = mystream; Device.BeginInvokeOnMainThread(() => { ImageSource = ImageSource.FromStream(() => NewStream); }); student.ProfilePicture = StreamByte; } } public byte[] ReadAllBytes(Stream instream) { if (instream is MemoryStream) return ((MemoryStream)instream).ToArray(); using (var memoryStream = new MemoryStream()) { instream.CopyTo(memoryStream); return memoryStream.ToArray(); } }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM