Inhalt eines Formulars als GIF speichern



  • Hallo Leute,

    ich suche eine Möglichkeit, wie ich den Inhalt eines Formulars als GIF Datei abspeichern kann. Wenn möglich soll nur der Inhalt gespeichert werden, also ohne den Rand, und ohne die Schaltflächen auf dem Rand.
    Mir wäre auch damit geholfen wenn ich den Inhalt in ein Bitmap kopieren könnte. Wie man ein Bitmap als GIF abspeichert ist mir bekannt.

    Gruß
    Michael



  • Hi,

    du könntest Form::DrawToBitmap() benutzen und dann evtl. noch den Rand entfernen (d.h. SystemInformation::CaptionHeight sowie die anderen Ränder (Border3DSize?) berücksichtigen).



  • Hi,

    Th69 schrieb:

    du könntest Form::DrawToBitmap() benutzen und dann evtl. noch den Rand entfernen (d.h. SystemInformation::CaptionHeight sowie die anderen Ränder (Border3DSize?) berücksichtigen).

    Das ist eine gute Idee. Da mir das Entfernen der Ränder kompliziert erscheint, habe ich in das Formular zunächst ein formatfüllendes Panel gelegt, und in diesem Panel befinden sich die Elemente die ich als GIF speichern möchte:

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    			 saveFileDialog1->ShowDialog();
    			 panel1->DrawToBitmap(bitmap2, Rectangle(0, 0, panel1->Width, panel1->Height)); 
    			 bitmap2->Save(saveFileDialog1->FileName, System::Drawing::Imaging::ImageFormat::Gif);
    		 }
    

    Aber es funktioniert noch nicht. In dem GIF Bild sehe ich nur den Button, mit dem ich die Aktion ausgelöst habe. Alle anderen Elemente fehlen.

    Gruß
    Michael



  • this->DrawToPanel!?
    Und warum legst Du das bitmap als Element der Form an?



  • Hi,

    Jochen Kalmbach schrieb:

    this->DrawToPanel!?

    Meinst du, man müsste die Objekte erst auf das Panel draufzeichen? Aber warum ist dann der Button1 im GIF zu sehen? Den habe ich doch auch nicht explizit draufgezeichnet.

    Jochen Kalmbach schrieb:

    Und warum legst Du das bitmap als Element der Form an?

    Ich verstehe die Frage nicht. Wo soll ich es denn sonst anlegen?

    Ich habe es auch ohne den Umweg über das Panel versucht, aber das ergibt im GIF nur eine weisse Fläche mit Rand:

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    			 saveFileDialog1->ShowDialog();
    			 Form1::DrawToBitmap(bitmap2, Rectangle(0, 0, Form1::Width, Form1::Height)); 
    			 bitmap2->Save(saveFileDialog1->FileName, System::Drawing::Imaging::ImageFormat::Gif);
    		 }
    

    Gruß
    Michael



  • Hi,

    Jetzt geht es, obwohl ich bei der Erzeugung des Bitmaps gar nichts verändert habe. Das Problem war möglicherweise, dass meine Objekte nur scheinbar auf dem Panel gelegen haben, aber in Wirklichkeit immer noch auf dem Form gelegen haben. Aber ganz sicher bin ich mir nicht, ehlich gesagt verstehe ich nicht warum es zuerst nicht ging und jetzt auf einmal geht.

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    			 saveFileDialog1->ShowDialog();
    			 panel1->DrawToBitmap(bitmap2, Rectangle(0, 0, panel1->Width, panel1->Height)); 
    			 bitmap2->Save(saveFileDialog1->FileName, System::Drawing::Imaging::ImageFormat::Gif);
    		 }
    

    Jetzt stört noch, dass das GIF Bild nur 8 Bit pro Pixel hat. Eigentlich müssten die 8 Bit mehr als ausreichend sein, weil in dem Bild nur wenige Farben vorkommen. Aber es sind wohl die falschen Farben, daher wird gedithert. Wie kann man das verhindern?

    Gruß
    Michael



  • Warum muß es denn unbedingt GIF sein? Nimm doch JPG oder PNG.



  • Hi,

    Th69 schrieb:

    Warum muß es denn unbedingt GIF sein? Nimm doch JPG oder PNG.

    GIF wäre in diesen Fall besser geeignet als JPG weil es sich viel stärker und verlustfrei komprimieren lässt.
    Mit PNG habe ich mich bislang noch nie beschäftigt. Ist das eine verlustfreie Komprimierung, und kann man das in HTML Webseiten einbinden?

    Gruß
    Michael

    P.S. Hab's ausprobiert, PNG funktioniert gut.


Anmelden zum Antworten