用Java实现DirectX程序的屏幕截图

用Java实现DirectX程序的屏幕截图,java,opengl,directx,Java,Opengl,Directx,我编写了一个Java应用程序,它使用Java.awt.Robot获取屏幕截图,我想知道是否可以使用DirectX/OpenGL捕获程序 每次我尝试这样做,我都会得到一个黑屏。。。硬的;o) 我尝试了一些其他截图,也得到了一个黑屏。看起来DirectX正在将图形直接传递到监视器输出。我想知道这是否可以在java应用程序中访问。不知道这是否真的是一个解决方案,但似乎有更多可能的方法使用“FrameGrabber”或JavaCV中的某个相关类获取屏幕截图信息: 屏幕上显示的一些最终输出可以在图形卡上进

我编写了一个Java应用程序,它使用Java.awt.Robot获取屏幕截图,我想知道是否可以使用DirectX/OpenGL捕获程序

每次我尝试这样做,我都会得到一个黑屏。。。硬的;o)


我尝试了一些其他截图,也得到了一个黑屏。看起来DirectX正在将图形直接传递到监视器输出。我想知道这是否可以在java应用程序中访问。

不知道这是否真的是一个解决方案,但似乎有更多可能的方法使用“FrameGrabber”或JavaCV中的某个相关类获取屏幕截图信息: 屏幕上显示的一些最终输出可以在图形卡上进行计算,该图形卡设置了着色器,以便在图像数据被放入显示缓冲区之前对其进行操作,因此,如果没有模拟环回(在捕获卡上从视频输出到视频输入),可能无法捕获某些效果


OpenGL是一种绘图API,而不是图形系统的通用接口。有时候,通过一些肮脏的黑客手段,用OpenGL截图确实是可能的。然而,最近我尝试在现代操作系统上重新实现它,看看它是否仍然有效,不,它不再有效。

是的,这是可能的。但可能只有在有限的周期内

我已经成功地在linux上的OpenGL(jogl)窗口和使用机器人的windows上捕获了内容

有关实施的一些具体信息可能与您的不同:

  • 对CreateScreateScreenCapture的调用是在OpenGL中完成的 应用程序
  • 应用程序使用了重量级GLCanvas
  • 它使用Java6
确保传递正确的坐标。您可以从中获取要使用的屏幕坐标