スクリーンショットを撮る前にスイングフレームを前面に表示しようとしましたが、アーティファクトが発生しました
-
16-09-2019 - |
質問
アプリには特定のウィンドウのスクリーンショットを撮る部分がありますが、その前にウィンドウを前面に持ってきたいと思っています。これは私の Mac マシンでは問題なく動作しますが、Parallels 上の Windows XP でテストしたところ、スクリーンショットには重なり合うウィンドウがあった部分が常にグレー表示されます。スクリーンショットは常に一番上に表示したいウィンドウが一番上に移動している間に撮影されるようです。両方を使用してみました:
frame.setVisible(true);
and
frame.setAlwaysOnTop(true);
この問題に対する合理的な解決策を持っている人はいますか?
解決
あなたは、Javaによって描かウィンドウ
w
のスクリーンショットを取るしようとしている場合は、あなただけで自分自身をペイントすることを求めることができます。
BufferedImage bi = new BufferedImage(
w.width, w.height, BufferedImage.TYPE_INT_RGB);
Graphics g = bi.getGraphics();
Windowsのpaint(g)
メソッドを呼び出すことで。あなたは、ファイルへのBufferedImageを保存することができます。あなたは、外部ウィンドウをつかんでいる場合は、その後、私はオスカーレイエスはあなたにすべての答えを与えていると考えています。
他のヒント
スクリーンショットを取得するスレッドに遅延を追加できます。
フォーカスを獲得したときに、フレームからスクリーンショットを発射できます。
class ScreenshotShooter implements FocusListener { public void focusGained( FocusEvent e ) { // smile..... // you may add a sec of delay here just be be sure. } public void focusLost( FocusEvent e ) {} } FocusListener focusListener = new ScreenshotShooter(); frame.addFocusListener( focusListener ); frame.setVisible( true ); // should autofire frame.remoe( focusListener);
両方を行うこともできます。
所属していません StackOverflow