diff --git a/build/fr/iutfbleau/sae/ConverterController.class b/build/fr/iutfbleau/sae/ConverterController.class new file mode 100644 index 0000000..8d74b30 Binary files /dev/null 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 afad87f..f52f8d1 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 new file mode 100644 index 0000000..efee3c9 Binary files /dev/null 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 new file mode 100644 index 0000000..e1993c4 Binary files /dev/null and b/build/fr/iutfbleau/sae/mhuffman/CanonicalCode.class differ diff --git a/build/fr/iutfbleau/sae/mhuffman/FrequencyTable.class b/build/fr/iutfbleau/sae/mhuffman/FrequencyTable.class index 980e373..3dc1a2f 100644 Binary files a/build/fr/iutfbleau/sae/mhuffman/FrequencyTable.class and b/build/fr/iutfbleau/sae/mhuffman/FrequencyTable.class differ diff --git a/build/fr/iutfbleau/sae/mimage/Pixel.class b/build/fr/iutfbleau/sae/mimage/Pixel.class index 424078e..ae7f2ff 100644 Binary files a/build/fr/iutfbleau/sae/mimage/Pixel.class and b/build/fr/iutfbleau/sae/mimage/Pixel.class differ diff --git a/build/fr/iutfbleau/sae/mimage/RGBImage.class b/build/fr/iutfbleau/sae/mimage/RGBImage.class index 351c0e6..9133776 100644 Binary files a/build/fr/iutfbleau/sae/mimage/RGBImage.class and b/build/fr/iutfbleau/sae/mimage/RGBImage.class differ diff --git a/build/fr/iutfbleau/sae/vconverter/ConverterWindow.class b/build/fr/iutfbleau/sae/vconverter/ConverterWindow.class index 63526d5..0bf0cec 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 013c129..51a9adb 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/mhuffman/CanonicalCode.java b/src/fr/iutfbleau/sae/mhuffman/CanonicalCode.java index 017a06c..3cb418d 100644 --- a/src/fr/iutfbleau/sae/mhuffman/CanonicalCode.java +++ b/src/fr/iutfbleau/sae/mhuffman/CanonicalCode.java @@ -2,33 +2,51 @@ package fr.iutfbleau.sae.mhuffman; import java.util.*; public class CanonicalCode{ - private Map codeLengths = new HashMap<>(); // Changer ici car la premiere version est incorecte + private Map codeLengths = new HashMap<>(); private Map canonicalCodes = new HashMap<>(); public Map generateCodes(){ // 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 : + // 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<>(codeLengths.entrySet()); // ici on comparer par longueur de la valeur ou sinon par la clé - // type générique pour éviter les erreurs de compilation !!! - // referencement de méthode : passer une méthode déja existante - liste.sort(Comparator.>comparingInt(Map.Entry::getValue) - .thenComparing(Map.Entry::getKey)); + + Collections.sort(liste, new Comparator>() { + @Override + public int compare(Map.Entry arg1 ,Map.Entry arg2) { - int code = 0; // code canonique à attribuer + int length1 = arg1.getValue().length(); + int length2 = arg2.getValue().length(); + + if (length1 != length2) { + return length1 - length2; + } + return arg1.getKey() - arg2.getKey(); + } + }); + + + int code = 0; // code canonique à attribuer int temp = 0; //garde la longueur du code précedent , pour gérer le décalage - for (Map.Entry entree : liste ) { + for (Map.Entry entree : liste ) { int valeur = entree.getKey(); // symbole actuel - int longueur = entree.getValue(); // longueur du code actuel + int longueur = entree.getValue().length(); // longueur du code actuel - code <<= (longueur - temp); // permet de décaler le code actuel si la longueur augmente - canonicalCodes.put(valeur,code); // ajout dans le dictionnaire + code <<= (longueur - temp); // permet de décaler le code actuel si la longueur augmente + String codeBinaire = Integer.toBinaryString(code); + + // permet d'ajouter des zeros si nécessaire !!! + while (codeBinaire.length() < longueur) { + codeBinaire = "0" + codeBinaire; + } + + canonicalCodes.put(valeur,codeBinaire); // ajout dans le dictionnaire code++; // incrémentation pour la valeur qui suit temp = longueur; // mise à jour de la longueur précedente } @@ -37,12 +55,12 @@ public class CanonicalCode{ } - public int getCode(int value){ - return 0; + public String getCode(int value){ + return this.canonicalCodes.get(value); } public int getLength(int value){ - return 0; + return this.codeLengths.get(value).length(); } diff --git a/src/fr/iutfbleau/sae/vconverter/ConverterWindow.java b/src/fr/iutfbleau/sae/vconverter/ConverterWindow.java index 54223ad..67d185c 100644 --- a/src/fr/iutfbleau/sae/vconverter/ConverterWindow.java +++ b/src/fr/iutfbleau/sae/vconverter/ConverterWindow.java @@ -1,5 +1,4 @@ package fr.iutfbleau.sae.vconverter; - import fr.iutfbleau.sae.util.Config; import java.awt.*; import java.util.Map;