Bitmap serialisieren
-
Hallo,
ich habe folgendes vor:
Der User eines Programms soll die Möglichkeit haben, eine Bitmap aus einer Datei zu laden. Diese soll anschließend einer Membervariablen eines Objekts zugewiesen werden und beim Beenden des Programms mitsamt den anderen Daten des Objekts mittels Serialisierung gespeichert werden.Wie ich eine Bitmap aus einer Datei lade, ist mir klar. Wie die Serialisierung prinzipiell funktioniert ebenfalls.
Allerdings weiß ich in diesem Fall nicht ganz, wie ich mit der Bitmap selbst umgehen soll:- Welchen Typ sollte die Membervariable haben, der ich die Bitmap "zuweise", HBITMAP/CBitmap/CBitmap*?
- Was passiert mit der Bitmap bei der Serialisierung? Kann ich die komplette Information der Bitmap zusammen mit den übrigen Daten meines Dokuments speichern oder speichere ich dabei nur die Information, wo die eigentliche Bitmap liegt?
- Lässt es sich vermeiden, dass der ursprüngliche Speicherort der Bitmap anschließend noch benötigt wird?
Ich hoffe, die Fragen sind nicht zu allgemein und mir kann jemand ein paar Anregungen geben. Was mich in dem Zusammenhang auch interessieren würde: Was verbirgt sich eigentlich genau hinter einem solchen Handle (HBITMAP)? Informationen darüber, wie man damit umgeht gibt es überall, was dahinter steckt ist mir bisher nicht klar. Vielleicht würden sich schon ein paar meiner Fragen erübrigen, wenn ich das verstünde ;).
Danke schon mal vorab!
-
Nanuq schrieb:
Hallo,
ich habe folgendes vor:
Der User eines Programms soll die Möglichkeit haben, eine Bitmap aus einer Datei zu laden. Diese soll anschließend einer Membervariablen eines Objekts zugewiesen werden und beim Beenden des Programms mitsamt den anderen Daten des Objekts mittels Serialisierung gespeichert werden.Wie ich eine Bitmap aus einer Datei lade, ist mir klar. Wie die Serialisierung prinzipiell funktioniert ebenfalls.
Allerdings weiß ich in diesem Fall nicht ganz, wie ich mit der Bitmap selbst umgehen soll:- Welchen Typ sollte die Membervariable haben, der ich die Bitmap "zuweise", HBITMAP/CBitmap/CBitmap*?
Ist im Prinzip egal, da alle drei auf HBITMAP basieren. Ich würde sagen am ehesten CBitmap*, oder gleich std::auto_ptr<CBitmap>.
- Was passiert mit der Bitmap bei der Serialisierung? Kann ich die komplette Information der Bitmap zusammen mit den übrigen Daten meines Dokuments speichern oder speichere ich dabei nur die Information, wo die eigentliche Bitmap liegt?
Die Serialisierung der Bitmap wirst du wohl selbst übernehmen müssen, da die MFC dazu AFAIK nix anbietet. Ergo kannst du das machen wie du willst, du kannst also nur den Dateinamen rausschreiben, oder den ganzen Inhalt der Bitmap - ganz wie du möchtest.
- Lässt es sich vermeiden, dass der ursprüngliche Speicherort der Bitmap anschließend noch benötigt wird?
Klar lässt es sicher vermeiden, siehe oben. Wenn du den ganzen Inhalt der Bitmap mit rausschreibst, dann wird die Originaldatei nichtmehr gebraucht.
Ich hoffe, die Fragen sind nicht zu allgemein und mir kann jemand ein paar Anregungen geben. Was mich in dem Zusammenhang auch interessieren würde: Was verbirgt sich eigentlich genau hinter einem solchen Handle (HBITMAP)? Informationen darüber, wie man damit umgeht gibt es überall, was dahinter steckt ist mir bisher nicht klar. Vielleicht würden sich schon ein paar meiner Fragen erübrigen, wenn ich das verstünde ;).
Danke schon mal vorab!
Hinter einem HBITMAP verbirgt sich was auch immer GDI für Strukturen verwendet um die Informationen über Format/Palette etc. + die eigentlichen Bilddaten zu speichern. Das ist ein sog. "Handle", also bloss ein Wert den GDI verwendet um die eigentlichen Datenstrukturen zu finden. Im Prinzip ist ein Handle ähnlich einem Zeiger, nur dass eben eine Eigenschaft wegfällt: der Wert eines Zeiger gibt die Adresse des Objektes an, der Wert eines Handles sagt nix über die Adresse aus. In diesem speziellen Fall ist das Handle also "opaque", also "undurchsichtig". Oder anders gesagt: du bekommst ein HBITMAP, und ein paar Funktionen mit denen du mit diesem HBITMAP arbeiten kannst. Was genau sich dahinter verbirgt muss und soll dich garnicht interessieren -- so können die intern verwendeten Strukturen jederzeit angepasst/erweitert werden, ohne dass es einen Einfluss auf dein Programm haben kann.
-
Danke für die Antwort, das hilft mir weiter!
Wahrscheinlich werden die nächsten Fragen aufkommen, wenn es dann tatsächlich darum geht die Serialisierung der kompletten Bitmapinformation selbst zu implementieren
Aber fürs erste war das jedenfalls hilfreich.