diff --git a/PlaningDeTavail.md b/PlaningDeTavail.md index 55c0985..dfaf499 100644 --- a/PlaningDeTavail.md +++ b/PlaningDeTavail.md @@ -83,12 +83,12 @@ Objectif : Écriture du format `.pif` + finalisation convertisseur | US | Assigné | Statut | | Description | |------------|---------|--------|-----|-------------| -| US-D2 | AA | TODO | 🟥 | Vérifier BitOutputStream avec flux réel | +| US-D2 | AA | DONE | 🟩 | Vérifier BitOutputStream avec flux réel | | US-C5 | AD | DOING | 🟨 | Implémenter PIFWriter (header + tables + pixels compressés) | | US-U6 | AD | DOING | 🟨 | Exporter une image en `.pif` | -| US-P1 | AA | TODO | 🟥 | Finaliser affichage des fréquences | -| US-P2 | AA | TODO | 🟥 | Finaliser affichage codes Huffman | -| US-P3 | AA | TODO | 🟥 | Finaliser affichage codes canoniques | +| US-P1 | AA | DONE | 🟩 | Finaliser affichage des fréquences | +| US-P2 | AA | DONE | 🟩 | Finaliser affichage codes Huffman | +| US-P3 | AA | DONE | 🟩 | Finaliser affichage codes canoniques | | US-U7 | AD | DOING | 🟨 | Implémenter l’aperçu (PreviewPanel) | | US-D3..D6 | YB | TODO | 🟥 | Lier interface convertisseur -> compression | diff --git a/build/fr/iutfbleau/sae/ConverterController.class b/build/fr/iutfbleau/sae/ConverterController.class index 8d74b30..286a2d1 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 f52f8d1..91b1b85 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/mhuffman/CanonicalCode$1.class b/build/fr/iutfbleau/sae/mhuffman/CanonicalCode$1.class index efee3c9..e6fc9bd 100644 Binary files a/build/fr/iutfbleau/sae/mhuffman/CanonicalCode$1.class and b/build/fr/iutfbleau/sae/mhuffman/CanonicalCode$1.class differ diff --git a/build/fr/iutfbleau/sae/mhuffman/CanonicalCode.class b/build/fr/iutfbleau/sae/mhuffman/CanonicalCode.class index e1993c4..d49484e 100644 Binary files a/build/fr/iutfbleau/sae/mhuffman/CanonicalCode.class and b/build/fr/iutfbleau/sae/mhuffman/CanonicalCode.class differ diff --git a/build/fr/iutfbleau/sae/mhuffman/HuffmanNode.class b/build/fr/iutfbleau/sae/mhuffman/HuffmanNode.class new file mode 100644 index 0000000..0ba820c Binary files /dev/null and b/build/fr/iutfbleau/sae/mhuffman/HuffmanNode.class differ diff --git a/build/fr/iutfbleau/sae/mhuffman/HuffmanTree.class b/build/fr/iutfbleau/sae/mhuffman/HuffmanTree.class new file mode 100644 index 0000000..7e97954 Binary files /dev/null and b/build/fr/iutfbleau/sae/mhuffman/HuffmanTree.class differ diff --git a/build/fr/iutfbleau/sae/mpif/PIFWriter.class b/build/fr/iutfbleau/sae/mpif/PIFWriter.class new file mode 100644 index 0000000..d961db1 Binary files /dev/null and b/build/fr/iutfbleau/sae/mpif/PIFWriter.class differ diff --git a/build/fr/iutfbleau/sae/util/BitOutputStream.class b/build/fr/iutfbleau/sae/util/BitOutputStream.class new file mode 100644 index 0000000..6d4233d Binary files /dev/null and b/build/fr/iutfbleau/sae/util/BitOutputStream.class differ diff --git a/build/fr/iutfbleau/sae/util/BitinputStream.class b/build/fr/iutfbleau/sae/util/BitinputStream.class new file mode 100644 index 0000000..0637d29 Binary files /dev/null and b/build/fr/iutfbleau/sae/util/BitinputStream.class differ diff --git a/build/fr/iutfbleau/sae/util/ByteUtils.class b/build/fr/iutfbleau/sae/util/ByteUtils.class new file mode 100644 index 0000000..c216610 Binary files /dev/null and b/build/fr/iutfbleau/sae/util/ByteUtils.class differ diff --git a/build/fr/iutfbleau/sae/util/GestErreur.class b/build/fr/iutfbleau/sae/util/GestErreur.class new file mode 100644 index 0000000..e604fb4 Binary files /dev/null and b/build/fr/iutfbleau/sae/util/GestErreur.class differ diff --git a/build/fr/iutfbleau/sae/vconverter/ConverterWindow.class b/build/fr/iutfbleau/sae/vconverter/ConverterWindow.class index 0bf0cec..7f8ddc5 100644 Binary files a/build/fr/iutfbleau/sae/vconverter/ConverterWindow.class and b/build/fr/iutfbleau/sae/vconverter/ConverterWindow.class differ diff --git a/src/fr/iutfbleau/sae/ConverterController.java b/src/fr/iutfbleau/sae/ConverterController.java index cc6dad0..3095bd2 100644 --- a/src/fr/iutfbleau/sae/ConverterController.java +++ b/src/fr/iutfbleau/sae/ConverterController.java @@ -77,4 +77,8 @@ public class ConverterController { e.printStackTrace(); } } + + public RGBImage getImage(){ + return this.image; + } } diff --git a/src/fr/iutfbleau/sae/Convertisseur.java b/src/fr/iutfbleau/sae/Convertisseur.java index 95d3c36..8f10acb 100644 --- a/src/fr/iutfbleau/sae/Convertisseur.java +++ b/src/fr/iutfbleau/sae/Convertisseur.java @@ -1,6 +1,11 @@ package fr.iutfbleau.sae; import java.util.HashMap; import java.util.Map; +import fr.iutfbleau.sae.mhuffman.FrequencyTable; +import fr.iutfbleau.sae.mhuffman.HuffmanNode; +import fr.iutfbleau.sae.mhuffman.HuffmanTree; +import fr.iutfbleau.sae.mhuffman.CanonicalCode; +import fr.iutfbleau.sae.mimage.*; import fr.iutfbleau.sae.vconverter.ConverterWindow; public class Convertisseur { @@ -10,10 +15,15 @@ public class Convertisseur { // je la passe au controleur ConverterController controller = new ConverterController(window); - controller.loadImage("C:\\Magasin\\COURS\\BUT2\\SAES3\\SAE32_2025\\temp"); - + //controller.loadImage("C:\\Magasin\\COURS\\BUT2\\SAES3\\SAE32_2025\\temp"); + // à changer selon votre OS en conséquence ! + String s = "temp/photo.jpg"; + controller.loadImage(s); + RGBImage image = controller.getImage(); + + // Exemple d'utilisation pour les codes Huffman - Map codesRouge = new HashMap<>(); + /*Map codesRouge = new HashMap<>(); codesRouge.put(255, "1010"); codesRouge.put(128, "010"); @@ -43,12 +53,46 @@ public class Convertisseur { freqB[3] = 12; // ..... - freqB[100] = 212; + freqB[100] = 212;*/ - // Appeler la méthode sur l'instance de la fenêtre - window.setCanonicalTable(codesRouge, codesVert, codesBleu); + // Appeler la méthode sur l'instance de la fenêtre + // Essayons d'appeler les méthodes sur une vrai image désormais : + + // Premierement essayons la table de fréquence : + + + FrequencyTable frequence = new FrequencyTable(); + frequence.computeFromImage(image); + int[] freqR = frequence.getRed(); + int[] freqG = frequence.getGreen(); + int[] freqB = frequence.getBlue(); window.setFrequencyTable(freqR,freqG,freqB); - System.out.println("DLKSLDKSLKDSLKSLKSLDKSLDKLSdkslkdl"); + + // Passons désormais aux codes Huffman : + + HuffmanTree arbreR = new HuffmanTree(freqR); + Map codesHuffR = arbreR.generateCodes(); + + HuffmanTree arbreG = new HuffmanTree(freqG); + Map codesHuffG = arbreG.generateCodes(); + + HuffmanTree arbreB = new HuffmanTree(freqB); + Map codesHuffB = arbreB.generateCodes(); + window.setHuffmanTable(codesHuffR,codesHuffG,codesHuffB); + + // Passons désormais aux codes canoniques : + + CanonicalCode codeCanoniques = new CanonicalCode(); + + Map codesCanoniqueRouges = codeCanoniques.generateCodes(codesHuffR); + Map codesCanoniqueGreen = codeCanoniques.generateCodes(codesHuffG); + Map codesCanoniqueBleu = codeCanoniques.generateCodes(codesHuffB); + + window.setCanonicalTable(codesCanoniqueRouges, codesCanoniqueGreen, codesCanoniqueBleu); + + + + //System.out.println("DLKSLDKSLKDSLKSLKSLDKSLDKLSdkslkdl"); } } \ No newline at end of file diff --git a/src/fr/iutfbleau/sae/mhuffman/CanonicalCode.java b/src/fr/iutfbleau/sae/mhuffman/CanonicalCode.java index 3cb418d..4699b26 100644 --- a/src/fr/iutfbleau/sae/mhuffman/CanonicalCode.java +++ b/src/fr/iutfbleau/sae/mhuffman/CanonicalCode.java @@ -2,17 +2,18 @@ package fr.iutfbleau.sae.mhuffman; import java.util.*; public class CanonicalCode{ - private Map codeLengths = new HashMap<>(); - private Map canonicalCodes = new HashMap<>(); + //private Map codeLengths = new HashMap<>(); + //private Map canonicalCodes = new HashMap<>(); - public Map generateCodes(){ + + public Map generateCodes(Map codesHuffman){ // 1 ere chose à faire : on regarde uniquement la longueur des codes initiaux(Huffman) // 2eme chose à faire : remettre dans l'ordre des longueurs : si meme taille ==> regarder valeur // 3eme chose à faire : ecriture des codes canoniques // on recupere les entrées des codes Huffman pour pouvoir les triés - List> liste = new ArrayList<>(codeLengths.entrySet()); + List> liste = new ArrayList<>(codesHuffman.entrySet()); // ici on comparer par longueur de la valeur ou sinon par la clé @@ -30,7 +31,7 @@ public class CanonicalCode{ } }); - + Map canonicalCodes = new HashMap<>(); int code = 0; // code canonique à attribuer int temp = 0; //garde la longueur du code précedent , pour gérer le décalage @@ -55,18 +56,14 @@ public class CanonicalCode{ } - public String getCode(int value){ - return this.canonicalCodes.get(value); + public String getCode(Map canonicalCodes,int value){ + return canonicalCodes.get(value); } - public int getLength(int value){ - return this.codeLengths.get(value).length(); + public int getLength(Map codesH,int value){ + return codesH.get(value).length(); } - - public Map getCanonicalCodes(){ - return this.canonicalCodes; - } } diff --git a/src/fr/iutfbleau/sae/util/BitOutputStream.java b/src/fr/iutfbleau/sae/util/BitOutputStream.java index afffb76..aa26283 100644 --- a/src/fr/iutfbleau/sae/util/BitOutputStream.java +++ b/src/fr/iutfbleau/sae/util/BitOutputStream.java @@ -1,5 +1,5 @@ -package fr.iutfbleu.sae.util; - +package fr.iutfbleau.sae.util; +import fr.iutfbleau.sae.util.BitOutputStream; import java.io.IOException; import java.io.OutputStream; diff --git a/src/fr/iutfbleau/sae/util/BitinputStream.java b/src/fr/iutfbleau/sae/util/BitinputStream.java index 43e3997..0331058 100644 --- a/src/fr/iutfbleau/sae/util/BitinputStream.java +++ b/src/fr/iutfbleau/sae/util/BitinputStream.java @@ -1,5 +1,4 @@ package fr.iutfbleau.sae.util; - import java.io.IOException; import java.io.InputStream; @@ -22,7 +21,7 @@ import java.io.InputStream; * @version 1.0 * @since 2025-12-13 */ -public class BitInputStream { +public class BitinputStream { /** Flux d'entrée sous-jacent */ private final InputStream fluxEntree; @@ -42,7 +41,7 @@ public class BitInputStream { * @param fluxEntree flux d'entrée à décorer * @throws IllegalArgumentException si le flux est nul */ - public BitInputStream(InputStream fluxEntree) { + public BitinputStream(InputStream fluxEntree) { if (fluxEntree == null) { throw new IllegalArgumentException("Le flux d'entrée ne peut pas être nul"); } diff --git a/src/fr/iutfbleau/sae/vconverter/ConverterWindow.java b/src/fr/iutfbleau/sae/vconverter/ConverterWindow.java index 67d185c..32acd2f 100644 --- a/src/fr/iutfbleau/sae/vconverter/ConverterWindow.java +++ b/src/fr/iutfbleau/sae/vconverter/ConverterWindow.java @@ -129,7 +129,7 @@ public class ConverterWindow extends JFrame { public void setHuffmanTable(Map codesRouge, Map codesVert, Map codesBleu) { - codeTablePanel.updateCanonicalCodes(codesRouge, codesVert, codesBleu); + codeTablePanel.updateCodes(codesRouge, codesVert, codesBleu); } /** @@ -144,6 +144,6 @@ public class ConverterWindow extends JFrame { public void setCanonicalTable(Map codesRouge, Map codesVert, Map codesBleu) { - codeTablePanel.updateCodes(codesRouge, codesVert, codesBleu); + codeTablePanel.updateCanonicalCodes(codesRouge, codesVert, codesBleu); } }