2011-01-13 2 views
1

Я хочу предварительно загрузить много изображений, когда мое приложение запустится, что-то однократно.WPF загружает изображения байтов из Blob Storage

У меня есть Image класс, который содержит URL-адрес своего изображения, хранящегося в облаке как хранилище больших двоичных объектов (этот адрес является HTTPS адрес BTW)

Я хочу, чтобы загрузить байты изображения из облака, магазин их на объекте, затем, когда придет время показать изображение, загрузите изображение из его байтов.

У меня есть все для этого кода, но я получаю исключение:

Нет компоненты изображения, пригодных для выполнения этой операции был найден.

Вот мой код: EDIT ОБНОВЛЕНО С FIX

//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() call Я получаю исключение.

Я провел некоторое тестирование, и если я загружу файл из своей локальной файловой системы, я получаю другой набор байтов по сравнению с изображением в облаке. Я предполагаю, что это связано с хранилищем blob или https?

И да, я могу перейти к этому изображению, и его не испорчено.

EDIT, сейчас исправлен все хорошо

ответ

0

Вы уверены, что эта линия является правильным?

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

img.ImageBytes будет содержать последний буфер чтения.

+0

ну нет, я думаю, не – Mark

+0

это было неправильно, я добавил – Mark

Смежные вопросы