diff --git a/build/fr/iutfbleau/sae/ConverterController.class b/build/fr/iutfbleau/sae/ConverterController.class index 286a2d1..0ea386f 100644 Binary files a/build/fr/iutfbleau/sae/ConverterController.class and b/build/fr/iutfbleau/sae/ConverterController.class differ diff --git a/build/fr/iutfbleau/sae/Convertisseur.class b/build/fr/iutfbleau/sae/Convertisseur.class index 91b1b85..26dc2eb 100644 Binary files a/build/fr/iutfbleau/sae/Convertisseur.class and b/build/fr/iutfbleau/sae/Convertisseur.class differ diff --git a/build/fr/iutfbleau/sae/vconverter/ConverterWindow.class b/build/fr/iutfbleau/sae/vconverter/ConverterWindow.class index 7f8ddc5..af2a1ef 100644 Binary files a/build/fr/iutfbleau/sae/vconverter/ConverterWindow.class and b/build/fr/iutfbleau/sae/vconverter/ConverterWindow.class differ diff --git a/build/fr/iutfbleau/sae/vconverter/ImagePreviewPanel.class b/build/fr/iutfbleau/sae/vconverter/ImagePreviewPanel.class index 51a9adb..892a660 100644 Binary files a/build/fr/iutfbleau/sae/vconverter/ImagePreviewPanel.class and b/build/fr/iutfbleau/sae/vconverter/ImagePreviewPanel.class differ diff --git a/src/fr/iutfbleau/sae/vconverter/ConverterWindow.java b/src/fr/iutfbleau/sae/vconverter/ConverterWindow.java index 32acd2f..c2c1fe7 100644 --- a/src/fr/iutfbleau/sae/vconverter/ConverterWindow.java +++ b/src/fr/iutfbleau/sae/vconverter/ConverterWindow.java @@ -106,12 +106,6 @@ public class ConverterWindow extends JFrame { /** * Met à jour l’affichage des tables de fréquences. - * - *

- * Les fréquences sont déjà calculées avant l’appel - * de cette méthode. La fenêtre se contente de demander - * au panneau dédié de rafraîchir son affichage. - *

*/ public void setFrequencyTable(int[] freqR,int[] freqG,int[] freqB) { frequencyTablePanel.updateFrequencies(freqR,freqG,freqB); @@ -121,7 +115,6 @@ public class ConverterWindow extends JFrame { * Met à jour l’affichage des codes Huffman. * *

- * Cette méthode ne génère aucun code. * Elle permet uniquement d’afficher les codes * qui ont été produits par la partie traitement. *

@@ -137,8 +130,7 @@ public class ConverterWindow extends JFrame { * *

* Les codes canoniques sont transmis au panneau - * chargé de leur affichage. Aucune vérification - * ni transformation n’est effectuée ici. + * chargé de leur affichage. *

*/ public void setCanonicalTable(Map codesRouge, diff --git a/src/fr/iutfbleau/sae/vconverter/ImagePreviewPanel.java b/src/fr/iutfbleau/sae/vconverter/ImagePreviewPanel.java index c72ea0d..79f05c8 100644 --- a/src/fr/iutfbleau/sae/vconverter/ImagePreviewPanel.java +++ b/src/fr/iutfbleau/sae/vconverter/ImagePreviewPanel.java @@ -2,7 +2,7 @@ package fr.iutfbleau.sae.vconverter; import java.awt.image.BufferedImage; import javax.swing.JPanel; - +import java.awt.*; /** * Le panneau d’aperçu de l’image. * @@ -16,10 +16,13 @@ public class ImagePreviewPanel extends JPanel { private BufferedImage image; + // je donne une taille préférée au panel public ImagePreviewPanel() { - // constructeur vide pour l'instant + this.setPreferredSize(new Dimension(800, 300)); + this.setMinimumSize(new Dimension(800, 300)); } + public void setImage(BufferedImage img) { this.image = img; repaint(); @@ -27,13 +30,47 @@ public class ImagePreviewPanel extends JPanel { } @Override - protected void paintComponent(java.awt.Graphics g) { - super.paintComponent(g); - if (image != null) { - // Dessiner l'image centrée dans le panneau - int x = (getWidth() - image.getWidth()) / 2; - int y = (getHeight() - image.getHeight()) / 2; - g.drawImage(image, x, y, this); + protected void paintComponent(Graphics pinceau) { + // Appel de la méthode parente pour effacer l'arrière-plan + super.paintComponent(pinceau); + + if (image == null) { + return; } + + // Recuperer les dimensions du panel pour centrer l'image + int panelWidth = this.getWidth(); + int panelHeight = this.getHeight(); + + // Recuperer les dimensions de l'image + int imgWidth = image.getWidth(); + int imgHeight = image.getHeight(); + + // Je calcule le facteur du reduction (si l'image est trop grande) en gros le dezoom + double scale = Math.min( + (double) panelWidth / imgWidth, + (double) panelHeight / imgHeight + ); + + // Si l'image est plus petite que le panel, on ne la redimensionne pas donc scale = 1 + if (scale > 1.0) { + scale = 1.0; + } + + // je recalcule les dimensions de l'image à dessiner + int drawWidth = (int) (imgWidth * scale); + int drawHeight = (int) (imgHeight * scale); + + // Centrage de l'image dans le panel + int x = (panelWidth - drawWidth) / 2; + int y = (panelHeight - drawHeight) / 2; + + Graphics2D pinceau2D = (Graphics2D) pinceau; + pinceau2D.setRenderingHint( + RenderingHints.KEY_INTERPOLATION, + RenderingHints.VALUE_INTERPOLATION_BILINEAR + ); + + pinceau2D.drawImage(image, x, y, drawWidth, drawHeight, this); } } \ No newline at end of file