У меня возникли проблемы с созданием BitmapImage
из MemoryStream
из байтов png и gif, полученных из веб-запроса.Кажется, что байты загружаются нормально, и объект 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;
}
У кого-нибудь есть свет, чтобы сиять?