Original Post
Hi, how would I save a HDC to a bitmap? ..its to take screenshots thx
void CaptureScreen(HWND window, const char* filename){ // get screen rectangle RECT windowRect; GetWindowRect(window, &windowRect); // bitmap dimensions int bitmap_dx = windowRect.right - windowRect.left; int bitmap_dy = windowRect.bottom - windowRect.top; // create file ofstream file(filename, ios::binary); if(!file) return; // save bitmap file headers BITMAPFILEHEADER fileHeader; BITMAPINFOHEADER infoHeader; fileHeader.bfType = 0x4d42; fileHeader.bfSize = 0; fileHeader.bfReserved1 = 0; fileHeader.bfReserved2 = 0; fileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); infoHeader.biSize = sizeof(infoHeader); infoHeader.biWidth = bitmap_dx; infoHeader.biHeight = bitmap_dy; infoHeader.biPlanes = 1; infoHeader.biBitCount = 24; infoHeader.biCompression = BI_RGB; infoHeader.biSizeImage = 0; infoHeader.biXPelsPerMeter = 0; infoHeader.biYPelsPerMeter = 0; infoHeader.biClrUsed = 0; infoHeader.biClrImportant = 0; file.write((char*)&fileHeader, sizeof(fileHeader)); file.write((char*)&infoHeader, sizeof(infoHeader)); // dibsection information BITMAPINFO info; info.bmiHeader = infoHeader; // ------------------ // THE IMPORTANT CODE // ------------------ // create a dibsection and blit the window contents to the bitmap HDC winDC = GetWindowDC(window); HDC memDC = CreateCompatibleDC(winDC); BYTE* memory = 0; HBITMAP bitmap = CreateDIBSection(winDC, &info, DIB_RGB_COLORS, (void**)&memory, 0, 0); SelectObject(memDC, bitmap); BitBlt(memDC, 0, 0, bitmap_dx, bitmap_dy, winDC, 0, 0, SRCCOPY); DeleteDC(memDC); ReleaseDC(window, winDC); // save dibsection data int bytes = (((24*bitmap_dx + 31) & (~31))/8)*bitmap_dy; file.write(memory, bytes); // HA HA, forgot paste in the DeleteObject lol, happy now ;)? DeleteObject(bitmap);}This topic has been locked by a moderator. New replies are not allowed.
With your permission, GameDev.net uses analytics cookies to understand how people use the platform. You can accept analytics or continue with necessary cookies only. Learn more