我正在尝试从一个包含来自Web请求的PNG和GIF字节的MemoryStream
创建BitmapImage
,但遇到了一些问题。 字节似乎已经成功下载,并且BitmapImage
对象也已经被创建,但是图像实际上没有在我的用户界面中呈现。问题仅在下载的图片类型为PNG或GIF时出现(对于JPEG工作正常)。
以下是演示问题的代码:
var webResponse = webRequest.GetResponse();
var stream = webResponse.GetResponseStream();
if (stream.CanRead)
{
Byte[] buffer = new Byte[webResponse.ContentLength];
stream.Read(buffer, 0, buffer.Length);
var byteStream = new System.IO.MemoryStream(buffer);
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.DecodePixelWidth = 30;
bi.StreamSource = byteStream;
bi.EndInit();
byteStream.Close();
stream.Close();
return bi;
}
为了测试网络请求是否正确获取字节,我尝试了以下方法将字节保存到磁盘文件中,并使用UriSource
而不是StreamSource
加载图像,对于所有类型的图像都有效:
var webResponse = webRequest.GetResponse();
var stream = webResponse.GetResponseStream();
if (stream.CanRead)
{
Byte[] buffer = new Byte[webResponse.ContentLength];
stream.Read(buffer, 0, buffer.Length);
string fName = "c:\\" + ((Uri)value).Segments.Last();
System.IO.File.WriteAllBytes(fName, buffer);
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.DecodePixelWidth = 30;
bi.UriSource = new Uri(fName);
bi.EndInit();
stream.Close();
return bi;
}
有人能提供任何帮助吗?
EndInit()
时,流仍然必须保持打开状态,这是你可能会遇到的另一个限制。 - O. R. Mapper