WPF从Blob存储下载图像字节

时间:2011-01-13 04:34:14

标签: c# wpf azure azure-storage-blobs

我想在我的应用程序启动时预加载大量图像,这类似于一次性的事情。

我有一个Image类,其中包含存储在云端的图像的Url作为blob存储(此地址为 https 地址BTW)

我想从云中下载图像字节,将它们存储在对象上,然后在显示图像时,从其字节加载图像。

我有这个的所有代码,但我一直得到例外:

未找到适合完成此操作的成像组件。

这是我的代码:使用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()调用中,我得到了异常。

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

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

编辑,现在修好所有

1 个答案:

答案 0 :(得分:0)

你确定这条线是正确的吗?

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

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