Select the area to capture with the mouse

I am making a Java-based screen-based application, and I want to do this when you press a key combination on the keyboard, for example, this video happens when you select and occupy an area on the screen and a picture of the selected area is taken on it.

How to choose the area to capture with the mouse?

+6
source share
2 answers

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); } }); } } 
+16
source

Source: https://habr.com/ru/post/917921/


All Articles