У меня возникли проблемы с созданием 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;
}
Кто-нибудь получил свет, чтобы светить?