Nous apprendrons à travers les étapes suivantes :
Image d'entrée, spécifiez le chemin de l'image à traiter
Autoriser l'utilisateur à glisser-déposer la partie à recadrer
Après sélection, utilisez la classe Robot pour déterminer les coordonnées de la partie découpée.
Recadrer l'image sélectionnée et la conserver
Ensuite, nous commençons la partie codage.
Listing1 : cours introduits
Copiez le code comme suit :
importer java.awt.Graphics ;
importer java.awt.Rectangle ;
importer java.awt.Robot ;
importer java.awt.event.MouseEvent ;
importer java.awt.event.MouseListener ;
importer java.awt.event.MouseMotionListener ;
importer java.awt.image.BufferedImage ;
importer java.io.File ;
importer javax.imageio.ImageIO ;
importer javax.swing.JFrame ;
illustrer:
La classe Graphics contient des méthodes pour dessiner des rectangles
Nous utilisons la classe Rectangle comme zone rectangulaire déplacée pour le découpage
La classe Robot est utilisée pour capturer des captures d'écran
Utilisez l'écouteur de souris pour obtenir le temps de déplacement de la souris
La classe Robot utilise BufferedImage pour le traitement des images
La classe File est utilisée pour ouvrir les fichiers image
La classe ImageIO est utilisée pour écrire des images dans des fichiers image png ou jpg
JFrame est utilisé pour afficher l'interface
Maintenant, nous écrivons la classe d'entrée contenant la méthode principale
Listing2 : Classe d'entrée
Copiez le code comme suit :
la classe publique CropImage étend JFrame implémente MouseListener, MouseMotionListener
{
int drag_status=0,c1,c2,c3,c4;
public static void main (String args[])
{
new CropImage().start();
}
illustrer:
A écrit une classe appelée CropImage
Cette classe étend JFrame pour implémenter toutes les fonctions de frame
Implémentation de différents écouteurs d'événements de souris pour savoir quand l'utilisateur commence à faire glisser le pointeur de la souris
La variable drag_status est utilisée pour enregistrer les coordonnées de la souris lorsqu'elle commence à glisser
Nous définissons la méthode main pour appeler une méthode start, qui sera définie ci-dessous
Vient ensuite la méthode de démarrage
Liste 2
Copiez le code comme suit :
début public vide()
{
ImagePanel im=new ImagePanel("F://Wallpaper//wallpapers//1.jpg");
ajouter (je suis);
setSize(400 400);
setVisible(vrai);
addMouseListener(this);
addMouseMotionListener( ceci );
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
illustrer:
Nous définissons une classe appelée ImagePanel, utilisant l'image à traiter comme paramètre
Placez l'ImagePanel pour afficher l'image dans le JFrame et commencez à écouter les événements de la souris.
Ensuite, nous définissons des méthodes pour gérer les événements de souris
Listing 3 : Gestionnaire d'événements de souris
Copiez le code comme suit :
@Outrepasser
public void mouseClicked (MouseEvent arg0) {
}
@Outrepasser
public void mouseEntered (MouseEvent arg0) {
}
@Outrepasser
public void mouseExited (MouseEvent arg0) {
}
@Outrepasser
public void mousePressed (MouseEvent arg0) {
repeindre();
c1=arg0.getX();
c2=arg0.getY();
}
@Outrepasser
public void mouseReleased (MouseEvent arg0) {
repeindre();
si(drag_status==1)
{
c3=arg0.getX();
c4=arg0.getY();
essayer
{
draggedScreen();
}
attraper (Exception e)
{
e.printStackTrace();
}
}
}
@Outrepasser
public void mouseDragged (MouseEvent arg0) {
repeindre();
drag_status=1 ;
c3=arg0.getX();
c4=arg0.getY();
}
@Outrepasser
public void mouseMoved (MouseEvent arg0) {
}
peinture du vide public (graphiques g)
{
super.paint(g);
int w = c1 - c3 ;
int h = c2 - c4 ;
w = w * -1 ;
h = h * -1 ;
si(w<0)
w = w * -1 ;
g.drawRect(c1, c2, w, h);
}
illustrer:
Stocke les coordonnées actuelles dans c1 et c2 lorsque la souris est enfoncée
Définissez la variable d'état du glisser drag_status sur true lorsque la souris est enfoncée et que le glissement commence.
Lorsque le bouton de la souris est relâché, cela signifie que la zone de recadrage de l'image a été sélectionnée et que la méthode draggedscreen est appelée.
La méthode paint est utilisée pour afficher le rectangle lors du glisser et dessine le rectangle à travers les coordonnées actuelles et les coordonnées initialement enregistrées.
Vous trouverez ci-dessous le code de la méthode draggedscreen
Copiez le code comme suit :
Listing 4 : méthode draggedScreen
public void draggedScreen() lève une exception
{
int w = c1 - c3 ;
int h = c2 - c4 ;
w = w * -1 ;
h = h * -1 ;
Robot robot = nouveau Robot();
BufferedImage img = robot.createScreenCapture(new Rectangle(c1, c2,w,h));
Fichier save_path=new File("screen1.jpg");
ImageIO.write(img, "JPG", save_path);
System.out.println("Image recadrée enregistrée avec succès.");
}}
illustrer:
Calculez d’abord la hauteur et la largeur de l’image
Utilisez la classe Robot pour prendre une capture d'écran de la zone recadrée et enregistrez-la dans un autre fichier screen1.jpg
code complet
Copiez le code comme suit :
Liste 5 : ImagePanel.java
importer java.awt.Dimension ;
importer java.awt.Graphics ;
importer java.awt.Image ;
importer javax.swing.ImageIcon ;
importer javax.swing.JPanel ;
la classe ImagePanel étend JPanel {
Image privée img ;
public ImagePanel (String img) {
this(new ImageIcon(img).getImage());
}
public ImagePanel (Image img) {
ceci.img = img;
Taille de la dimension = new Dimension(img.getWidth(null), img.getHeight(null));
// Taille des dimensions = new Dimension(10,10);
setPreferredSize(taille);
setMinimumSize(taille);
setMaximumSize(taille);
setSize(taille);
setLayout(null);
}
public void paintComponent (Graphiques g) {
g.drawImage(img, 0, 0, null);
}
}
Liste 6 : CropImage.java
importer java.awt.Graphics ;
importer java.awt.Rectangle ;
importer java.awt.Robot ;
importer java.awt.event.MouseEvent ;
importer java.awt.event.MouseListener ;
importer java.awt.event.MouseMotionListener ;
importer java.awt.image.BufferedImage ;
importer java.io.File ;
importer javax.imageio.ImageIO ;
importer javax.swing.JFrame ;
la classe publique CropImage étend JFrame implémente MouseListener, MouseMotionListener
{
int drag_status=0,c1,c2,c3,c4;
public static void main (String args[])
{
new CropImage().start();
}
début public vide()
{
ImagePanel im=new ImagePanel("F://Wallpaper//wallpapers//1.jpg");
ajouter (je suis);
setSize(400 400);
setVisible(vrai);
addMouseListener(this);
addMouseMotionListener( ceci );
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void draggedScreen() lève une exception
{
int w = c1 - c3 ;
int h = c2 - c4 ;
w = w * -1 ;
h = h * -1 ;
Robot robot = nouveau Robot();
BufferedImage img = robot.createScreenCapture(new Rectangle(c1, c2,w,h));
Fichier save_path=new File("screen1.jpg");
ImageIO.write(img, "JPG", save_path);
System.out.println("Image recadrée enregistrée avec succès.");
}
@Outrepasser
public void mouseClicked (MouseEvent arg0) {
}
@Outrepasser
public void mouseEntered (MouseEvent arg0) {
}
@Outrepasser
public void mouseExited (MouseEvent arg0) {
}
@Outrepasser
public void mousePressed (MouseEvent arg0) {
repeindre();
c1=arg0.getX();
c2=arg0.getY();
}
@Outrepasser
public void mouseReleased (MouseEvent arg0) {
repeindre();
si(drag_status==1)
{
c3=arg0.getX();
c4=arg0.getY();
essayer
{
draggedScreen();
}
attraper (Exception e)
{
e.printStackTrace();
}
}
}
@Outrepasser
public void mouseDragged (MouseEvent arg0) {
repeindre();
drag_status=1 ;
c3=arg0.getX();
c4=arg0.getY();
}
@Outrepasser
public void mouseMoved (MouseEvent arg0) {
}
peinture du vide public (graphiques g)
{
super.paint(g);
int w = c1 - c3 ;
int h = c2 - c4 ;
w = w * -1 ;
h = h * -1 ;
si(w<0)
w = w * -1 ;
g.drawRect(c1, c2, w, h);
}
}