我有一个 MDI 编写的应用夸脱一些子窗口包括 QGLWidgets,即载的情况。最突出的这些用途载折点片段着色器化他们的数据。

我需要编程方式捕获的截图应用程序的主要窗口,当然包括所有的电子窗口,发生可见。听起来很容易在第一个("肯定已经问过很多次,因此,让我们只是谷歌的!"), 但后来看看它似乎变得有点棘手...

现在,这里就是我已经尝试迄今为止:

  1. QPixmap::grabWidget 不能工作的子窗口使用色器的程序,显然是因为重新定向方面似乎不支持必要的照片的扩展。(渲染代码的检查,即相关方面支持所需的扩展,并拒绝继续,如果没有。)
  2. QPixmap::grabWindow 静静地离开所有照片空的情况下--甚至那些利用基本原语只。
  3. 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.
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top