diff --git a/PlaningDeTavail.md b/PlaningDeTavail.md index 756848b..9d976c1 100644 --- a/PlaningDeTavail.md +++ b/PlaningDeTavail.md @@ -23,10 +23,10 @@ Objectif : Mise en place des fondations techniques | US-D3 | AD | DONE | 🟩 | Générer les tables de fréquences RGB | | US-D4 | AD | DONE | 🟩 | Construire l’arbre Huffman | | US-D5 | AA | DONE | 🟩 | Générer les codes Huffman | -| US-D6 | AA | DOING | 🟨 | Générer les codes canoniques | +| US-D6 | AA | DONE | 🟩 | Générer les codes canoniques | | US-U5 | YB | DOING | 🟨 | Chargement d’image via ImageIO | | US-D8 | YB | TODO | 🟥 | Structure RGBImage + Pixel | -| US-P1 | AA | TODO | 🟥 | Interface simple d’affichage des fréquences | +| US-P1 | AA | DOING | 🟨 | Interface simple d’affichage des fréquences | | US-P2 | AD | DONE | 🟩 | Interface simple d’affichage codes Huffman | | US-P3 | AA | TODO | 🟩 | Interface simple d’affichage codes canoniques | diff --git a/src/fr/iutfbleau/sae/ConverterController.java b/src/fr/iutfbleau/sae/ConverterController.java index 5f0bf03..b1698d2 100644 --- a/src/fr/iutfbleau/sae/ConverterController.java +++ b/src/fr/iutfbleau/sae/ConverterController.java @@ -1,6 +1,23 @@ package fr.iutfbleau.sae; +import java.awt.*; +import java.io.*; +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; public class ConverterController { + + public BufferedImage loadImage(File f){ + //verification si le fichier contient quelque chose, si il est exesistant et si c'est un fichier "normal" d'apres la javadoc. + if (f == null || !f.exists() || !f.isFile()) { + return null; + } + BufferedImage image; + try { + image = ImageIO.read(f); + } catch (IOExeption e){ + return null; + } + return image; } diff --git a/src/fr/iutfbleau/sae/mhuffman/CanonicalCode.java b/src/fr/iutfbleau/sae/mhuffman/CanonicalCode.java index e556f52..d06a2ba 100644 --- a/src/fr/iutfbleau/sae/mhuffman/CanonicalCode.java +++ b/src/fr/iutfbleau/sae/mhuffman/CanonicalCode.java @@ -1,22 +1,39 @@ package fr.iutfbleau.sae.mhuffman; - import java.util.*; public class CanonicalCode{ - private Map codeLenghts = HuffmanNode.getDictionnary(); + private Map codeLengths = HuffmanTree.getDictionnary(); private Map canonicalCodes = new HashMap<>(); - public void generateCodes(){ - // 1- Premiere chose à faire : trier les codes initiaux par longueur du code : + 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 : - List codes = new ArrayList<>(); - codes = codeLenghts.keySet(); - int[] tab = code.toArray(new Integer[0]); - Arrays.sort(tab); + // on recupere les entrées des codes Huffman pour pouvoir les triés + 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)); + 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 ) { + int valeur = entree.getKey(); // symbole actuel + int longueur = entree.getValue(); // 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++; // incrémentation pour la valeur qui suit + temp = longueur; // mise à jour de la longueur précedente + } + + return canonicalCodes; } diff --git a/src/fr/iutfbleau/sae/mhuffman/HuffmanTree.java b/src/fr/iutfbleau/sae/mhuffman/HuffmanTree.java index b4faec9..5081ede 100644 --- a/src/fr/iutfbleau/sae/mhuffman/HuffmanTree.java +++ b/src/fr/iutfbleau/sae/mhuffman/HuffmanTree.java @@ -57,7 +57,7 @@ public class HuffmanTree { /** * Dictionnaire pour enregistrer les codes Huffman */ - private Map codes; + private static Map codes; /** * Chaine de caracteres qui va nous permettre de sauvegader le code Huffman @@ -151,7 +151,7 @@ public class HuffmanTree { * @return Map on stockera les codes Huffman sous forme de dictionnaire */ - public Map generateCodes(){ + public Map generateCodes(){ /** * Le but de cette méthode est de pouvoir generer les codes Huffman à partir de l'arbre : * Les branches prendront comme valeur 1 ou 0 selon differents cas : @@ -164,7 +164,7 @@ public class HuffmanTree { this.chaineCarac = new String(); if(root.isLeaf()){ - codes.put(root.getValue(),chaineCarac); + codes.put(root.getValue(),Integer.parseInt(chaineCarac)); return codes; } @@ -192,8 +192,8 @@ public class HuffmanTree { } - public static Map getDictionnary(){ - return this.codes; + public static Map getDictionnary(){ + return codes; } diff --git a/src/fr/iutfbleau/sae/mimage/Pixel.java b/src/fr/iutfbleau/sae/mimage/Pixel.java index 63ac671..54c3a98 100644 --- a/src/fr/iutfbleau/sae/mimage/Pixel.java +++ b/src/fr/iutfbleau/sae/mimage/Pixel.java @@ -1,4 +1,36 @@ -package fr.iutfbleau.sae; +package fr.iutfbleau.sae.mimage; -public class Pixel { +public class Pixel{ + private int r; + private int g; + private int b; + + //à completer + public Pixel(){ + + } + + public int getB() { + return b; + } + + public int getG() { + return g; + } + + public int getR() { + return r; + } + + public void setR(int r) { + this.r = r; + } + + public void setB(int b) { + this.b = b; + } + + public void setG(int g) { + this.g = g; + } } \ No newline at end of file diff --git a/src/fr/iutfbleau/sae/mimage/RGBImage.java b/src/fr/iutfbleau/sae/mimage/RGBImage.java index df20cea..3fc89e0 100644 --- a/src/fr/iutfbleau/sae/mimage/RGBImage.java +++ b/src/fr/iutfbleau/sae/mimage/RGBImage.java @@ -1,24 +1,24 @@ -package fr.iutfbleau.sae; - -import java.awt.*; -import java.io.*; -import javax.imageio.ImageIO; -import java.awt.image.BufferedImage; +package fr.iutfbleau.sae.mimage; public class RGBImage { - public BufferedImage chargementDeImage(File f){ - //verification si le fichier contient quelque chose, si il est exesistant et si c'est un fichier "normal" d'apres la javadoc. - if (f == null || !f.exists() || !f.isFile()) { - return null; - } - BufferedImage image; - try { - image = ImageIO.read(f); - } catch (IOExeption e){ - return null; - } - return image; -//a completer encore + private int width; + private int height; + private Pixel [] pixels + + public int getWidth() { + return width; + } + + public int getHeight() { + return height; + } + + public Pixel[] getPixels() { + return pixels; + } + + public void setPixels(Pixel[] pixels) { + this.pixels = pixels; } } \ No newline at end of file