我有以下代码正常工作,它会在我的应用程序上获取活动窗口的快照,将其放入HBITMAP变量并将其保存在文件中。 现在我希望能够根据给定的起始坐标和宽度/高度裁剪图像并仅保存一部分图像。
重要的一点是,我必须使用标题栏保存窗口,而不仅仅是客户区,因此使用PrintWindow()而不是BitBlt()方法很容易实现。
我更喜欢使用PrintWindow()的解决方案,因为BitBlt()方法没有正确使用标题栏(除非你知道这样做的方法)。
适用于整个窗口的当前代码是:
HWND hParentWindow = GetActiveWindow();
RECT rc;
GetWindowRect(hParentWindow, &rc);
int width = rc.right - rc.left;
int height = rc.bottom - rc.top;
//create
HDC hdcParent = GetDC(NULL);
HDC hdc = CreateCompatibleDC(hdcParent);
HBITMAP hBmp = CreateCompatibleBitmap(hdcParent, width, height);
SelectObject(hdc, hBmp);
//Print to memory hdc
PrintWindow(hParentWindow, hdc, 0);
//copy to clipboard
OpenClipboard(NULL);
EmptyClipboard();
SetClipboardData(CF_BITMAP, hBmp);
CloseClipboard();
// Save it in a file:
saveBitmap(ofn.lpstrFile, hBmp);
//release
DeleteDC(hdc);
DeleteObject(hBmp);
ReleaseDC(NULL, hdcParent);
如何保存裁剪的位图?
答案 0 :(得分:0)
基本上做一个BitBlt。以下是一个讨论此问题的线程,其解决方案似乎足以满足您的需求:
答案 1 :(得分:0)