gpt4 book ai didi

c++ - 使用 PrintWindow API 截图(客户区)

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:23:44 26 4
gpt4 key购买 nike

我正在使用 PrintWindow API 截取特定窗口 (hwnd) 的屏幕截图。这工作得很好,它截取了整个窗口的屏幕截图。我的问题是:我的窗口高度是 742,宽度是 653。如果我想截取窗口中间某处的屏幕截图(不是从 0,0 开始)。我将如何在 PrintWindow 中指定 x 和 y 轴。我的代码片段如下所示:

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 处。

谢谢。

最佳答案

显然,不可能为 PrintWindow 指定一个矩形,因为它不接受这样的参数。

可能有解决方法。尝试使用 SelectClipRgn 为设备上下文指定剪辑区域。使用 CreateRectRgn 从矩形创建区域。如果幸运的话,WM_PAINT 处理程序会将剪裁区域考虑在内。

您可以尝试使用 SetWindowOrg/SetViewportOrg 指定偏移量。

但这只是提示,您需要自己进行研究。

关于c++ - 使用 PrintWindow API 截图(客户区),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14868840/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com