C++实现截屏
时间: 2023-07-11 21:04:19 浏览: 113
纯C++实现的截屏
3星 · 编辑精心推荐
C++实现截屏可以使用Win32 API中的一些函数来实现。
以下是一个简单的示例代码,可以实现截取整个屏幕并保存为BMP格式的图片:
```cpp
#include <windows.h>
#include <wingdi.h>
int main()
{
// 获取屏幕DC
HDC hdcScreen = GetDC(NULL);
// 获取屏幕分辨率
int nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
int nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
// 创建设备描述表
HDC hdcMemDC = CreateCompatibleDC(hdcScreen);
// 创建位图对象
HBITMAP hbmScreen = CreateCompatibleBitmap(hdcScreen, nScreenWidth, nScreenHeight);
// 将位图选入设备描述表中
SelectObject(hdcMemDC, hbmScreen);
// 从屏幕DC中复制屏幕内容到内存DC中
BitBlt(hdcMemDC, 0, 0, nScreenWidth, nScreenHeight, hdcScreen, 0, 0, SRCCOPY);
// 保存为BMP文件
BITMAPINFOHEADER bi;
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = nScreenWidth;
bi.biHeight = nScreenHeight;
bi.biPlanes = 1;
bi.biBitCount = 24;
bi.biCompression = BI_RGB;
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0;
HANDLE hFile = CreateFile("screenshot.bmp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile != INVALID_HANDLE_VALUE)
{
DWORD dwBytesWritten;
BITMAPFILEHEADER bmfHeader;
bmfHeader.bfType = 0x4D42; // "BM"
bmfHeader.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + nScreenWidth * nScreenHeight * 3;
bmfHeader.bfReserved1 = 0;
bmfHeader.bfReserved2 = 0;
bmfHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
WriteFile(hFile, &bmfHeader, sizeof(BITMAPFILEHEADER), &dwBytesWritten, NULL);
WriteFile(hFile, &bi, sizeof(BITMAPINFOHEADER), &dwBytesWritten, NULL);
WriteFile(hFile, GetBitmapBits(hbmScreen, nScreenWidth * nScreenHeight * 3, NULL), nScreenWidth * nScreenHeight * 3, &dwBytesWritten, NULL);
CloseHandle(hFile);
}
// 清除资源
DeleteObject(hbmScreen);
DeleteDC(hdcMemDC);
ReleaseDC(NULL, hdcScreen);
return 0;
}
```
需要注意的是,上述代码会保存整个屏幕的截图,如果需要截取指定区域的屏幕,可以通过修改`BitBlt`函数的参数来实现。
阅读全文