Я исследовал и упал на это решение: http://forums.xamarin.com/discussion/22682/is-there-a-way-to-turn-an-imagesource-into-a-byte-array
Первоначальный вопрос: http://forums.xamarin.com/discussion/29569/is-there-a-cross-platform-solution-to-imagesource-to-byte#latest
Мы хотим загрузить изображение через HTTP-сообщение, вот что мы пробовали:
HttpClient httpClient = new HttpClient ();
byte[] TargetImageByte = **TargetImageSource**; //How to convert it to a byte[]?
HttpContent httpContent = new ByteArrayContent (TargetImageByte);
httpClient.PostAsync ("https://api.magikweb.ca/debug/file.php", httpContent);
Нам также приходится сталкиваться с трудностями с библиотеками, которые мы должны включить в предложения. Кажется, что using System.IO;
работает, но он не дает нам доступа к таким классам, как FileInfo
или FileStream
.
Кто-нибудь знает, как это можно сделать, помимо специализированных конвертеров для конкретной платформы? Возможно, функция Xamarin.Forms.ImageSource toByte()?
Lemme знает, нужна ли вам дополнительная информация.
TargetImageSource
является Xamarin.Forms.ImageSource
.
ImageSource TargetImageSource = null;
Решение (Стен был прав)
ImageSource
должен происходить из другого типа, чтобы существовать, что предыдущий тип может быть преобразован в byte[]
. В этом случае я использую Xamarin.Forms.Labs, чтобы сделать снимок, и он возвращает MediaFile
, в котором FileStream
доступен через свойство Source
.
//--Upload image
//Initialization
HttpClient httpClient = new HttpClient ();
MultipartFormDataContent formContent = new MultipartFormDataContent ();
//Convert the Stream into byte[]
byte[] TargetImageByte = ReadFully(mediaFile.Source);
HttpContent httpContent = new ByteArrayContent (TargetImageByte);
formContent.Add (httpContent, "image", "image.jpg");
//Send it!
await httpClient.PostAsync ("https://api.magikweb.ca/xxx.php", formContent);
App.RootPage.NavigateTo (new ClaimHistoryPage());
Функция:
public static byte[] ReadFully(Stream input)
{
using (MemoryStream ms = new MemoryStream()){
input.CopyTo(ms);
return ms.ToArray();
}
}