interface pour les code c bon

This commit is contained in:
AlgaLaptop
2025-12-20 00:30:14 +01:00
parent 758c690ff5
commit 85020090fa
15 changed files with 342 additions and 48 deletions
+24 -2
View File
@@ -1,7 +1,29 @@
package fr.iutfbleau.sae;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import fr.iutfbleau.sae.vconverter.CodeTablePanel;
import fr.iutfbleau.sae.vconverter.ConverterWindow;
public class Convertisseur {
public File convertion(String chemin, String nom)
public static void main(String[] args) {
// Créer et stocker la référence à la fenêtre
ConverterWindow window = new ConverterWindow();
// Exemple d'utilisation pour les codes Huffman
Map<Integer, String> codesRouge = new HashMap<>();
codesRouge.put(255, "1010");
codesRouge.put(128, "010");
Map<Integer, String> codesVert = new HashMap<>();
codesVert.put(255, "110");
codesVert.put(128, "01");
Map<Integer, String> codesBleu = new HashMap<>();
codesBleu.put(255, "0");
codesBleu.put(128, "10");
// Appeler la méthode sur l'instance de la fenêtre
window.setCanonicalTable(codesRouge, codesVert, codesBleu);
System.out.println("DLKSLDKSLKDSLKSLKSLDKSLDKLSdkslkdl");
}
}
}
+15
View File
@@ -0,0 +1,15 @@
package fr.iutfbleau.sae.util;
public class Config {
public static final String CON_NAME = "SAE32 - Convertisseur d'images PIF";
public static final String VIS_NAME = "SAE32 - Visualiseur d'images PIF";
public static final int[] VISUALISEUR_FENETRE_TAILLE = {800, 600};
public static final int[] CONVERTISSEUR_FENETRE_TAILLE = {800, 600};
public static final String APP_COPYRIGHT = "2025 © IUT de Fontainebleau";
public static final String APP_AUTHOR = "IUT de Fontainebleau";
private Config() {
// je refuse l'instanciation
}
}
@@ -0,0 +1,110 @@
package fr.iutfbleau.sae.vconverter;
import javax.swing.*;
import java.awt.*;
import java.util.Map;
/**
* Panneau d'affichage des codes Huffman et canoniques.
* Affiche les codes pour chaque composante de couleur (rouge, vert, bleu).
* @author Algassimou
*/
public class CodeTablePanel extends JPanel {
// Zones de texte pour les codes Huffman
private JTextArea textHuffRouge, textHuffVert, textHuffBleu;
// Zones de texte pour les codes canoniques
private JTextArea textCanonRouge, textCanonVert, textCanonBleu;
/**
* Constructeur qui initialise l'interface utilisateur.
*/
public CodeTablePanel() {
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
// Titre pour les codes Huffman
JLabel titreHuff = new JLabel("Codes Huffman");
titreHuff.setFont(new Font("SansSerif", Font.BOLD, 16));
add(titreHuff);
add(Box.createVerticalStrut(10));
// Création des zones de texte pour les codes Huffman
textHuffRouge = creerZoneTexte("Rouge");
textHuffVert = creerZoneTexte("Vert");
textHuffBleu = creerZoneTexte("Bleu");
// Séparateur
add(Box.createVerticalStrut(20));
// Titre pour les codes canoniques
JLabel titreCanon = new JLabel("Codes Canoniques");
titreCanon.setFont(new Font("SansSerif", Font.BOLD, 16));
add(titreCanon);
add(Box.createVerticalStrut(10));
// Création des zones de texte pour les codes canoniques
textCanonRouge = creerZoneTexte("Rouge (Canonique)");
textCanonVert = creerZoneTexte("Vert (Canonique)");
textCanonBleu = creerZoneTexte("Bleu (Canonique)");
}
/**
* Crée une zone de texte avec une étiquette.
* @param titre Le titre à afficher au-dessus de la zone de texte
* @return La zone de texte configurée
*/
private JTextArea creerZoneTexte(String titre) {
add(new JLabel(titre + ":"));
JTextArea zone = new JTextArea(8, 30);
zone.setEditable(false);
zone.setFont(new Font("Monospaced", Font.PLAIN, 12));
JScrollPane scroll = new JScrollPane(zone);
scroll.setPreferredSize(new Dimension(300, 120));
add(scroll);
add(Box.createVerticalStrut(10));
return zone;
}
/**
* Met à jour l'affichage des codes Huffman.
* @param rouge Les codes pour la composante rouge
* @param vert Les codes pour la composante verte
* @param bleu Les codes pour la composante bleue
*/
public void updateCodes(Map<Integer, String> rouge,
Map<Integer, String> vert,
Map<Integer, String> bleu) {
mettreAJourZoneTexte(textHuffRouge, rouge);
mettreAJourZoneTexte(textHuffVert, vert);
mettreAJourZoneTexte(textHuffBleu, bleu);
}
/**
* Met à jour l'affichage des codes canoniques.
* @param rouge Les codes pour la composante rouge
* @param vert Les codes pour la composante verte
* @param bleu Les codes pour la composante bleue
*/
public void updateCanonicalCodes(Map<Integer, String> rouge,
Map<Integer, String> vert,
Map<Integer, String> bleu) {
mettreAJourZoneTexte(textCanonRouge, rouge);
mettreAJourZoneTexte(textCanonVert, vert);
mettreAJourZoneTexte(textCanonBleu, bleu);
}
/**
* Met à jour le contenu d'une zone de texte avec les codes fournis.
* @param zone La zone de texte à mettre à jour
* @param codes Les codes à afficher
*/
private void mettreAJourZoneTexte(JTextArea zone, Map<Integer, String> codes) {
StringBuilder sb = new StringBuilder();
for (Map.Entry<Integer, String> entry : codes.entrySet()) {
sb.append(String.format("%3d : %s%n", entry.getKey(), entry.getValue()));
}
zone.setText(sb.toString());
}
}
@@ -1,49 +1,120 @@
package fr.iutfbleau.sae.vconverter;
import javax.swing.*;
import java.awt.*;
import java.util.Map;
import fr.iutfbleau.sae.util.Config;
/**
* Fenêtre principale du convertisseur.
*
* <p>
* Cette classe représente la vue principale de lapplication.
* Elle regroupe les différents panneaux graphiques utilisés
* pour afficher les résultats de la conversion dune image.
* Cette classe correspond à la vue principale de lapplication.
* Elle centralise laffichage des informations liées à la conversion
* dune image (aperçu, fréquences, codes).
* </p>
*
*
* <p>
* Elle sert de point dentrée unique pour la partie graphique
* </p>
*/
public class ConverterWindow {
public class ConverterWindow extends JFrame {
private ImagePreviewPanel imagePreviewPanel;
private FrequencyTablePanel frequencyTablePanel;
private CodeTablePanel codeTablePanel;
/**
* Met à jour laperçu de limage affichée dans la fenêtre.
* Crée la fenêtre principale du convertisseur.
*
* <p>
* Cette méthode est appelée par le contrôleur après le chargement
* de limage. Limage reçue est simplement transmise
* au panneau daperçu pour être affichée.
* Le constructeur initialise la fenêtre et met en place
* les différents panneaux graphiques utilisés pour laffichage.
* </p>
*/
public ConverterWindow() {
System.out.println("Création de la fenêtre : " + Config.CON_NAME); // debug
// Configuration de la fenetre
this.setTitle(Config.CON_NAME);
this.setSize(Config.CONVERTISSEUR_FENETRE_TAILLE[0],
Config.CONVERTISSEUR_FENETRE_TAILLE[1]);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null); // Centre la fenêtre
this.setResizable(true); // on autorise le resize (plus moderne)
// Initialisation des panels
this.imagePreviewPanel = new ImagePreviewPanel();
this.frequencyTablePanel = new FrequencyTablePanel();
this.codeTablePanel = new CodeTablePanel();
// Je gere le panel principal
JPanel contentPanel = new JPanel();
contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));
contentPanel.setBackground(new Color(255, 0, 0)); // rouge vif pour demo
contentPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
// Titre
JLabel header = new JLabel(" Convertisseur PIF Visualisation des données ");
header.setFont(new Font("SansSerif", Font.BOLD, 18));
header.setAlignmentX(Component.CENTER_ALIGNMENT);
contentPanel.add(header);
contentPanel.add(Box.createRigidArea(new Dimension(0, 20))); // espace
// Ajout du panel daperçu
contentPanel.add(imagePreviewPanel);
contentPanel.add(Box.createRigidArea(new Dimension(0, 20)));
// Ajout du panel des fréquences
contentPanel.add(frequencyTablePanel);
contentPanel.add(Box.createRigidArea(new Dimension(0, 20)));
// Ajout panel des codes
contentPanel.add(codeTablePanel);
contentPanel.add(Box.createRigidArea(new Dimension(0, 20)));
// la section du scrollpane
JScrollPane scrollPane = new JScrollPane(contentPanel);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.getVerticalScrollBar().setUnitIncrement(16); // scroll plus adouci fluide
this.add(scrollPane);
this.setVisible(true); // toi meme tu sais
}
/**
* Met à jour limage affichée dans la zone daperçu.
*
* <p>
* Cette méthode est appelée lorsque limage à convertir
* a été chargée. La fenêtre ne modifie pas limage :
* elle la transmet simplement au panneau daperçu.
* </p>
*
* @param img image à afficher dans laperçu
* @param img image à afficher
*/
public void setImagePreview(Object img) {
// mise à jour du ImagePreviewPanel avec limage img
imagePreviewPanel.setImage(img);
}
/**
* Met à jour les tables de fréquences des composantes R, G et B.
* Met à jour laffichage des tables de fréquences.
*
* <p>
* Cette méthode reçoit les tableaux de fréquences calculés
* par le contrôleur et les transmet au panneau chargé
* de les afficher.
* 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() {
// mise à jour des fréquences dans le FrequencyTablePanel
frequencyTablePanel.updateFrequencies();
}
@@ -51,27 +122,29 @@ public class ConverterWindow {
* Met à jour laffichage des codes Huffman.
*
* <p>
* Les codes sont déjà calculés par le contrôleur.
* Cette méthode se contente de demander au panneau
* des codes de les afficher.
* Cette méthode ne génère aucun code.
* Elle permet uniquement dafficher les codes
* qui ont été produits par la partie traitement.
* </p>
*/
public void setHuffmanTable() {
// mise à jour des codes Huffman dans le CodeTablePanel
codeTablePanel.updateCodes();
public void setHuffmanTable(Map<Integer, String> codesRouge,
Map<Integer, String> codesVert,
Map<Integer, String> codesBleu) {
codeTablePanel.updateCanonicalCodes(codesRouge, codesVert, codesBleu);
}
/**
* Met à jour laffichage des codes canoniques.
*
* <p>
* Cette méthode est utilisée après la génération
* des codes canoniques (Sprint 2).
* Elle ne fait aucun calcul et se limite à laffichage.
* Les codes canoniques sont transmis au panneau
* chargé de leur affichage. Aucune vérification
* ni transformation nest effectuée ici.
* </p>
*/
public void setCanonicalTable() {
// mise à jour des codes canoniques dans le CodeTablePanel
codeTablePanel.updateCanonicalCodes();
public void setCanonicalTable(Map<Integer, String> codesRouge,
Map<Integer, String> codesVert,
Map<Integer, String> codesBleu) {
codeTablePanel.updateCodes(codesRouge, codesVert, codesBleu);
}
}
@@ -1,5 +1,13 @@
package fr.iutfbleau.sae.vconverter;
public class FrequencyTablePanel {
import javax.swing.*;
public class FrequencyTablePanel extends JPanel {
public FrequencyTablePanel() {
// constructeur vide pour l'instant
}
public void updateFrequencies() {
// Implémentation à ajouter
}
}
@@ -0,0 +1,22 @@
package fr.iutfbleau.sae.vconverter;
import javax.swing.JPanel;
/**
* Le panneau daperçu de limage.
*
* <p>
* Ce panneau affiche un aperçu de limage en cours de conversion.
* </p>
*/
public class ImagePreviewPanel extends JPanel {
public ImagePreviewPanel() {
// constructeur vide pour l'instant
}
public void setImage(Object img) {
// Implémentation à ajouter
}
}