2015-03-18 3 views
1

Я должен получить изображение с URL-адреса и преобразовать его в byte[]. Следующее, что я достигConvert 'Xamarin.Form.Image' type 'byte []'

var webImage = new Image { Aspect = Aspect.AspectFit }; 
webImage.Source = ImageSource.FromUri(new Uri("http://xamarin.com/content/images/pages/forms/example-app.png")); 

, но теперь я не могу преобразовать тип изображения в byte[].

Это правильный подход? Любая помощь будет оценена по достоинству.

+0

возможно дубликат [Преобразование UIImage в массив байт] (http://stackoverflow.com/questions/17112314/converting-uiimage-to-byte-array) – Krumelur

+0

его не дубликат, вопрос, который вы указали поскольку дубликат - только iOS –

+0

@Rohit Исправить, но вам придется делать это на основе платформы. – Krumelur

ответ

0

Я не пробовал это, но из своей первоначальной мысли вам понадобится Стрим. Для этого вы можете использовать StreamImageSource

Оттуда вы можете использовать код от this.

+0

public static byte [] ReadStreamIntoByte (поток ввода) { Использование (MemoryStream ms = new MemoryStream()) { input.CopyTo (ms); возврат мс.ToArray(); } } не работает с StreamImageSource в качестве входного параметра. – zuckerthoben

0

Xamarin.Forms внутри он использует IImageSourceHandler, который имеет реализации как

  • ImageLoaderSourceHandler - для UriImageSource
  • StreamImagesourceHandler - для StreamImageSource
  • и так далее

Для чтения данных из UriImageSource Вы должен использовать ImageLoaderSourceHandler, который является классом платформы. Таким образом, при каждом использовании платформы код, как

var handler = new ImageLoaderSourceHandler(); 
var uiimage = await handler.LoadImageAsync(source, new CancellationToken(), UIScreen.MainScreenScale); 

Затем вы можете достичь каких-либо данных из UIImage под прошивкой или Bitmap под Android. Есть много учебников, как получить byte [] от них.

0

FFImageLoading (https://github.com/molinch/FFImageLoading/) CachedImage имеет GetImageAsJPG и GetImageAsPNG методы. Это прямая замена Xamarin.Forms Image с множеством дополнительных функций.

Вот код, используемый для получения изображений (он может быть использован в Image класс пользовательских рендереров):

+0

Является ли ваше решение решением проблемы? Я также задаюсь вопросом, находится ли он еще в разработке, потому что я не могу построить решение. «FFImageLoading.Transformations.Windows» не совместим с uap10.0 »или« wpa81 »и т. Д. – zuckerthoben

0

Это Возможное использование WebClient для получения массива байтов из URL-адреса.

var webClient = new WebClient(); 
byte[] byteImage = webClient.DownloadData (imageURL);