我在运行时从xml文件阅读器获取图像URL。此图像URL将传递给以下方法以动态下载。
public void Display_Image(string MyURL)
{
BitmapImage bi = new BitmapImage();
bi.UriSource = new Uri(this.BaseUri, MyURL);
Img_Poster.Source = bi;
}
但这不起作用。我没有得到任何图像源。上面的代码适用于编译时提供的静态URL。我还需要做些什么?
答案 0 :(得分:4)
我在下面建议的方法已经过时了。但是,创建一个在运行时确定的Uri动态创建的新Bitmap映像,并支持Windows 8的RTM版本.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
答案 1 :(得分:2)
我曾经遇到类似的问题,以前工作的Bitmap代码无法在Windows RT上工作,早期的尝试让我相信它拒绝下载任何东西,除非它将在UI上显示(这里,我需要插入一个在分配源之前1ms延迟只是为了让它触发图像下载):
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;