2010-03-09 26 views
7

¿Hay alguna forma en C# de realizar esta conversión y viceversa?Convierte System.Drawing.Image a System.Windows.Controls.Image?

Tengo una aplicación WPF que tiene un control de imagen. Estoy tratando de guardar la imagen en ese control en una base de datos SQL.

En mi modelo de entidad, el tipo de datos de la columna de imagen en mi base de datos es byte[]. Así que encontré un método para convertir un System.Drawing.Image a byte[] y viceversa. Pero no he encontrado un método para convertir de System.Windows.Controls.Image a byte[].

Es por eso que ahora necesito hacer la conversión anterior.

Respuesta

3

Bueno, una es una imagen y la otra es un control que muestra una imagen, así que no creo que haya una conversión entre las dos. Pero, podría establecer la Fuente de ... Controles.Imagen como su ... Dibujo.Imagen.

Editar basa en la actualización

hace esto lo que necesita - http://msdn.microsoft.com/en-us/library/ms233764%28VS.100%29.aspx

+0

¿No puedo hacer eso tampoco ... alguna idea? –

+0

¿Puede proporcionar más detalles sobre su situación? Me está costando entender por qué tendrías que hacer esto. –

+0

ver arriba para más detalles –

10

Si tiene una matriz de bytes que representa un archivo que WPF puede decodificar (BMP, JPG, GIF, PNG, TIF , ico), puede hacer lo siguiente:

BitmapSource LoadImage(Byte[] imageData) 
{ 
    using (MemoryStream ms = new MemoryStream(imageData)) 
    { 
     var decoder = BitmapDecoder.Create(ms, 
      BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad); 
     return decoder.Frames[0]; 
    } 
} 

del mismo modo, para convertirlo de nuevo, puede hacer lo siguiente:

byte[] SaveImage(BitmapSource bitmap) 
{ 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     var encoder = new BmpBitmapEncoder(); 
     encoder.Frames.Add(BitmapFrame.Create(bitmap)); 
     encoder.Save(ms); 

     return ms.GetBuffer(); 
    } 
} 
+0

tu salvaste mi vida – joshua