Java的createScreenCapture不能在OS X上运行,会产生完全错误的颜色

时间:2011-12-23 16:30:56

标签: java awt screenshot awtrobot

如果我运行此代码:

BufferedImage image = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
ImageIO.write(image, "png", new File("takenwithrobot.png"));

它产生以下PNG:http://davzy.com/screenshots/takenwithrobot.png

如果我使用内置的OS X屏幕捕获实用程序截取屏幕截图,我会收到以下信息:http://davzy.com/screenshots/takenwithOSXscreenshotutility.png

正如您所看到的,两者中的颜色完全不同。经过几次实验后,我确定上面使用内置OS X实用程序拍摄的屏幕截图中的颜色颜色正确,机器人截图的颜色完全错误。

我正在编写一个脚本,逐个像素地比较屏幕截图,因此如果机器人正在制作错误颜色的屏幕截图,它将无法正常工作。有趣的是,如果我在Windows机器上运行上述功能,它可以正常工作并获得正确的颜色。我想也许机器人的颜色深度是所有错误颜色的原因,但我不知道这是不是问题,我不知道如何改变它。

1 个答案:

答案 0 :(得分:1)

如果机器人拍摄所有屏幕截图,则应该没有问题(两个屏幕截图的两个同样错误的像素显然是相同的)。

首先,我看到了有焦点的应用程序窗口和没有焦点的应用程序窗口之间的区别。也许这是一个解释。对于NetBeans状态行中的不同灰色。

此外,标准屏幕捕获可能会纠正伽玛并进行抗锯齿处理。也许就是这种情况。

(不幸的是,我的非Mac显示器没有显示其他差异。)