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

組み込みのOSX画面キャプチャユーティリティを使用してスクリーンショットを撮ると、次のようになります。http: //davzy.com/screenshots/takenwithOSXscreenshotutility.png

ご覧のとおり、両方の色は完全に異なります。いくつかの実験の結果、組み込みのOS Xユーティリティで撮影した上記のスクリーンショットの色は正しい色であり、ロボットで撮影したスクリーンショットの色は完全に間違っていると判断しました。

スクリーンショットのピクセルごとに比較するスクリプトを書いているので、ロボットが間違った色のスクリーンショットを作成している場合、それは機能しません。興味深いことに、上記をWindowsマシンで実行すると、問題なく動作し、正しい色が得られます。ロボットの色深度が色違いの原因かもしれないと思っていたのですが、それが問題なのかわからないし、どうやって変えたらいいのかわかりません。

4

1 に答える 1

1

ロボットがすべてのスクリーンショットを撮る場合、問題はないはずです(2つのスクリーンショットの2つの等しく誤ったピクセルは明らかに同じです)。

最初に、フォーカスのあるアプリケーションウィンドウとフォーカスのないアプリケーションウィンドウの違いを確認しました。多分それは一つの説明です。NetBeansのステータス行の別の灰色。

さらに、標準のスクリーンキャプチャは、ガンマを修正し、アンチエイリアシングを実行する場合があります。多分それはここに当てはまります。

(残念ながら、私のMac以外のモニターには他の違いは表示されません。)

于 2011-12-23T16:58:30.410 に答える