我正在使用 PrintWindow API 截取特定窗口(hwnd)的屏幕截图。这工作得很好,它会截取整个窗口。我的问题是:我的窗口高度是 742,宽度是 653。如果我想在窗口中间的某个地方截屏(不是从 0,0 开始)。我将如何在 PrintWindow 中指定 x 和 y 轴。我的 snipnet 代码如下所示:
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 时,时间效率约为 25 毫秒。但是当我用 PrintWindow 截屏时,它的时间效率是 6~8ms。所以这将非常适合我的项目。
但 PrintWindow API 总是从 (0,0) 捕获窗口图像。有人可以告诉我/建议我如何在指定位置截取窗口的屏幕截图,例如 x=20 和 y=30。
谢谢你。