[英]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;
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.