This commit is contained in:
AlgaLaptop
2025-12-28 00:01:31 +01:00
parent 2dbef96484
commit 27ec290315
6 changed files with 47 additions and 18 deletions
Binary file not shown.
Binary file not shown.
@@ -106,12 +106,6 @@ public class ConverterWindow extends JFrame {
/** /**
* Met à jour laffichage des tables de fréquences. * Met à jour laffichage des tables de fréquences.
*
* <p>
* Les fréquences sont déjà calculées avant lappel
* de cette méthode. La fenêtre se contente de demander
* au panneau dédié de rafraîchir son affichage.
* </p>
*/ */
public void setFrequencyTable(int[] freqR,int[] freqG,int[] freqB) { public void setFrequencyTable(int[] freqR,int[] freqG,int[] freqB) {
frequencyTablePanel.updateFrequencies(freqR,freqG,freqB); frequencyTablePanel.updateFrequencies(freqR,freqG,freqB);
@@ -121,7 +115,6 @@ public class ConverterWindow extends JFrame {
* Met à jour laffichage des codes Huffman. * Met à jour laffichage des codes Huffman.
* *
* <p> * <p>
* Cette méthode ne génère aucun code.
* Elle permet uniquement dafficher les codes * Elle permet uniquement dafficher les codes
* qui ont été produits par la partie traitement. * qui ont été produits par la partie traitement.
* </p> * </p>
@@ -137,8 +130,7 @@ public class ConverterWindow extends JFrame {
* *
* <p> * <p>
* Les codes canoniques sont transmis au panneau * Les codes canoniques sont transmis au panneau
* chargé de leur affichage. Aucune vérification * chargé de leur affichage.
* ni transformation nest effectuée ici.
* </p> * </p>
*/ */
public void setCanonicalTable(Map<Integer, String> codesRouge, public void setCanonicalTable(Map<Integer, String> codesRouge,
@@ -2,7 +2,7 @@ package fr.iutfbleau.sae.vconverter;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import javax.swing.JPanel; import javax.swing.JPanel;
import java.awt.*;
/** /**
* Le panneau daperçu de limage. * Le panneau daperçu de limage.
* *
@@ -16,10 +16,13 @@ public class ImagePreviewPanel extends JPanel {
private BufferedImage image; private BufferedImage image;
// je donne une taille préférée au panel
public ImagePreviewPanel() { public ImagePreviewPanel() {
// constructeur vide pour l'instant this.setPreferredSize(new Dimension(800, 300));
this.setMinimumSize(new Dimension(800, 300));
} }
public void setImage(BufferedImage img) { public void setImage(BufferedImage img) {
this.image = img; this.image = img;
repaint(); repaint();
@@ -27,13 +30,47 @@ public class ImagePreviewPanel extends JPanel {
} }
@Override @Override
protected void paintComponent(java.awt.Graphics g) { protected void paintComponent(Graphics pinceau) {
super.paintComponent(g); // Appel de la méthode parente pour effacer l'arrière-plan
if (image != null) { super.paintComponent(pinceau);
// Dessiner l'image centrée dans le panneau
int x = (getWidth() - image.getWidth()) / 2; if (image == null) {
int y = (getHeight() - image.getHeight()) / 2; return;
g.drawImage(image, x, y, this);
} }
// 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);
} }
} }