bitmap aus zwischenlage kopieren
-
hi leute
ich will ein prog schreiben das zu einem bestimmten zeitpunk ein "foto" (snapshot) vom bildschirm macht und in eine datei speichert:int main() { fstream file("file.bmp", ios::binary | ios::app | ios::out); int ok = OpenClipboard(NULL); char * cBuffer = NULL; keybd_event(VK_SNAPSHOT, 0, 0, 0); if (!ok) return 1; HANDLE hClipData = GetClipboardData( CF_BITMAP ); cBuffer = (char*)GlobalLock( hClipData ); GlobalUnlock( hClipData ); CloseClipboard(); file.write(cBuffer, strlen (cBuffer)); file.close(); getchar(); return 0; }jetz bekomme ich immer ne tolle fehlermeldung:
Unbehandelte Ausnahme in snapshot.exe: 0xC0000005: Access Violation.
ich benutze microsoft visual c++
vielleicht kann mir einer sagen was ich falsch gemacht habe...
mfg killakathl
-
Falsch ist schonmal, dass in cBuffer ne Bitmap und kein String ist und daher darf kein strlen() benutzt werden.
Bei CF_BITMAP kannste dir das GLobalLock() glaube ich sparen.
Du kriegst direkt nen HBITMAP-Handle, dass man via CopyImage() erstmal kopieren sollte, da das Handle dem Clipboard gehört.
Anschließend könntest du die Bitmap in einen DC selektieren und mit der Funktion zum Bitmap-Speichern in der WinAPI-FAQ speichern.Du kannst das Bild aus der Zwischenablage nicht direkt speichern, da auch bei CF_DIB oder CF_DIBV5 die BITMAPFILEHEADER-Struktur fehlt und du die erzeugte Datei somit mit keiner Anwendung öffnen könntest!
-
ok danke