Как динамически загружать и отображать изображения в приложении метро Windows8 - PullRequest
2 голосов
/ 03 марта 2012

Я получаю URL изображения во время выполнения из программы чтения XML-файлов. Этот URL-адрес изображения передается приведенному ниже методу для его динамической загрузки.

 public void Display_Image(string MyURL)
  {
           BitmapImage bi = new BitmapImage();
           bi.UriSource = new Uri(this.BaseUri, MyURL);
           Img_Poster.Source = bi;
  }

Но это не работает. У меня нет источника изображения. Приведенный выше код прекрасно работает со статическим URL, предоставленным во время компиляции. Что мне нужно сделать больше?

Ответы [ 2 ]

4 голосов
/ 03 марта 2012

Метод, который я предложил ниже, устарел. Однако создание нового растрового изображения, созданного динамически с использованием Uri, определенного во время выполнения, поддерживается IS и работает в RTM-сборке Windows 8. Display_Image (url) должен работать, как вы ожидаете.


Вы можете получить поток изображений с помощью помощника CreateFromUri: http://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.streams.streamreference.createfromuri.aspx#Y0

var stream = RandomAccessStreamReference.CreateFromUri(new Uri(imageUrl))

После этого вы сможете установить источник вашего точечного рисунка в RandomAccessStream, который возвращает помощник

2 голосов
/ 12 января 2014

У меня были похожие проблемы с ранее работавшим битмап-кодом, не работающим в Windows RT, ранняя попытка убеждает меня, что он отказывается загружать что-либо, если только это не будет отображаться в пользовательском интерфейсе (здесь мне нужно было вставитьЗадержка в 1 мс перед назначением источников только для того, чтобы заставить его запускать загрузку образа):

var image = .... // reference to animage on the UI
var placeholder = ... // a placeholder BitmapImage
var source = ... // uri to download

image.Source = placeholder;
var src = new BitmapImage(new Uri(source));
src.ImageOpened += (s, e) =>
{
    var bi = s as BitmapImage;
    image.Source = bi;
};

image.Source = src;
// Delay required to trigger download
await Task.Delay(1);
image.Source = placeholder;

Вот еще одно решение, которое я с успехом попробовал:

var image = .... // reference to animage on the UI
var source = ... // uri to download
var placeholder = ... // a placeholder BitmapImage

image.Source = placeholder;

var bytes = await new HttpClient().GetByteArrayAsync(source);
var img = new BitmapImage();
await img.SetSourceAsync(bytes.AsBuffer().AsStream().AsRandomAccessStream());
image.Source = img;
...