Tratando de llevar bastidor basculante hacia delante antes de tomar una captura de pantalla pero conseguir artefactos

StackOverflow https://stackoverflow.com/questions/1280333

Pregunta

Tengo una parte de mi aplicación que toma una captura de pantalla de una determinada ventana, pero antes de hacerlo quiero traer la ventana al frente. Esto funciona bien en mi máquina Mac, pero cuando lo probé en Windows XP en paralelo a la pantalla siempre tiene un área de color gris donde estaba la ventana superpuesta. Parece que la pantalla siempre se toma mientras la ventana que quiero en la parte superior se transfiere a la parte superior. He intentado usar tanto:

     frame.setVisible(true);
            and
     frame.setAlwaysOnTop(true);

¿Alguien tiene una solución razonable para este problema?

¿Fue útil?

Solución

Si usted está tratando de tomar una captura de pantalla de una ventana pintada por w Java, que sólo puede pedirle que pintarse en un

BufferedImage bi = new BufferedImage(
    w.width, w.height, BufferedImage.TYPE_INT_RGB); 
Graphics g = bi.getGraphics();

llamando al método paint(g) las ventanas. A continuación, puede guardar el BufferedImage en un archivo. Si está agarrando una ventana externa, entonces creo que Oscar Reyes le ha dado todas las respuestas.

Otros consejos

  • Se podría añadir un retraso del hilo que se lleva a la pantalla.

  • Se podría disparar la captura de pantalla de la trama cuando el foco se ha ganado:

    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);
    
  • Puede hacer ambas cosas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top