WPF скачать изображения байтов из хранилища BLOB-объектов - PullRequest
1 голос
/ 13 января 2011

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

У меня есть класс Image, который содержит URL своего изображения, хранящегося в облаке как хранилище BLOB-объектов (этот адрес 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?

И да, я могу просмотреть это изображение, и оно не повреждено.

РЕДАКТИРОВАТЬ, исправлено все хорошо

1 Ответ

0 голосов
/ 13 января 2011

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

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

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

...