Hallo Leute,
Habe folgendes Problem ich schaffe es mit meinen C/C++ Code einen Screenshot zu erzeugen und ihn als BMP ab zu speichern aber nicht ihn als JPEG oder TIFF ab zu speichern.
ich habe nach gegoogelt aber nicht gefunden wie ich ohne standert Libs in C/C++ das bild so abspeichern kann oder zu mindestens convatieren kann.
hier mal mein code:
Habe folgendes Problem ich schaffe es mit meinen C/C++ Code einen Screenshot zu erzeugen und ihn als BMP ab zu speichern aber nicht ihn als JPEG oder TIFF ab zu speichern.
ich habe nach gegoogelt aber nicht gefunden wie ich ohne standert Libs in C/C++ das bild so abspeichern kann oder zu mindestens convatieren kann.
hier mal mein code:
Code:
#include <windows.h>
/* <Function> */
void SaveScreen(HWND pScreen, char Path[])
{
int Width = GetSystemMetrics(SM_CXSCREEN);//1280;
int Height = GetSystemMetrics(SM_CYSCREEN);//1024;
HDC hdcScreen;
HBITMAP hbmScreen;
//---------------Bitmap Informationen
BITMAPINFO infobmp;
infobmp.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
infobmp.bmiHeader.biWidth = Width;
infobmp.bmiHeader.biHeight = Height;
infobmp.bmiHeader.biPlanes = 1;
infobmp.bmiHeader.biBitCount = 24;
infobmp.bmiHeader.biCompression = 16;
infobmp.bmiHeader.biSizeImage = 0;
infobmp.bmiHeader.biXPelsPerMeter = 0;
infobmp.bmiHeader.biYPelsPerMeter = 0;
infobmp.bmiHeader.biClrUsed = 0;
infobmp.bmiHeader.biClrImportant = 0;
int* bitmap = new int[Width*Height*3];
BITMAPFILEHEADER bfheader;
bfheader.bfType = 19778;
bfheader.bfSize = sizeof(BITMAPFILEHEADER) + Width*Height*3 + sizeof(BITMAPINFOHEADER);
bfheader.bfReserved1 = 0;
bfheader.bfReserved2 = 0;
bfheader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
//Bitmap ----------------------- Informationen
hdcScreen = GetWindowDC(pScreen);
hbmScreen = CreateCompatibleBitmap(hdcScreen, Width, Height);
// temporärer DC
HDC hdcTemp = CreateCompatibleDC(hdcScreen);
// Bitmap reinselektieren
HBITMAP hbmOld = (HBITMAP)SelectObject(hdcTemp, hbmScreen);
// Inhalt von Desktop übertragen
BitBlt(hdcTemp, 0, 0, Width, Height, hdcScreen, 0, 0, SRCCOPY);
int iResult = GetDIBits(hdcTemp, hbmScreen, 0, Height, bitmap, &infobmp, DIB_RGB_COLORS);
// aufräumen
SelectObject(hdcTemp, hbmOld);
DeleteObject(hbmScreen);
DeleteDC(hdcTemp);
HANDLE hfile = CreateFile(Path, GENERIC_WRITE, 0, 0, OPEN_ALWAYS, 0, 0);
//Datei Schreiben
DWORD word;
WriteFile(hfile, &bfheader, 14, &word, NULL);
WriteFile(hfile, &infobmp, 40,& word, NULL);
WriteFile(hfile, bitmap, Width*Height*3, &word,NULL);
ReleaseDC(pScreen, hdcScreen);
CloseHandle(hfile);
delete[] bitmap;
}
/* </Function> */
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HWND hWnd = FindWindow(NULL, AppName);
char *path="C:/neu.bmp";
Sleep(1000);
SaveScreen(hWnd, path);
return 0;
}