Java screen capture App - Comment?


Je ne suis pas un locuteur natif de l'anglais donc, tout d'abord désolé pour la grammaire.

Je veux faire une application qui capture une zone sélectionnée d'un écran et l'enregistre. J'ai fait quelques recherches et j'ai fait le code ci-dessous.

Mes questions sont:

1 - Comment puis-je ouvrir un fichier pdf dans cette application ? (j'ai essayé d'utiliser une méthode, mais cela n'a pas fonctionné. Je ne sais pas exactement où le mettre sur le code)

2 - Comment puis-je sauver la zone sélectionnée dans un nouveau fichier ? (un fichier image: JPEG, JPG, png)

3 - [la partie complexe] en ce moment, le code ne "sauvegarde" qu'une zone sélectionnée à chaque fois. Je veux capturer beaucoup de parties de l'écran et enregistrer cela dans le même fichier image. l'un à côté de l'autre. Comment puis-je faire cela ?

Code Java:

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

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);
            }
        });
    }
}
Author: Marco Vinicius, 2014-10-24

1 answers

1 - Comment puis-je ouvrir un fichier pdf dans cette application ? (j'ai essayé d'utiliser une méthode, mais cela n'a pas fonctionné. Je ne sais pas exactement où le mettre sur le code)

Jetez un oeil à Comment intégrer avec la classe Desktop

2 - Comment puis-je sauver la zone sélectionnée dans un nouveau fichier ? (un fichier image: JPEG, JPG, png)

Jetez un oeil à Écrire / Enregistrer une image

3 - [la partie complexe] en ce moment, le code ne "sauvegarde" qu'une zone sélectionnée chaque fois. Je veux capturer beaucoup de parties de l'écran et enregistrer cela dans le même fichier image. l'un à côté de l'autre. Comment puis-je faire cela ?

Est, comme vous le dites, une question beaucoup plus complexe. Vous devrez modifier le code de sorte qu'au lieu d'afficher le panel dans un JOptionPane, il l'affiche dans un JFrame, vous devez alors pouvoir surveiller le mouseReleaseEvent ou fournir une sorte d'action, peut être une barre d'outils ou une option de menu, qui permet à l'utilisateur d'enregistrer la sélection.

Jetez un oeil à Comment Utiliser les Menus, Comment Utiliser les Boutons, les Cases à Cocher et des Boutons Radio, Comment Écrire une Action Auditeurs et Comment Utiliser les Barres d'outils pour plus de détails.

En note de côté, le code ne vous permettra de capturer qu'un seul écran, vous pourriez envisager quelque chose comme Dessiner un rectangle englobant pour sélectionner la zone à enregistrer qui vous permettra de capturer l'ensemble du bureau virtuel (plusieurs écrans)

 1
Author: MadProgrammer, 2017-05-23 11:57:10