3

如果我运行此代码:

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 机器上运行上述程序,它就可以正常工作并获得正确的颜色。我在想也许机器人的颜色深度是所有错误颜色的原因,但我不知道这是否是问题,我不知道如何改变它。

4

1 回答 1

1

如果机器人全部截屏,应该没有问题(两张截图的两个同样的假像素显然是一样的)。

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

此外,标准的屏幕截图可能会校正伽玛并进行抗锯齿。也许这里就是这种情况。

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

于 2011-12-23T16:58:30.410 回答