很好的问题,我自己不时考虑这个问题!
正如您已经写过的,将重量级组件(例如3D和AWT)放到图像上是一个大问题。这些组件(几乎)被 直接转移到图形卡上,
因此不能使用常规的
paintComponent东西将它们重新渲染为图像,您需要操作系统的帮助或自行绘制这些组件。
1.制作自己的图像渲染器
对于没有to图像渲染方法的每个组件,您需要创建自己的组件。例如,使用jogl可以使用此方法进行屏幕外截图(SOpost)。
2.渲染到虚拟屏幕上
先决条件:
- 您可以在无头的环境中启动程序/组件吗?
- 您在使用Linux吗?
然后,您可以使用Xvfb将整个程序呈现到虚拟屏幕上,然后从该虚拟屏幕上截取屏幕截图,如下所示:
Xvfb :1 &DISPLAY=:1 java YourMainClassxwd -display :1 -root -out image.xwd
也许您需要通过将要渲染的程序的大小传递给Xvfb来进行一些操作(
-screen 0 1024x768x24)。



