winapi - 获取在其中运行 OpenGL 的子窗口的屏幕截图(Windows)

标签 winapi opengl screenshot

我有一个带 child 的主窗口。我需要以编程方式截取屏幕截图以裁剪并将它们绘制回我的主窗口。我这样做的方法是:

HDC hDC = GetWindowDC(hWnd);
HDC memDC = CreateCompatibleDC(hDC);
HBITMAP memBM = CreateCompatibleBitmap(hDC, Width, Height);
HBITMAP OldBM = (HBITMAP)::SelectObject(memDC, memBM );
BitBlt(memDC, 0, 0, Width, Height , hDC, BEGINX, BEGINY, SRCCOPY);
int Bpp = GetDeviceCaps(hDC,BITSPIXEL);
int size = Bpp/8 * ( Width * Height );
BYTE *lpBits = new BYTE[size];
GetBitmapBits(memBM, size, lpBits);

但这不会捕获子窗口的 OpenGL 部分,而只是在应该进行 OGL 渲染的区域绘制空白。

最佳答案

我记得几年前我在尝试截屏视频时遇到了类似的问题,只是在视频所在的地方出现了一个黑色区域。当时通过减少视频驱动程序上的硬件加速设置(在 XP 上:右键单击桌面 > 属性 > 设置 > 高级 > 故障排除)来解决这个问题。

至于基于代码的解决方案,您可能需要引用以下以前的帖子:

Blank Screenshots In Vista and Win7 when gaming

Saving a screenshot of a window using C#, WPF, and DWM

关于winapi - 获取在其中运行 OpenGL 的子窗口的屏幕截图(Windows),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2143854/

相关文章:

c# - WPF:截取屏幕截图的方法

Qt:屏幕截图

c++ - 预处理器宏自动生成窗口消息循环

c++ - 如何使用 VerQueryValue 获取 FileDescription(让示例运行)?

c++ - 为什么 'CreateEvent' 创建的 HANDLE 在另一个进程中无效?

c++ - OpenGL 中的绘制顺序

c - GCC 编译的 Win32 程序在系统 DLL 调用期间崩溃

python - 模拟机器人运动的最佳 3D 库

c++ - SDL2 : Fast Pixel Manipulation

javascript - 桌面音频捕获不适用于 Chrome 应用程序