Redimensionner une image

Nous verrons dans cet exemple comment afficher une image redimensionnée dans un composant personnalisé.
Il ne s'agit ni plus ni moins que d'algorithmique.

Classe de votre composant:

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Image;

import java.awt.event.ActionListener;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import javax.swing.JComponent;

 

public class ImageResized extends JComponent implements MouseListener{

 

            private Image image;

            /**

             * Les propriètées maxX & maxY
             * permettent de définir les valeurs max de       
             * l’image

             **/

            private int maxX=50;

            private int maxY=50;

           

            private int dx;

            private int dy;

 

            //Facteur de réduction de l’image

            private float facteur;

 

            //Booléen permettant de savoir si on est sur l’image

            private boolean over;

           

           

            /**

             * Permet d'afficher une image

             * au format <b>maxX & maxY<b>

             * @param image

             */

            public ImageResized(Image image) {

                        this.image=image;

                        this.setPreferredSize(new Dimension(maxX,maxY));

                        repaint();

                        initialize();

            }

            /**

             * Constructeur

             * Permet d'afficher une image au format

             * spécifié par <b>dim<b>

             * @param image

             * @param dim

             */

            public ImageResized(Image image,Dimension dim) {

                        this.image=image;

                        this.maxX=dim.width;

                        this.maxY=dim.height;

                        this.setPreferredSize(new Dimension(maxX,maxY));

                        repaint();

                        initialize();

            }

 

            public ImageResized() {

                        initialize();

            }

           

            /**

             * Ici on spécifie que ce composant aura un listener

             * qui permettra d’afficher un rectangle de couleur différente selon

             * que l’on se positionne sur l’image ou non.

             **/

            private void initialize() {

                        this.addMouseListener(this);

            }

           

            /**

             * On redéfini la méthode paint pour que le composant affiche

             * une image.

             **/

            @Override

            public void paint(Graphics arg0) {

                        Graphics2D g = (Graphics2D)arg0;

                       

                   /**

                    * Algo permettant de calculer la taille de l’image à afficher.

                    * Ici facteur va permettre de réduire l’image selon des règles de

                    * proportionnalité

                    **/

                        float x = image.getWidth(null);

                        float y = image.getHeight(null);

 

                        facteur = 1;

 

                        if (x>y){

 

                                   // Le facteur est calculé à partir de x

                                   if (x>maxX){

                                               facteur=x/maxX;

                                   }

 

                        }else{

 

                                   // Le facteur est calculé à partir de y

                                   if (y>maxY){

                                               facteur=y/maxY;

                                   }

                        }

                       

                        //Permet de déterminer la grandeur de l’image

                        dx  = (int) (x/facteur);

                        dy = (int) (y/facteur);

                        int ty = (maxY/2)-(dy/2);

                        int tx = (maxX/2)-(dx/2);

 

                        /**

                         * Permet d’afficher l’image passée en paramètre.

                         * Si la sourie est sur l’image, alors on spécifie une couleur

                         * sinon on en sélectionne une autre

                         * avant d’afficher un rectangle autour de l’image

                         *

                         **/

                        g.drawImage(image,tx,ty,dx,dy,this);

                        if (over){

                                   g.setColor(Color.yellow);                               

                        }else{

                                   g.setColor(Color.blue);

                        }

                        g.drawRect(tx,ty,getWidth()-1,dy);

            }

 

            public void mouseClicked(MouseEvent arg0) {

                       

            }

 

            public void mousePressed(MouseEvent arg0) {

                        // TODO Auto-generated method stub

                       

            }

 

            public void mouseReleased(MouseEvent arg0) {

                        // TODO Auto-generated method stub

                       

            }

 

            public void mouseEntered(MouseEvent arg0) {

                        over=true;

                        repaint();

            }

 

            public void mouseExited(MouseEvent arg0) {

                        over=false;

                        repaint();

            }

           

            public ActionListener addActionListener() {

                        return this.addActionListener();

            }

           

           

}

 

Classe permettant de tester votre composant :

 

import java.awt.BorderLayout;

import java.awt.Dimension;

import java.awt.FlowLayout;

import java.awt.Toolkit;

import javax.swing.JFrame;

import com.java.panel.PanelTestBouton;

import com.java.viewImage.ImageResized;

 

public class FrameLauncher extends JFrame {

 

           

            public FrameLauncher() {

                        this.setSize(120,150);

                        this.setLayout(new FlowLayout());

                        this.add(new ImageResized(Toolkit.getDefaultToolkit().getImage("Default.PNG"),new Dimension(100,100)));

                        this.setVisible(true);

                        this.setDefaultCloseOperation(JFrame.DISPOSE);

            }

            public static void main(String[] args) {

                        new FrameLauncher();

            }

}

Voici le résultat:


Laboratoire SUPINFO des technologies Sun
labo-sun@supinfo.com


Conditions d'utilisation et © Copyright SUPINFO International University
23, rue de Château Landon - 75010 PARIS - Tél : +33 (0) 153359700 Fax : +33 (0) 153359701
Respect de la vie privée