Bitmap aus Ressourcen auf Festplatte kopieren
-
Wie im Titel beschrieben möchte ich ein Bitmap das
mit IDB_BITMAP1 bezeichnet ist auf "c:\\bilder" kopieren.Ich kenne mich leider mit dem Kopieren noch nicht so sonderlich aus.
Mein Ansatz war daher zunächst CopyFile, was aber scheinbar nicht mit
einer Ressource geht.Wie bekomme ich das IDB_BITMAP1 nun am einfachsten aus meiner
Anwendung auf c: ?
-
Hi,
wenn du das Handle mit LoadResource hast, dann rufst du LockResource auf und hast nun Zugriff auf den Entsprechenden Speicher, den du auf die Platte schreiben kannst.
-
Ich habe es nun mal mit diesem Code probiert, jedoch ist die
Datei immer 0 kb groß. Wird also nicht wirklich geschrieben.HINSTANCE hApp = ::GetModuleHandle(0); ASSERT(hApp); HRSRC hResInfo; hResInfo = ::FindResource(hApp,MAKEINTRESOURCE(IDB_BITMAP1),TEXT("Bitmap")); HGLOBAL hRes = ::LoadResource(hApp, hResInfo); BYTE *PROG = (LPBYTE)::LockResource(hRes); int PROG_SIZE = SizeofResource(hApp,hResInfo); CFile OutFile; OutFile.Open("C:\\testbild.BMP",OF_CREATE|OF_WRITE,NULL); OutFile.Write(PROG,PROG_SIZE); OutFile.Close();
-
Der 3. Parameter von FindResource sieht mir komisch aus!?
Nimm mal RT_BITMAP!Wie groß ist denn PROG_SIZE?
-
Hmm also PROG_SIZE ist immer 0.
Habe das nochmal mit einem anderen Bitmap probiert das
ich als IDB_BITMAP2 eingebunden habe. Auch null...
-
Ich sehe noch imme rnicht durch wo das Problem bei dem Code liegt.
IMHO ist doch alles richtig zugewiesen oder ?
-
Hast du denn meinen Hinweis mit dem 3. Parameter befolgt?
-
Hallo Sepp,
ja den 3ten Paramter habe ich auf RT_BITMAP gesetzt.
Es hat sich leider nichts weiter verändert.
-
Also bei mir gehts, wenn ich den 3. Parameter ändere.
Vielleicht ist auch LoadBitmap/LoadImage ratsam.
Aber auf jeden Fall geht das hier bei mir tadellos:
HINSTANCE hApp = ::GetModuleHandle(0); HRSRC hResInfo; hResInfo = ::FindResource(hApp,MAKEINTRESOURCE(IDB_BITMAP1),RT_BITMAP); HGLOBAL hRes = ::LoadResource(hApp, hResInfo); BYTE *PROG = (LPBYTE)::LockResource(hRes); int PROG_SIZE = SizeofResource(hApp,hResInfo);
-
Ok, also ich habe been übersehen, dass die Datei nun zwar geschrieben wird
und eine Größe von 285KB hat, was auch beim Original der Fall ist, allerdings
kann ich diese Datei nicht öffnen e.g. mit Paint.
Fehler: Die datei konnte nicht gelesen werden oder das Format wird nicht
unterstützt ? Es ist aber als testbild.bmp auf c: ...
-
Jo,
ich habe es mir mal im HexEditor angeschaut.
Es scheint, das Bitmap wird ohne BITMAPFILEHEADER geschrieben.Du musst also noch eine passende BITMAPFILEHEADER struct ausfüllen (Offset!!!), als erstes auf die Platte schreiben und dann gleich darauf die Daten schreiben.
Dann sollte es passen.PS: Kann es sein, dass du ein wenig englischen Akzent hast?
-
BITMAPFILEHEADER sagt mir absolut nichts.
Kannst du mir hierbei etwas genauer beschreiben was
ich machen soll ?Bzw. gibt es eine andere einfachere Möglichkeit die Ressource
zu extrahieren ? Mit eine einfachen exe hat es mit obigem Code
ohne Probleme funktioniert.Diese Bitmaps bringen mich nochmal um
Gruß
Mr. been
-
Ich hab doch geschrieben, dass du LoadBitmap/LoadImage nehmen sollst.
Was BITMAPFILEHEADER betrifft: Habe ich alles in der MSDN gelesen, solltest du auch tun.