/*********************************************************** Description Cette classe définit un visualisateur d'image. il récupérer l'image contenue dans le fichier passé au constructeur et diffuse tout les pixels vers le panneau consommateur. Auteur Michaèel Parchet et Olivier Vanisbeq. modifier le : 31.8.2005 **********************************************************/ package imageanalyser; import java.awt.*; import javax.imageio.*; import java.io.*; import java.awt.image.*; import javax.swing.*; public class ImageViewer extends JComponent { private Dimension imaageSize,dimSource; private BufferedImage source; // variable permettant de mettre l'image à afficher afin que cette dernière s'affiche plus rapidement. private BufferedImage imageRetaillee; public static Dimension dimScrean = Toolkit.getDefaultToolkit().getScreenSize(); // constructeur : ImageViewer // variable in : Source : Variable qui contiendra le nom du fichier image à afficher public ImageViewer(String source) { this.setSource(source); } public ImageViewer (File source) { this.setSource(source); } public ImageViewer () { } public BufferedImage getSource() { return source; } public BufferedImage getImageRetaillee () { return imageRetaillee; } private void setSource (String source) { this.setSource(new File (source)); } public void setSource (File source) { try { BufferedImage b = ImageIO.read (source); GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDefaultConfiguration(); this.source = gc.createCompatibleImage(b.getWidth(),b.getHeight(),Transparency.BITMASK); dimSource = new Dimension(this.source.getWidth(),this.source.getHeight()); if (dimSource.width > dimScrean.width && dimSource.height > dimScrean.height) this.imageRetaillee = this.source; else CorrigerDimenssion(new Dimension( dimScrean.width / 2,dimScrean.height)); //imageRetaillée = this.source.getScaledInstance(this.getWidth(),this.getHeight(),Image.SCALE_AREA_AVERAGING); // imageRetaillée = this.toBufferedImage(imageRetaillée); //this.imageRetaillee = gc.createCompatibleImage(imageRetaillée.getWidth(this), imageRetaillée.getHeight(this)); } catch (IOException ioe) { System.err.println (new String("impossible d'affichage d'image")); } } // méthode paintComponnent // fonctionnement : Dessine l'image du composant sur l'interface graphique // Variable in : g : désigne le graphique qui contiendra l'image du composant affichée sur l'interface graphique. public void paintComponent(Graphics g) { if (this.imageRetaillee != null) { g.drawImage(this.imageRetaillee ,0,0, null); } } public Dimension getPreferredSize() { return new Dimension(imageRetaillee.getWidth(this),imageRetaillee.getHeight(this)); } public Dimension CorrigerDimenssion (Dimension dimReference) { Dimension newDimension = new Dimension ((source.getWidth() / source.getHeight()) * dimReference.width,dimReference.height); Image image = source.getScaledInstance(newDimension.height, newDimension.width, Image.SCALE_AREA_AVERAGING); GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDefaultConfiguration(); imageRetaillee = toBufferedImage(image); this.imageRetaillee = gc.createCompatibleImage(imageRetaillee.getWidth(this), imageRetaillee.getHeight(this)); return newDimension; } int[] calculerRaport () { int[] rapport = new int[2]; rapport[0] = source.getWidth() - imageRetaillee.getWidth(null); rapport[1] = source.getHeight() - imageRetaillee.getHeight(null); return rapport; } // Méthode : toBufferedImage // fonctionnement : Mettre une image dans une mémoire tempon afin qu'elle s'affiche plus rapidement // variable in : image. // représente l'image que va afficher le panneau // variable out : BufferedImage : fait référence à la mémoire tempon dans laquelle sera mise l'image. BufferedImage toBufferedImage(Image image) { /** On test si l'image n'est pas déja une instance de BufferedImage */ if( image instanceof BufferedImage ) { return( (BufferedImage)image ); } else { /** On s'assure que l'image est complètement chargée */ image = new ImageIcon(image).getImage(); /** On crée la nouvelle image */ BufferedImage bufferedImage = new BufferedImage( image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB ); Graphics g = bufferedImage.createGraphics(); g.drawImage(image,0,0,null); g.dispose(); return( bufferedImage ); } } }