2010-03-09 13 views
7

C'è un modo in C# per fare questa conversione e tornare?Converti System.Drawing.Image in System.Windows.Controls.Image?

Ho un'app WPF con controllo Immagine. Sto cercando di salvare l'immagine in quel controllo su un database SQL.

Nel modello entità, il tipo di dati della colonna immagine nel mio database è byte[]. Così ho trovato un metodo per convertire un System.Drawing.Image in un byte[] e viceversa. Ma non ho trovato un metodo per convertire da System.Windows.Controls.Image a un byte[].

Ecco perché ora ho bisogno di fare la conversione di cui sopra.

risposta

3

Beh, uno è l'immagine e uno è un controllo che mostra un'immagine, quindi non credo che ci sia una conversione tra i due. Ma potresti impostare la fonte di ... Controls.Image per essere il tuo ... Drawing.Image.

Modifica sulla base degli

fa questo ciò che è necessario - http://msdn.microsoft.com/en-us/library/ms233764%28VS.100%29.aspx

+0

Non riesci a farlo neanche ... un'idea? –

+0

Puoi fornire ulteriori dettagli sul tuo scenario? Ho difficoltà a capire perché dovresti farlo. –

+0

vedere sopra per ulteriori dettagli –

10

Se si dispone di un array di byte che rappresenta un file che WPF in grado di decodificare (bmp, jpg, gif, png, tif , ICO), è possibile effettuare le seguenti operazioni:

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

Allo stesso modo, per riconvertirlo, è possibile effettuare le seguenti operazioni:

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

mi hai salvato la vita – joshua