我想要的只是捕捉父母创建的'子窗口'(setParent())的一部分。我曾经用bitblt()来做这件事,但问题是子窗口可以是任何类型的应用程序,在我的情况下,OpenGL在其中的一部分中运行。如果我bitblt()那么,那么OGL部分是空白的,不会被写入BMP。
DWM,特别是dwmRegisterThumbnail()不允许生成子窗口的缩略图。所以请给我指点。
感谢。
答案 0 :(得分:1)
我已经做了一段时间了,所以我的解释可能有点模糊,但从我记忆中看,Windows并没有“看到”在窗口内呈现的OpenGL。
Windows所做的是以指定的大小创建窗口,然后将其“交给”OpenGL进行渲染。这意味着您无法获得从代码的Windows端渲染的像素。
当我们想要捕捉3D时,我们必须将屏幕重新渲染为屏幕外的位图,然后保存(或打印)。
显然整个屏幕截图(打印屏幕)都有效,因为它正在读取最终像素。
答案 1 :(得分:1)
我建议你:
抱歉,它的工作量更大,但应该可以正常工作,这比你现在的工作要好。
答案 2 :(得分:0)
这可能会有所帮助: http://code.google.com/p/telekinesis/source/browse/trunk/Mac/Source/glgrab.c?r=140 http://www.codeproject.com/KB/dialog/screencap.aspx
Java的Robot类(http://java.sun.com/javase/6/docs/api/java/awt/Robot.html#createScreenCapture%28java.awt.Rectangle%29)
答案 3 :(得分:0)
我无法访问任何可能打开的子窗口的源代码,包括OpenGL的窗口