hallo,
ich habe hier ein HBITMAP variable,
und möchte es auf die Festplatte als bitmap speicher.
Funktioniert das überhaupt?
Oder habe ich da was nicht verstanden (sehr wahrscheinlich, anfänger).
Falls das geht, wie heißt den die Funktion?
hallo,
ich habe hier ein HBITMAP variable,
und möchte es auf die Festplatte als bitmap speicher.
Funktioniert das überhaupt?
Oder habe ich da was nicht verstanden (sehr wahrscheinlich, anfänger).
Falls das geht, wie heißt den die Funktion?
Hi mirrow,
eine Funktion zum abspeichern von Bitmaps gibt es nicht, du kanns dir aber recht einfach eine eigene schreiben.
Infos zum Aufbau von BMP-Dateien findest du bei wotsit.org:
http://www.wotsit.org/search.asp?s=graphics
BITMAPINFO infoheader;
infoheader.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
infoheader.bmiHeader.biWidth = 500; // Breite in Pixeln
infoheader.bmiHeader.biHeight = 500; // Höhe in Pixeln
infoheader.bmiHeader.biPlanes = 1;
infoheader.bmiHeader.biBitCount = 24; // Farbtiefe in bits
infoheader.bmiHeader.biCompression = 0;
infoheader.bmiHeader.biSizeImage = 0;
infoheader.bmiHeader.biXPelsPerMeter = 0;
infoheader.bmiHeader.biYPelsPerMeter = 0;
infoheader.bmiHeader.biClrUsed = 0;
infoheader.bmiHeader.biClrImportant = 0;
// Platz für die Pixeldaten reservieren
int* bitmap = new int[500*500*3]; // Breite*Höhe*Farbtiefe (Bytes)
BITMAPFILEHEADER fileheader;
fileheader.bfType = 19778; // ‚BM‘
fileheader.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + sizeof(bitmap); // Gesamtgröße der Datei
fileheader.bfReserved1 = 0;
fileheader.bfReserved2 = 0;
fileheader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); // ab hier Pixel
// Die Pixeldaten aus der hbitmap in bitmap kopieren
GetDIBits(dc, hbitmap, 0, 500, bitmap, &infoheader, DIB_RGB_COLORS);
// Eine neue Datei erstellen bzw eine bestehende öffnen
HANDLE hfile = CreateFile(„c:\cmap.bmp“, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, 0, 0);
// Die Daten in die Datei schreiben
DWORD dummy;
WriteFile(hfile, &fileheader, 14, &dummy, NULL);
WriteFile(hfile, &infoheader, 40, &dummy, NULL);
WriteFile(hfile, bitmap, 750000, &dummy, NULL);
// Aufräumen
DeleteObject(hbitmap);
ReleaseDC(hwnd, dc);
CloseHandle(hfile);
delete[] bitmap;
Die genauen Parameter für die jeweiligen Funktionen kannst die in der win32 Hilfe nachschlagen:
http://www.codingcrew.de/programmierung/win32hlp.php
Hoffe dass dir das weiterhilft,
Daniel Raffler
Hallo Daniel,
ich wollte mit C/C++ ein Screenshot erstellen und als bitmap speicher.
Habe seit einpaar tage infos gesammelt, sieht alles so kompliziert aus.
(bin eben ein anfänger)
ich versuche jetzt das ganze zeugt zusammen zubringen,
vielleicht klappts es doch noch.
vielen dank für dein Infos.
Hi,
vielleicht hilft dir diese Site weiter
http://msdn.microsoft.com/library/default.asp?url=/l…
Falls du noch Fragen hast kannst du mir auch schreiben:
sofware_dev AT haefft PUNKT de
grüße,
Daniel Raffler
Daniel Raffler
Hallo Daniel,
(über wer-weiss-was)
ich habe versucht ein Screenshot zu erstellen und ein BMAP-Datei
zuerstellen. Aus dem Microsoft-Internet-Doku habe ich dann diesen Code geschrieben und die Fubnktion CreateBMPFile(…) aufgerufen:
void CreateBMPFile(HWND hwnd, LPTSTR pszFile,
PBITMAPINFO pbi, HBITMAP hBMP, HDC hDC)
woher bekomme ich den die Werte für PBITMAPINFO pbi ???
Wenn ich die ganze Parrameter richtig übergeben habe,
muß mein Programm doch jetzt den Screenshot meines Desktop
in den Ordner „D:\Screenshot\“
das Bild: TestBild.bmp erstellen oder?
mit freundlichen Grüssen,
Mirrow
HDC hdcScreen, hdcCompatible;
HBITMAP hbmScreen;
HWND hwnd = 0;
hdcScreen = CreateDC(„DISPLAY“, NULL, NULL, NULL);
hdcCompatible = CreateCompatibleDC(hdcScreen); //kompatible DC zu window-DC
hbmScreen = CreateCompatibleBitmap(hdcScreen, // Create a compatible bitmap
for hdcScreen.
GetDeviceCaps(hdcScreen, HORZRES),
GetDeviceCaps(hdcScreen, VERTRES));
SelectObject(hdcCompatible, hbmScreen); // Gerätekontext auswählen
// ShowWindow(hwnd, SW_HIDE);
BitBlt(hdcCompatible, 0,0, GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN), hdcScreen, 0,0, SRCCOPY);
//ShowWindow(hwnd, SW_SHOW);
//CreateBMPFile aus Ms-Internet-Hilfe
//http://www.msdn.microsoft.com/library/default.asp?ur…
//-- Storing an Image –
CreateBMPFile(hwnd, „D:\Screenshot\TestBild.bmp“, ???, hbmScreen, hdc);
Hi mirrow,
verwende doch einfach die Funktion CreateBitmapInfoStruct()
BITMAPINFO pbi = CreateBitmapInfoStruct(hwnd, hbmScreen);
CreateBMPFile(hwnd, „D:\Screenshot\TestBild.bmp“, pbi, hbmScreen, hdc);
http://msdn.microsoft.com/library/default.asp?url=/l…
grüße,
Daniel Raffler
Hallo Daniel,
danke für die Infos.
Es hat superfunktioniert.
Ich habe garnicht an diese webseite gedacht,
als ich nach information gesucht habe.
DANKE noch mal