2014-02-12 19 views
0

我跟法师源打在WPF和尝试这个简单的测试,看看能不能买到什么幸运:为什么从服务器加载图像的简单代码不起作用?

var test = new BitmapImage(new Uri("https://thenotebook.org/sites/default/files/fallCartoon.jpg")); 
看着调试窗口中测试时

,它的所有属性都设置为null,因此它似乎没有加载图像。为什么?

+0

你能在同一个URI你的浏览器打开该影像?如果单独创建URI然后将其馈送到Bitmap会发生什么? –

+0

是的,我可以。我这样做是为了确保它是一个有效的uri。 – mans

回答

0

BitmapImage异步加载网络数据。这意味着它在后台开始下载时立即返回。所以你的代码可能没有问题。检查IsDownloading属性。订阅DownloadCompletedDownloadFailed事件。根据我们的意见

同步版本:

var bytes = new WebClient().DownloadData("https://thenotebook.org/sites/default/files/fallCartoon.jpg"); 
var test = new BitmapImage(); 
test.BeginInit(); 
test.StreamSource = new MemoryStream(bytes); 
test.EndInit(); 
Console.WriteLine(test.PixelWidth); 
Console.WriteLine(test.PixelHeight); 
+0

谢谢。我有什么方法可以同步吗?我试过chacheoption并将它设置为None,但没有区别 – mans

+0

我不认为这是可能的。它已被问:已经问:http://stackoverflow.com/questions/3659574/synchronously-download-an-image-from-url。我会用WebClient下载文件,并从内存流中初始化位图。所以你不需要保存一个临时文件。 – fejesjoco

0

继fejesjoco的建议是:

public static BitmapImage ImageFromUriSync(string uri) 
{ 
    using(var client = new WebClient()) 
    { 
     byte[] data = client.DownloadData(uri); 

     using(var stream = new MemoryStream(data)) 
     { 
      var img = new BitmapImage(); 
      img.BeginInit(); 
      img.CacheOption = BitmapCacheOption.OnLoad; 
      img.StreamSource = stream; 
      img.EndInit(); 

      return img; 
     } 
    } 
} 
相关问题