Select an area to capture using the mouse

后端 未结 2 601
-上瘾入骨i
-上瘾入骨i 2020-12-01 10:15

I\'m making a Java based screen shot application, and I want to make it so when you push a combination of keys on your keyboard something like this video happens where you s

相关标签:
2条回答
  • 2020-12-01 10:24

    This is pretty simple to do:

    http://www.javalobby.org/forums/thread.jspa?threadID=16400&tstart=0

    http://www.javaworld.com/javaworld/jw-04-2006/jw-0424-funandgames.html

    0 讨论(0)
  • 2020-12-01 10:50

    Start with something like this.

    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 讨论(0)
提交回复
热议问题