2009-02-24 4 views
12

Ho un byte[] rappresentato da un Image. Sto scaricando questo Image tramite uno WebClient. Quando lo WebClient ha scaricato l'immagine e la faccio riferimento utilizzando il suo URL, ottengo uno byte[]. La mia domanda è, come posso caricare un byte[] in un elemento Image in WPF? Grazie.Caricare un byte [] in un'immagine al runtime

Nota: Questo è complementare alla domanda che ho posto qui: Generate Image at Runtime. Non riesco a ottenere quell'approccio al lavoro, quindi sto provando un approccio diverso.

+0

Nota, sto cercando di caricare un byte [] in un'istanza System.Windows.Controls.Image. Non un'istanza di System.Drawing.Image come tutti hanno gentilmente segnalato. – user70192

risposta

5

È possibile utilizzare uno BitmapImage e impostare lo StreamSource su uno streaming contenente i dati binari. Se si vuole fare un stream da un byte[], utilizzare un MemoryStream:

MemoryStream stream = new MemoryStream(bytes); 
21

Creare un BitmapImage dalla MemoryStream come di seguito:

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

E in XAML è possibile creare un controllo Image e impostare la sopra image come la proprietà Source.

+0

Non funzionerebbe solo per WinForms? – configurator

+0

Aggiornamento della risposta –

1

In 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

Un modo che ho capito come si fa in modo che fosse sia veloce e thread-safe è stata la seguente:

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

che ho buttato in un convertitore per la mia applicazione WPF dopo aver eseguito le immagini come Varbinary dal DB.