xwd/java.awt.Robot捕获黑色窗口(除unity2d外壳外的所有东西都是黑色的)
今天,我遇到了一个奇怪的问题:xwd/java.awt.Robot捕获黑色窗口(除unity2d外壳外的所有东西都是黑色的),java,screenshot,openjdk,ubuntu-unity,Java,Screenshot,Openjdk,Ubuntu Unity,今天,我遇到了一个奇怪的问题:java.awt.Robot捕获黑色区域,而不是图像内容。我正在使用Ubuntu 12.04和OpenJDK6/7 Unix上的java.awt.Robot受sun.awt.X11.XRobotPeer支持, 其使用的图像采集功能与xwdutility(第92-162行)使用的功能类似 因此,我运行了以下命令: xwd -root -out test.screen.root.xwd 然后用gimp打开了这个文件。以下是我得到的: 然后我试着: xwd -root
java.awt.Robot
捕获黑色区域,而不是图像内容。我正在使用Ubuntu 12.04和OpenJDK6/7
Unix上的java.awt.Robot
受sun.awt.X11.XRobotPeer
支持,
其使用的图像采集功能与xwd
utility(第92-162行)使用的功能类似
因此,我运行了以下命令:
xwd -root -out test.screen.root.xwd
然后用gimp打开了这个文件。以下是我得到的:
然后我试着:
xwd -root | xwdtopnm | pnmtopng > Screenshot.root.png
我得到了以下结果:
控制台输出:
xwdtopnm: writing PPM file
libpng warning: Invalid sBIT depth specified
还有图像本身:
这是什么原因造成的?如何修复它?似乎解决这一问题的唯一方法是使用您自己的屏幕快照本机实现 以下是unity devs在启动板上对问题的详细描述:
问题在于unity-2d绘制自身的方式和XShaping的使用。解决这一问题的唯一方法似乎是使用自己的屏幕快照本地实现 以下是unity devs在启动板上对问题的详细描述:
问题在于unity-2d绘制自身的方式和XShaping的使用。我收到了相同的错误消息。显然,它与
xwdtopnm
有关,不能很好地处理屏幕的颜色深度,导致生成的png文件损坏
另一种解决方案是使用imagemagick
软件包中的import
命令拍摄屏幕截图
因此,您可以直接替换:
xwd-root | xwdtopnm | pnmtopng>Screenshot.root.png
与:
导入-窗口根屏幕截图.root.png
注意:如果未安装,您可以使用以下命令在Ubuntu上获得
imagemagick
:
xwd -root -out test.screen.root.xwd
sudo apt安装imagemagick
我收到了相同的错误消息。显然,它与xwdtopnm
有关,不能很好地处理屏幕的颜色深度,导致生成的png文件损坏
另一种解决方案是使用imagemagick
软件包中的import
命令拍摄屏幕截图
因此,您可以直接替换:
xwd-root | xwdtopnm | pnmtopng>Screenshot.root.png
与:
导入-窗口根屏幕截图.root.png
注意:如果未安装,您可以使用以下命令在Ubuntu上获得
imagemagick
:
xwd -root -out test.screen.root.xwd
sudo apt安装imagemagick
我会在Oracle的官方JDK上试用您的代码,如果不起作用,那么就在Windows上的Oracle官方JDK上试用。如果其中任何一个与您的代码一起工作,那么请提交一份bug报告。要么反对openJDK,要么反对官方的。如果这些都不适用于您的代码,那么请修复您的代码。我在OpenJDK6/7和OracleJDK6/7上尝试过。这是Ubuntu linux唯一的问题。Robot在Windows上按预期工作。unity标记用于Microsoft unity。请不要误用它。我会在Oracle的官方JDK上试用您的代码,如果这不起作用,那么就在Oracle的官方JDK上的Windows上试用。如果其中任何一个与您的代码一起工作,那么请提交一份bug报告。要么反对openJDK,要么反对官方的。如果这些都不适用于您的代码,那么请修复您的代码。我在OpenJDK6/7和OracleJDK6/7上尝试过。这是Ubuntu linux唯一的问题。Robot在Windows上按预期工作。unity标记用于Microsoft unity。请不要误用它。