Tengo algunos problemas para crear un BitmapImage
desde un MemoryStream
desde png y gif bytes obtenidos de una solicitud web. Parece que los bytes se descargaron correctamente y el objeto BitmapImage
se creó sin problema, sin embargo, la imagen no se está procesando en mi interfaz de usuario. El problema solo ocurre cuando la imagen descargada es de tipo png o gif (funciona bien para jpeg).Creando WPF BitmapImage desde MemoryStream png, gif
Aquí es código que muestra el problema:
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;
}
Para probar que la solicitud web fue la obtención correctamente los bytes He intentado lo siguiente que ahorra los bytes de un archivo en el disco y luego carga la imagen utilizando una UriSource
en lugar de un StreamSource
y funciona para todos los tipos de imágenes:
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;
}
Alguien tiene ninguna luz brille?
El truco 'BitmapCacheOption.OnLoad' es importante. Me gustaría agregar que debe estar entre 'BeginInit()' y 'EndInit()'. –
@ PieterMüller: pista muy útil; Además, la secuencia todavía * debe * estar abierta cuando se llama a 'EndInit()' como otra restricción con la que puede tropezar. –