Essayer de mettre cadre pivotant vers l'avant avant de prendre une capture d'écran, mais obtenir des artefacts
-
16-09-2019 - |
Question
J'ai une partie de mon application qui prend une capture d'écran d'une certaine fenêtre, mais avant que je ne veux donc j'apporter la fenêtre à l'avant. Cela fonctionne très bien sur ma machine Mac mais quand je l'ai testé sur Windows XP sur la capture d'écran parallèles a toujours une zone grisées où la fenêtre était chevauchement. Il semble que la capture d'écran est toujours prise alors que la fenêtre que je veux sur le dessus est en cours de transfert vers le haut. Je l'ai essayé d'utiliser à la fois:
frame.setVisible(true);
and
frame.setAlwaysOnTop(true);
Quelqu'un at-il une solution raisonnable à ce problème?
La solution
Si vous essayez de prendre une capture d'écran d'une fenêtre w
peinte par Java, il vous suffit de lui demander de se peindre sur un
BufferedImage bi = new BufferedImage(
w.width, w.height, BufferedImage.TYPE_INT_RGB);
Graphics g = bi.getGraphics();
en appelant les fenêtres de la méthode de paint(g)
. Vous pouvez ensuite enregistrer le BufferedImage dans un fichier. Si vous saisissant une fenêtre externe, alors je crois que Oscar Reyes vous a donné toutes les réponses.
Autres conseils
-
Vous pouvez ajouter un délai le fil qui prend la capture d'écran.
-
Vous pouvez tirer la capture d'écran du cadre lorsque l'on a obtenu le focus:
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);
-
Vous pouvez faire les deux.