C++ 使用PrintWindow API拍摄屏幕截图(客户端区域)
我正在使用PrintWindowAPI拍摄特定窗口(hwnd)的屏幕截图。这工作绝对不错,它拍摄了整个窗口的截图。我的问题是:我的窗户高度是742,宽度是653。如果我想把屏幕截图放在窗口中间的某个地方(不是从0,0)。如何在PrintWindow中指定x&y轴。我的snipnet代码如下所示:C++ 使用PrintWindow API拍摄屏幕截图(客户端区域),c++,mfc,C++,Mfc,我正在使用PrintWindowAPI拍摄特定窗口(hwnd)的屏幕截图。这工作绝对不错,它拍摄了整个窗口的截图。我的问题是:我的窗户高度是742,宽度是653。如果我想把屏幕截图放在窗口中间的某个地方(不是从0,0)。如何在PrintWindow中指定x&y轴。我的snipnet代码如下所示: void Screenshot() { CImage image; image.Create(imageWidth, imageHeight, 24); CImageDC imageDC(i
void Screenshot()
{
CImage image;
image.Create(imageWidth, imageHeight, 24);
CImageDC imageDC(image);
HWND hwnd = ::FindWindow(0,"EIML");
PrintWindow(hwnd, imageDC, PW_CLIENTONLY);
image.Save("H:\\out.jpg",ImageFormatJPEG);
}
我尝试过其他方法,比如BitBlt和StretchBlt,其中我们可以选择指定x&y轴。但是对于我的项目来说,时间效率是非常重要的。当我尝试使用BitBlt和StretchBlt时,时间效率约为25ms。但是当我用PrintWindow截图时,它的时间效率是6~8毫秒。所以这将非常适合我的项目
但是PrintWindowAPI总是从(0,0)中捕获窗口图像。有人能告诉我/建议我如何在指定位置拍摄窗口的屏幕截图吗?比如x=20&y=30
多谢各位 显然,无法为
PrintWindow
指定矩形,因为它不接受这样的参数
可能有一个解决办法。尝试使用SelectClipRgn
为设备上下文指定剪辑区域。使用CreateRectRgn
从矩形创建区域。如果幸运的话,WM_绘制处理程序将考虑剪裁区域
您可以尝试使用SetWindowOrg
/SetViewportOrg
指定偏移量
但这些只是提示,你需要自己做研究。好的,谢谢你的指导。。我会试试这个。