2009-02-24 30 views
12

Tengo un byte[] que está representado por un Image. Estoy descargando este Image a través de WebClient. Cuando el WebClient ha descargado la imagen y la hago referencia usando su URL, obtengo un byte[]. Mi pregunta es, ¿cómo cargo un byte[] en un elemento Image en WPF? Gracias.Cargar un byte [] en una imagen en tiempo de ejecución

Nota: Esto es complementario a la pregunta que hice aquí: Generate Image at Runtime. Parece que no puedo lograr que ese enfoque funcione, por lo que estoy intentando un enfoque diferente.

+0

Tenga en cuenta que estoy buscando cargar un byte [] en una instancia de System.Windows.Controls.Image. No es una instancia de System.Drawing.Image como todo el mundo ha señalado amablemente. – user70192

Respuesta

21

Crear una BitmapImage del MemoryStream de la siguiente manera:

MemoryStream byteStream = new MemoryStream(bytes); 
BitmapImage image = new BitmapImage(); 
image.BeginInit(); 
image.StreamSource = byteStream; 
image.EndInit(); 

Y en XAML puede crear un control Image y establecer lo anterior image como la propiedad Source.

+0

¿No funcionaría solo para WinForms? – configurator

+0

Actualizado la respuesta –

1

En NET Framework 4,0

using System.Drawing; 
using System.Web; 

private Image GetImageFile(HttpPostedFileBase postedFile) 
{ 
    if (postedFile == null) return null; 
    return Image.FromStream(postedFile.InputStream); 
} 
1

Una manera en que me di cuenta de cómo hacerlo de manera que era a la vez rápido y seguro de rosca fue la siguiente:

var imgBytes = value as byte[]; 
if (imgBytes == null) 
    return null; 
using (var stream = new MemoryStream(imgBytes)) 
    return BitmapFrame.Create(stream,BitmapCreateOptions.None, BitmapCacheOption.OnLoad); 

me arrojó que en un convertidor para mi aplicación WPF después de correr las imágenes como Varbinary de la BD.

Cuestiones relacionadas