[mono] Windows.Forms & GTK# gemischt: Probleme mit System.IO.MemoryStream

Dieses Thema im Forum "Java/Mono/dotGNU" wurde erstellt von tux#, 06.06.2007.

  1. tux#

    tux# Grünschnabel

    Dabei seit:
    06.06.2007
    Beiträge:
    3
    Zustimmungen:
    0
    Hmm, ich komme einfach nicht weiter.
    Ich versuche ein Image aus einem Windows.Forms-Fenster mit GTK#-Methoden (Gdk.Pixbuf) zu bearbeiten. Funktioniert prinzipiell auch.
    Das Problem ist, dass die Image-Objekte von Win.Forms und GTK# (logischerweise) unterschiedlich sind. Also muss ich konvertieren.

    Folgendes funktioniert:
    Code:
    
    //Windows.Forms Event
    void Button1Click(object sender, EventArgs e)
            {
                pictureBox1.Image.Save("scanfixtest.png", System.Drawing.Imaging.ImageFormat.Png);
                //Instanziierung der Gdk#-Klasse
                WinPixbuf picRaw = new WinPixbuf();            
            }
    
    ...
    
    public class WinPixbuf
        {
            public Gdk.Pixbuf pb;
            
            public WinPixbuf()
            {
                Gtk.Application.Init();
                pb = new Gdk.Pixbuf("scanfixtest.png");
                pb.Save("scanfixtest_xy.jpg", "jpeg");
            }
        }
    
    Allerdings finde ich es eher suboptimal das Bild extra in einer Datei zwischenspeichern zu müssen. Und wenn ich einen stream benutze bekomme ich eine Glib.NullRefereceException bzw. "unleserliches Bildformat"...
    So klappt es nicht:
    Code:
    void Button1Click(object sender, EventArgs e)
            {
                System.IO.MemoryStream buffer = new System.IO.MemoryStream();
                pictureBox1.Image.Save(buffer, System.Drawing.Imaging.ImageFormat.Png);
                WinPixbuf picRaw = new WinPixbuf(buffer);            
            }
    
    ...
    
    public class WinPixbuf
        {
            private Gdk.Pixbuf pb;
            
            public WinPixbuf(System.IO.MemoryStream stream)
            {
                Gtk.Application.Init();
                pb = new Gdk.Pixbuf(stream);
                pb.Save("scanfixtest_xy.jpg", "jpeg");
            }
        }
    
    Wo ist der Hund begraben? :think:
    Über den Umweg Datei klappt es wie gewünscht, warum nicht über den Stream? Wer hilft mir auf die Sprünge? :hilfe2:

    Gruss
    tux#
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Hello World, 07.06.2007
    Hello World

    Hello World Routinier

    Dabei seit:
    22.11.2006
    Beiträge:
    324
    Zustimmungen:
    0
    In der Dokumentation des Konstruktors public Pixbuf (string filename) steht folgendes:
    "The file format is detected automatically"
    In der Dokumentation des Konstruktors public Pixbuf (System.IO.Stream stream) fehlt dieser Hinweis dagegen. Vielleicht müssen die Daten ja in bereits dekodierter Form vorliegen? Ist natürlich nur eine Vermutung...
     
  4. #3 tux#, 07.06.2007
    Zuletzt bearbeitet: 07.06.2007
    tux#

    tux# Grünschnabel

    Dabei seit:
    06.06.2007
    Beiträge:
    3
    Zustimmungen:
    0
    Öhm, was meinst Du denn mit dekodieren? Einen Konstruktor dem ich neben dem Stream auch das Bildformat mitgeben kann gibt es leider nicht...

    Ich gehe eher davon aus, daß mein Stream nicht in Ordnung ist...

    [edit]

    Habs gefunden - es lag tatsächlich an meinem Umgang mit dem Stream...
    Code:
    void Button1Click(object sender, EventArgs e)
            {
                System.IO.MemoryStream buffer = new System.IO.MemoryStream();
                pictureBox1.Image.Save(buffer, System.Drawing.Imaging.ImageFormat.Png);
                [B]picStream.Seek(0,System.IO.SeekOrigin.Begin);[/B]
                WinPixbuf picRaw = new WinPixbuf(buffer);            
            }
    
    Ende gut, alles gut...? :headup:

    Gruss
    tux#
     
Thema:

[mono] Windows.Forms & GTK# gemischt: Probleme mit System.IO.MemoryStream

Die Seite wird geladen...

[mono] Windows.Forms & GTK# gemischt: Probleme mit System.IO.MemoryStream - Ähnliche Themen

  1. [Mono]

    [Mono]: [Mono] Eingesteckten USB-Stick unter Linux erkennen? Hallo, bin neu unter Mono/Linux und würde gerne eine Appliaktion schreiben, welche...