#c# #arrays #xamarin.forms #imagesource
#c# #массивы #xamarin.forms #источник изображений
Вопрос:
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…
Комментарии:
1.
File.ReadAllBytes(file.Path);
2. Может ли это сработать?
Ответ №1:
ImageSource
это способ предоставить исходное изображение для Xamarin.Формы.Изображение для отображения некоторого содержимого. Если вы уже показываете что-то на экране, ваше 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.
Ответ №2:
-
Этот код также работал для меня…
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(); } }