Il s'agit d'un article d'entrée de gamme, les experts doivent l'ignorer.
Dans cet article, nous apprendrons comment recadrer une image en Java et enregistrer les parties recadrées séparément dans un fichier.
Nous apprendrons à travers les étapes suivantes :
1. Saisissez l'image et spécifiez le chemin de l'image à traiter
2. Autoriser les utilisateurs à glisser-déposer la partie à recadrer
3. Après la sélection, utilisez la classe Robot pour déterminer les coordonnées de la partie découpée.
4. Recadrez l'image sélectionnée et conservez-la
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:
1.La classe Graphics contient des méthodes pour dessiner des rectangles
2. Nous utilisons la classe Rectangle comme zone rectangulaire déplacée pour le découpage
3.La classe Robot est utilisée pour capturer des captures d'écran
4. Utilisez un écouteur de souris pour obtenir le temps de déplacement de la souris
5. La classe Robot utilise BufferedImage pour le traitement des images
La classe 6.File est utilisée pour ouvrir les fichiers image
7.La classe ImageIO est utilisée pour écrire des images dans des fichiers image png ou jpg
8.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:
1.Écrit une classe nommée CropImage
2. Cette classe étend JFrame pour implémenter toutes les fonctions de frame
3. 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 4.drag_status est utilisée pour enregistrer les coordonnées lorsque la souris commence à glisser
5. Nous avons défini 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:
1. Nous définissons une classe appelée ImagePanel, en utilisant l'image à traiter comme paramètre
2. 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:
1. Lorsque vous appuyez sur la souris, stockez les coordonnées actuelles dans c1 et c2
2. Définissez la variable d'état du glisser drag_status sur true lorsque vous appuyez sur la souris et que le glissement commence.
3. 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.
4. 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
Listing 4 : méthode draggedScreen
Copiez le code comme suit :
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:
1. Calculez d’abord la hauteur et la largeur de l’image
2. 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
Liste 5 : ImagePanel.java
Copiez le code comme suit :
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
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 ;
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);
}
}