我想在我的应用程序启动时预加载大量图像,这类似于一次性的事情。
我有一个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有关?
是的,我可以浏览到该图片并且没有损坏。
编辑,现在修好所有
答案 0 :(得分:0)
你确定这条线是正确的吗?
while (stream.Read(buffer, 0, buffer.Length) > 0)
img.ImageBytes = buffer;
img.ImageBytes将保留最后一个读缓冲区。