5

我在画布上添加了 Windows.UI.Xaml.Controls.Image。我正在使用 HttpClient 进行 http 调用以下载图像。我将图像作为流获取并添加为 BitmapImage 对象的源,但未加载图像。谁能告诉我我做错了什么

代码 :

        var httpClient = new HttpClient();
        var content = await httpClient.GetStreamAsync(imageUrl);


            var ras = new InMemoryRandomAccessStream();
            await content.CopyToAsync(ras.AsStreamForWrite());
            bitmap = new BitmapImage();
            bitmap.SetSource(ras);

            myImage.Source = bitmap;
4

4 回答 4

10

我设法让它工作。下面是代码:

     var httpClient = new HttpClient();            
     var contentBytes = await httpClient.GetByteArrayAsync(uri);                          
     var ims = new InMemoryRandomAccessStream();                
     var dataWriter = new DataWriter(ims);
     dataWriter.WriteBytes(contentBytes);
     await dataWriter.StoreAsync();
     ims.Seek(0);

     bitmap = new BitmapImage();                
     bitmap.SetSource(ims);                

     myImage.Source = bitmap;                
于 2012-08-02T04:54:09.003 回答
5

我相信这会奏效:

myImage.Source = new BitmapImage(new Uri(imageUrl));
于 2012-08-01T13:08:10.560 回答
2

这是我用来从网络上成功下载图像的代码片段。它将图像复制到本地存储并返回一个指向新(本地)位置的 URI。

        using (var response = await HttpWebRequest.CreateHttp(internetUri).GetResponseAsync())
        {
            using (var stream = response.GetResponseStream())
            {
                var desiredName = string.Format("{0}.jpg", uniqueName);
                var file = await ApplicationData.Current.LocalFolder.CreateFileAsync(desiredName, CreationCollisionOption.ReplaceExisting);

                using (var filestream = await file.OpenStreamForWriteAsync())
                {
                    await stream.CopyToAsync(filestream);
                    return new Uri(string.Format("ms-appdata:///local/{0}.jpg", uniqueName), UriKind.Absolute);
                }
            }
        }
于 2012-08-01T17:06:20.220 回答
1

你可以使用 XAML 做到这一点:

操作系统会进行一些缓存,但这并不能保证每次您需要图像时它都会在缓存中。如果你想实现它,你需要将它保存到本地存储中。

于 2012-08-02T00:03:29.837 回答