OfStream (bzw IfStream) & (CXImage)-Klasse speichern
-
Hallo,
Ich bin gerade daran und möchte in einer Anwendung verschiedene Screenshots in einer Datei ablegen, da diese Datei nicht aus allen Nähten platzen soll, wenn bis zu 200 Screenshots darin sind, hatte ich gedacht, das mit der Klasse CXImage - geholt von http://www.codeproject.com/bitmap/CXImage.asp)
zu machen.
Weiterhin will ich nicht das hunderte von Dateien angelegt werden, sondern nur eine, wo immer wieder ans Ende weiter angehängt wird
(das anhängen ist im Moment noch nicht das Problem)Ich habe das nun so geplant (Nachgelesen unter http://web.dadanini.com:7980/books/C++ in 21 Tagen/kap16.html)
das ich einfach eine Instanz der Klasse (nach dem befüllen) in eine Datei schreibe...
Das mache ich mit folgenden Code (hCaptureBitmap ist der Screenshot der vorher im Programm gemacht wurde)/******************************* ** CXImage Operationen Anfang ** *******************************/ CxImage image; image.CreateFromHBITMAP(hCaptureBitmap); ofstream myFile ("c:\\test_cximage.dat",ios::out|ios::binary); myFile.write(reinterpret_cast<char*>(&image),sizeof(image)); myFile.close(); /***************************** ** CXImage Operationen ENDE ** *****************************/Dann wollte ich eigentlich das Image wieder laden (die Instanz der CX-Image-Klasse, die ich abgespeichert habe) mit folgendem Code:
CxImage image; ifstream myFileIn("c:\\test_cximage.dat",ios::in|ios::binary); myFileIn.read(reinterpret_cast<char*>(&image),sizeof(image)); myFileIn.close();Bis hierher ja ganz gut (es gibt keine Fehlermeldung und beim Debuggen habe ich die Variable [CXImage]->head auch geprüft, und diese stimmt beim rausschreiben mit der nun eingelesenen überein...)
Doch wenn ich nun das eingelesene weiterverarbeiten will (z.B. mit:
image.SetJpegQuality(99); if (image.IsValid()) { if(!image.IsGrayScale()) image.IncreaseBpp(24); image.SetJpegQuality(99); image.Save("c:\\test_cximage.jpg",CXIMAGE_FORMAT_JPG); }Dann kommt eine Fehlermeldung (Programm schmiert ab mit der Meldung:
BlaBla.exe - Fehler in Anwendung
*
Die Anweisung in "0x10218253" verweist auf Speicher in "0x00e9fc49". Der Vorgang
"read" konnte nicht ausgeführt werden
*Was mache ich falsch, bzw habe ich irgendwas anderes zu beachten, wenn ich eine Instanz einer Klasse speichern möchte...
Vielen Dank schon mal für Eure Antworten
MFG [NOBBER]
-
Du kannst nich einfach eine Instanz einer Klasse in eine Datei schreiben.
Du kannst nur ein "Speicherabbild" machen. Beim laden wird es weder konstruiert noch sind eventuelle Zeiger ok.Du kannst von CObject ableiten und dann mit mit dem Begriff Serialize durch die MSDN fusseln. Da wirst Du etwas in Deine richtung finden ganze Instanzen zu speichern.
-
Also da es so nicht klappt versuche ich es jetzt anders
(Da dies eigentlich nichts mehr mit der Klasse an sich (CXImage) zu tun hat habe ich einen neuen Beitrag geschrieben
siehe: