如何使用OpenGL进行screencapture窗口?

时间:2016-12-22 17:05:42

标签: c++ winapi opengl

我试图捕获OpenGL应用程序(特别是MEmu)的像素,然后将其转换为OpenCV Mat。我使用this post中的hwnd2mat()函数作为参考,但遇到了一些问题。

仅捕获窗口框架,如下所示:

enter image description here

进一步调查让我相信问题在于StretchBlt(或BitBlt)无法捕获OpenGL像素。

我尝试使用glReadPixels(并使用this转换为Mat),但它没有读取任何像素。 wglCreateContext返回NULL,可能是因为我的应用程序不拥有MEmu的DC。因此,wglMakeCurrent不执行任何操作,并且不会读取像素。

我能够创建一个解决方法修改版本的hwnd2mat,它获取了MEmu的hwnd的WindowRect,但后来使用GetDC(NULL)仅捕获了MEmu所在的屏幕部分。这可以工作,但任何登上MEmu的窗户都会被捕获。

我可以使用它,当然,但是想知道是否有一种方法可以在我不拥有的窗口上使用glReadPixels,或者确保hwnd2mat能够处理正在使用的窗口内容的方法的OpenGL。

0 个答案:

没有答案