脱MDI应用程序载有:如何抓住一个有效的截图?
-
20-09-2019 - |
题
我有一个 MDI 编写的应用夸脱一些子窗口包括 QGLWidget
s,即载的情况。最突出的这些用途载折点片段着色器化他们的数据。
我需要编程方式捕获的截图应用程序的主要窗口,当然包括所有的电子窗口,发生可见。听起来很容易在第一个("肯定已经问过很多次,因此,让我们只是谷歌的!"), 但后来看看它似乎变得有点棘手...
现在,这里就是我已经尝试迄今为止:
QPixmap::grabWidget
不能工作的子窗口使用色器的程序,显然是因为重新定向方面似乎不支持必要的照片的扩展。(渲染代码的检查,即相关方面支持所需的扩展,并拒绝继续,如果没有。)QPixmap::grabWindow
静静地离开所有照片空的情况下--甚至那些利用基本原语只。QGLWidget::grabFrameBuffer
工作原理,但仅捕获的照片方面的特定子窗口,然而我想要抓住的整个应用程序(基本上是什么Alt+PrtScr
并在Windows)。
我还试图做的第一#2和再循环#3的所有子窗口,只是复制的结果#3到正确位置的图像,从#2.这个工作很好,直到我做了一些子窗口的重叠--在这种情况下的图像,从#3复盖子窗口框架,等等。因此,这种办法将可能需要更多的代码,以便处理所有的肮脏角落的情况下...
一些额外背景:一旦我得到的截图,我要把他们在一个seqence,以便创建一个视频--可能使用 。.这使得这个问题的一种延续到(第一部分) 我以前的问题;这只是该应用程序已经从一个单方面独立的加载程序的东西,使用夸脱的整体窗口和用户界面部件的东西,并嵌入图形中的子窗口。
虽然我当然会喜欢一个好,脱上下的交叉平台方案,我愿意考虑诉诸于一个特定的哈克太。(这应该是可能的,因为我能看到 Alt+PrtScr
这样做很正确的事情。)
因此,任何建议?
解决方案
非常予以解决了,但并捕获的桌面(不含隐藏你的窗口)像在 这个教程 和裁剪一切,但你的窗口的工作?
更一般地说,我甚至不确定,载的规格要求输出已被放置在前缓冲区:一个实施可以使用的视频复盖(或Voodoo2式x诡计)对于输出。
其他提示
我唯一能想到的方面是要做到以下psuedocode:
for each window
grab the window into its own pixmap
grab the GL portions and paste into the windows
order the window pixmaps by depth of the window (deepest first)
initialize a common pixmap
for each window pixmap
paint the window pixmap into the common pixmap at the appropriate location.
这是任何使用??
采集的例子显示如何检索内容的一个载帧缓冲区
不隶属于 StackOverflow