1

我想在我的应用程序启动时预加载很多图像,这是一次性的事情。

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

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

我有这方面的所有代码,但我不断收到异常:

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

这是我的代码:EDIT UPDATED WITH A 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有关?

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

编辑,现在修好了

4

1 回答 1

0

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

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

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

于 2011-01-13T05:12:49.257 回答