void CaptureWindow(HWND hWnd, LPCTSTR lpFileName) { // 获取窗口客户区的大小 RECT rect; ::GetClientRect(hWnd, &rect); int nWidth = rect.right - rect.left; int nHeight = rect.bottom - rect.top; // 创建一个兼容的 DC CDC dc; dc.CreateCompatibleDC(NULL); // 创建一个位图 CBitmap bmp; bmp.CreateCompatibleBitmap(&dc, nWidth, nHeight); // 将位图选入 DC CBitmap* pOldBmp = dc.SelectObject(&bmp); // 将窗口内容绘制到 DC 中 ::PrintWindow(hWnd, dc.GetSafeHdc(), PW_CLIENTONLY); // 将位图保存为 BMP 文件 CImage image; image.Attach((HBITMAP) bmp.Detach()); image.Save(lpFileName, Gdiplus::ImageFormatBMP); // 恢复 DC dc.SelectObject(pOldBmp); } 保存图片是黑白的如何改为彩色
时间: 2024-01-21 08:17:03 浏览: 153
您可以尝试使用以下代码更改保存的图像格式为JPEG,并将其质量设置为100,从而获得彩色图像:
```C++
void CaptureWindow(HWND hWnd, LPCTSTR lpFileName) {
// 获取窗口客户区的大小
RECT rect;
::GetClientRect(hWnd, &rect);
int nWidth = rect.right - rect.left;
int nHeight = rect.bottom - rect.top;
// 创建一个兼容的 DC
CDC dc;
dc.CreateCompatibleDC(NULL);
// 创建一个位图
CBitmap bmp;
bmp.CreateCompatibleBitmap(&dc, nWidth, nHeight);
// 将位图选入 DC
CBitmap* pOldBmp = dc.SelectObject(&bmp);
// 将窗口内容绘制到 DC 中
::PrintWindow(hWnd, dc.GetSafeHdc(), PW_CLIENTONLY);
// 将位图保存为 JPEG 文件
CImage image;
image.Attach((HBITMAP) bmp.Detach());
image.Save(lpFileName, Gdiplus::ImageFormatJPEG, 100);
// 恢复 DC
dc.SelectObject(pOldBmp);
}
```
请注意,这种方法可能会导致文件大小增加。如果您想保持文件大小较小,请考虑降低JPEG图像的质量。
阅读全文