2012-06-12 27 views
6

Estoy haciendo una aplicación de captura de pantalla basada en Java, y quiero hacerlo de modo que cuando presione una combinación de teclas en su teclado algo como this video ocurra donde seleccione y área en su pantalla, y toma una captura de pantalla del área seleccionada.Seleccione un área para capturar usando el mouse

¿Cómo seleccionar un área para capturar con el mouse?

+0

acabo de terminar de añadir el cursor personalizado. No tengo idea de cómo comenzar a hacer que sea capaz de seleccionar la pantalla. –

+0

¿Qué ha hecho en sus esfuerzos por resolver este problema, aparte de publicar esta pregunta? – Jeffrey

+1

He estado buscando al menos 3 días en algún tipo de pista sobre cómo hacer esto. No he encontrado uno, así que decidí publicar esta pregunta. –

Respuesta

16

Comience con algo como esto.

Screen Capture Rectangle

import java.awt.*; 
import java.awt.event.*; 
import java.awt.image.*; 
import javax.swing.*; 

/** Getting a Rectangle of interest on the screen. 
Requires the MotivatedEndUser API - sold separately. */ 
public class ScreenCaptureRectangle { 

    Rectangle captureRect; 

    ScreenCaptureRectangle(final BufferedImage screen) { 
     final BufferedImage screenCopy = new BufferedImage(
       screen.getWidth(), 
       screen.getHeight(), 
       screen.getType()); 
     final JLabel screenLabel = new JLabel(new ImageIcon(screenCopy)); 
     JScrollPane screenScroll = new JScrollPane(screenLabel); 

     screenScroll.setPreferredSize(new Dimension(
       (int)(screen.getWidth()/3), 
       (int)(screen.getHeight()/3))); 

     JPanel panel = new JPanel(new BorderLayout()); 
     panel.add(screenScroll, BorderLayout.CENTER); 

     final JLabel selectionLabel = new JLabel(
       "Drag a rectangle in the screen shot!"); 
     panel.add(selectionLabel, BorderLayout.SOUTH); 

     repaint(screen, screenCopy); 
     screenLabel.repaint(); 

     screenLabel.addMouseMotionListener(new MouseMotionAdapter() { 

      Point start = new Point(); 

      @Override 
      public void mouseMoved(MouseEvent me) { 
       start = me.getPoint(); 
       repaint(screen, screenCopy); 
       selectionLabel.setText("Start Point: " + start); 
       screenLabel.repaint(); 
      } 

      @Override 
      public void mouseDragged(MouseEvent me) { 
       Point end = me.getPoint(); 
       captureRect = new Rectangle(start, 
         new Dimension(end.x-start.x, end.y-start.y)); 
       repaint(screen, screenCopy); 
       screenLabel.repaint(); 
       selectionLabel.setText("Rectangle: " + captureRect); 
      } 
     }); 

     JOptionPane.showMessageDialog(null, panel); 

     System.out.println("Rectangle of interest: " + captureRect); 
    } 

    public void repaint(BufferedImage orig, BufferedImage copy) { 
     Graphics2D g = copy.createGraphics(); 
     g.drawImage(orig,0,0, null); 
     if (captureRect!=null) { 
      g.setColor(Color.RED); 
      g.draw(captureRect); 
      g.setColor(new Color(255,255,255,150)); 
      g.fill(captureRect); 
     } 
     g.dispose(); 
    } 

    public static void main(String[] args) throws Exception { 
     Robot robot = new Robot(); 
     final Dimension screenSize = Toolkit.getDefaultToolkit(). 
       getScreenSize(); 
     final BufferedImage screen = robot.createScreenCapture(
       new Rectangle(screenSize)); 

     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new ScreenCaptureRectangle(screen); 
      } 
     }); 
    } 
} 
+0

¡Wow, muchas gracias! Muy útil. Solo me preguntaba si hiciste eso? –

+0

De acuerdo, lo acepté. Gracias otra vez hombre. –

+0

Esto solo funcionará si está capturando una captura de pantalla de la aplicación Java que está ejecutando. No podrá capturar otras aplicaciones que se ejecutan en el escritorio del usuario. Pensé que querías una aplicación de captura de pantalla de propósito general, lo que significa que no puedes usar Swing. – chubbsondubs

Cuestiones relacionadas