2011-01-13 49 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