BitBlt 不在硬件加速模式下捕获窗口

2024-03-22

我目前正在使用 GDI32.dll 捕获窗口快照,尽管我遇到了硬件加速 Windows 的问题,我想知道是否有办法规避。

我在这里发现了这段令人惊奇的代码:

public static Image CaptureWindow(IntPtr handle)
{

    IntPtr hdcSrc = User32.GetWindowDC(handle);

    Rect windowRect = new Rect();
    User32.GetWindowRect(handle, ref windowRect);

    int width = windowRect.Right - windowRect.Left;
    int height = windowRect.Bottom - windowRect.Top;

    IntPtr hdcDest = Gdi32.CreateCompatibleDC(hdcSrc);
    IntPtr hBitmap = Gdi32.CreateCompatibleBitmap(hdcSrc, width, height);

    IntPtr hOld = Gdi32.SelectObject(hdcDest, hBitmap);
    Gdi32.BitBlt(hdcDest, 0, 0, width, height, hdcSrc, 0, 0, SRCCOPY);
    Gdi32.SelectObject(hdcDest, hOld);
    Gdi32.DeleteDC(hdcDest);
    User32.ReleaseDC(handle, hdcSrc);

    Image image = Image.FromHbitmap(hBitmap);
    Gdi32.DeleteObject(hBitmap);

    return image;
}

它适用于除我的镀铬窗户之外的所有窗户。在 Chrome 中禁用硬件加速解决了这个问题,尽管我不想这样做。

有人对这个问题有什么建议/解决方案吗?

感谢您的任何和所有帮助,

-Paul


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BitBlt 不在硬件加速模式下捕获窗口 的相关文章

随机推荐