2011-01-13 58 views
1

我想在应用程序启动时预先载入大量图像,这是一次性的事情。WPF从Blob存储下载图像字节

我有一个Image类,它包含存储在云作为Blob存储的图像的URL(这个地址是HTTPS地址BTW)

我想从云端下载图像的字节数,存储他们在对象上,然后当它显示图像时,从其字节加载图像。

我有这一切的代码,但我不断收到异常:

适合来完成这个操作没有成像部件被发现。

这里是我的代码:编辑与修复程序更新了

//Loaded on start-up 
    private static void LoadImageBytes(Image img) 
    { 
     var urlUri = new Uri(img.Url); 
     var request = (HttpWebRequest)WebRequest.CreateDefault(urlUri); 
     MemoryStream memStream = new MemoryStream(); 

     using (var response = request.GetResponse()) 
     { 
      var buffer = new byte[4096]; 
      using (var stream = response.GetResponseStream()) 
      { 
       int bytesRead = stream.Read(buffer, 0, buffer.Length); 
       while (bytesRead > 0) 
       { 
        memStream.Write(buffer, 0, bytesRead); 
        bytesRead = stream.Read(buffer, 0, buffer.Length); 
       } 

       img.ImageBytes = memStream.ToArray(); 
      } 
     } 
    } 

然后,当我想我把这个屏幕上的图像:

public BitmapImage ImageFromBuffer(Byte[] bytes) 
    { 
     MemoryStream stream = new MemoryStream(bytes); 
     stream.Seek(0, SeekOrigin.Begin); 
     BitmapImage image = new BitmapImage(); 
     image.BeginInit(); 
     image.StreamSource = stream; 
     image.EndInit(); 
     return image; 
    } 

但在EndInit()调用我得到异常。

我已经做了一些测试,如果我从本地文件系统加载文件,我会得到一组不同的字节到云中的图像。我认为它与blob存储或https有关?

是的,我可以浏览到该图像,并没有损坏。

编辑,现在固定都好

回答

0

你确定这条线是正确的?

while (stream.Read(buffer, 0, buffer.Length) > 0) 
       img.ImageBytes = buffer; 

img.ImageBytes将保存最后一个读缓冲区。

+0

好吧不,我猜不是 – Mark 2011-01-13 06:25:13