Byte[] zu Image

Andy0709

Mitglied
Hy

wie kann ich ein byte[] zu einem WPF Image konvertieren?

hab eine datei als byte[] von einem Webserver heruntergeladen und möchte nun ein Image daraus machen. Im normalen C# würde es image.fromStream geben, in WPF ist diese Methode jedoch nicht vorhanden, gibt es eine Alternative
 
Das FromStream() gibts schon noch, nur is halt keine using-Direktive da, d.h. du musst es so verwenden:

Code:
System.Drawing.Image img = System.Drawing.Image.FromStream(...);

Dann musst du es noch in ein System.Windows.Controls.Image umwandeln.
 
wie kann ich ein normlaes Image zu einem WPF-Image konvertieren

ich downloae ein png Image mittels webclient.downloadFileAsync("adresse", "byte[]");

im eventhandler(FileDownloadCompleted()) wandle ich das byte[] zu einem System.Drawing.Image um, wie kann ich dieses Imaga auf einem Canvas anzeigen bzw. in ein WPF-Image umwandeln
 
Code:
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.StreamSource = File.OpenRead(@"C:\Users\Public\Pictures\Sample Pictures\Garden.jpg");
bi.EndInit();
this.MainImage.Source = bi;
Das ist die eine Variante. D.h. du arbeitest direkt mit einem Stream.

Eine weitere Variante wäre, ein Objekt vom Typ BitmapSource zu erstellen. Dem kannst du im Konstruktor ein byte[] mitgeben. Die BitmapSource bindest du dann an die Eigenschaft Source deines Image-Elements.
 
Ich denke die letzte von dir aufgezeigte moeglichkeit ist das was wir suchen, da ich ja keinen direkten Festplattenzugriff wie File.OpenRead(@"C:\Users\Public\Pictures\Sample Pictures\Garden.jpg"); verwenden will.

Was mir allerdings ein rätsel ist, wie gebe ich der BitmapSource mein byte array mit?
was mir bisher vorschwebt:

Code:
void treeview_item_MouseDown(object sender, MouseButtonEventArgs e)
        {
            bildname = @"C:\"+((TreeViewItem)sender).Header.ToString();
            wc = new WebClient();
            wc.DownloadDataCompleted += new DownloadDataCompletedEventHandler(wc_DownloadDataCompleted);
            wc.DownloadDataAsync(new Uri(((TreeViewItem)sender).Tag.ToString()));
        }

        void wc_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
        { //Zuweisung des Byte[] meinem Image namens helpimage}


hättest du dafuer vll ein codebeispiel?
 
Ich denke die letzte von dir aufgezeigte moeglichkeit ist das was wir suchen, da ich ja keinen direkten Festplattenzugriff wie File.OpenRead(@"C:\Users\Public\Pictures\Sample Pictures\Garden.jpg"); verwenden will.
Was ich im Satz nach meinem Beispiel angesprochen habe, hier noch einmal deutlicher: File.OpenRead steht für einen Stream. D.h. du kannst hier jeden Stream der ein Byte-Array zurückgibt verwenden.

Was mir allerdings ein rätsel ist, wie gebe ich der BitmapSource mein byte array mit?
Einfach mal in die MSDN gucken:
BitmapSource Class (erstes Beispiel).
 
hab jetzt fuer nen moment gedacht ich weiss was du meinst, dann is folgendes raus gekommen, was nicht geht weil ich keine uri mit geben darf.

Code:
void treeview_item_MouseDown(object sender, MouseButtonEventArgs e)
        {
            bi = new BitmapImage();
            bi.BeginInit();
            bi.DownloadCompleted += new EventHandler(bi_DownloadCompleted);
            bi.StreamSource = File.OpenRead("http://www.helmut-kauer.de/Hundesalon/Hund1n.jpg");
            bi.EndInit();
         }

        void bi_DownloadCompleted(object sender, EventArgs e)
        {
            helpimage.Source = bi;
        }


ich steh wohl auf der l eitung
 
Zuletzt bearbeitet:
Öhm, folgendes:
Du hattest ja schon eine Methode, dir die Grafik herunter zu laden und in einem Byte-Array zu halten. Lass das doch gleich und Verwende das Beispiel aus dem MSDN-LINK den ich dir gepostet habe. Das sollte dann doch so reichen.
 
Code:
BitmapSource bitmap = BitmapSource.Create(width, height, 96, 96, pf, null,byte[], rawStride);


mein problem hierbei ist ich weiss nicht wo ich die anderen parameter die ich dem constructor mitgeben muss her bekomme (mein image soll noch in original groesse etc angezeigt werden)



[EDIT]:
Code:
        void treeview_item_MouseDown(object sender, MouseButtonEventArgs e)
        {
            bildname = @"C:\"+((TreeViewItem)sender).Header.ToString();
            wc = new WebClient();
            wc.DownloadDataCompleted += new DownloadDataCompletedEventHandler(wc_DownloadDataCompleted);
            wc.DownloadDataAsync(new Uri(((TreeViewItem)sender).Tag.ToString()));
        }

        void wc_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
        {
            PixelFormat p = PixelFormats.Bgr32;
            
            BitmapSource btm = BitmapSource.Create(1,1,1,1,p,null, e.Result,1);
            helpimage.Source = btm;

so hät ich das jetzt mal versucht, leider erfolglos, bin bissl verwirrt.
im treeviewitem.tag steht:
http://htl2k4.ht.funpic.de/wbblite/images/avatars/avatar-53.jpg
drin.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück