Merge branch 'dev' of https://grond.iut-fbleau.fr/dialloa/SAE32_2025 into dev
This commit is contained in:
+2
-2
@@ -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-D3 | AD | DONE | 🟩 | Générer les tables de fréquences RGB |
|
||||||
| US-D4 | AD | DONE | 🟩 | Construire l’arbre Huffman |
|
| US-D4 | AD | DONE | 🟩 | Construire l’arbre Huffman |
|
||||||
| US-D5 | AA | DONE | 🟩 | Générer les codes 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-U5 | YB | DOING | 🟨 | Chargement d’image via ImageIO |
|
||||||
| US-D8 | YB | TODO | 🟥 | Structure RGBImage + Pixel |
|
| 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-P2 | AD | DONE | 🟩 | Interface simple d’affichage codes Huffman |
|
||||||
| US-P3 | AA | TODO | 🟩 | Interface simple d’affichage codes canoniques |
|
| US-P3 | AA | TODO | 🟩 | Interface simple d’affichage codes canoniques |
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,23 @@
|
|||||||
package fr.iutfbleau.sae;
|
package fr.iutfbleau.sae;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.io.*;
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
|
||||||
public class ConverterController {
|
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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,22 +1,39 @@
|
|||||||
package fr.iutfbleau.sae.mhuffman;
|
package fr.iutfbleau.sae.mhuffman;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class CanonicalCode{
|
public class CanonicalCode{
|
||||||
private Map<Integer,Integer> codeLenghts = HuffmanNode.getDictionnary();
|
private Map<Integer,Integer> codeLengths = HuffmanTree.getDictionnary();
|
||||||
private Map<Integer,Integer> canonicalCodes = new HashMap<>();
|
private Map<Integer,Integer> canonicalCodes = new HashMap<>();
|
||||||
|
|
||||||
|
|
||||||
public void generateCodes(){
|
public Map<Integer,Integer> generateCodes(){
|
||||||
// 1- Premiere chose à faire : trier les codes initiaux par longueur du code :
|
// 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<Integer> codes = new ArrayList<>();
|
// on recupere les entrées des codes Huffman pour pouvoir les triés
|
||||||
codes = codeLenghts.keySet();
|
List<Map.Entry<Integer, Integer>> liste = new ArrayList<>(codeLengths.entrySet());
|
||||||
int[] tab = code.toArray(new Integer[0]);
|
|
||||||
Arrays.sort(tab);
|
|
||||||
|
|
||||||
|
// 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.<Map.Entry<Integer,Integer>>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<Integer, Integer> 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ public class HuffmanTree {
|
|||||||
/**
|
/**
|
||||||
* Dictionnaire pour enregistrer les codes Huffman
|
* Dictionnaire pour enregistrer les codes Huffman
|
||||||
*/
|
*/
|
||||||
private Map<Integer,String> codes;
|
private static Map<Integer,Integer> codes;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Chaine de caracteres qui va nous permettre de sauvegader le code Huffman
|
* 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
|
* @return Map on stockera les codes Huffman sous forme de dictionnaire
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public Map<Integer,String> generateCodes(){
|
public Map<Integer,Integer> generateCodes(){
|
||||||
/**
|
/**
|
||||||
* Le but de cette méthode est de pouvoir generer les codes Huffman à partir de l'arbre :
|
* 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 :
|
* Les branches prendront comme valeur 1 ou 0 selon differents cas :
|
||||||
@@ -164,7 +164,7 @@ public class HuffmanTree {
|
|||||||
this.chaineCarac = new String();
|
this.chaineCarac = new String();
|
||||||
|
|
||||||
if(root.isLeaf()){
|
if(root.isLeaf()){
|
||||||
codes.put(root.getValue(),chaineCarac);
|
codes.put(root.getValue(),Integer.parseInt(chaineCarac));
|
||||||
return codes;
|
return codes;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -192,8 +192,8 @@ public class HuffmanTree {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static Map<Integer,String> getDictionnary(){
|
public static Map<Integer,Integer> getDictionnary(){
|
||||||
return this.codes;
|
return codes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,24 +1,24 @@
|
|||||||
package fr.iutfbleau.sae;
|
package fr.iutfbleau.sae.mimage;
|
||||||
|
|
||||||
import java.awt.*;
|
|
||||||
import java.io.*;
|
|
||||||
import javax.imageio.ImageIO;
|
|
||||||
import java.awt.image.BufferedImage;
|
|
||||||
|
|
||||||
public class RGBImage {
|
public class RGBImage {
|
||||||
|
|
||||||
public BufferedImage chargementDeImage(File f){
|
private int width;
|
||||||
//verification si le fichier contient quelque chose, si il est exesistant et si c'est un fichier "normal" d'apres la javadoc.
|
private int height;
|
||||||
if (f == null || !f.exists() || !f.isFile()) {
|
private Pixel [] pixels
|
||||||
return null;
|
|
||||||
|
public int getWidth() {
|
||||||
|
return width;
|
||||||
}
|
}
|
||||||
BufferedImage image;
|
|
||||||
try {
|
public int getHeight() {
|
||||||
image = ImageIO.read(f);
|
return height;
|
||||||
} catch (IOExeption e){
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
return image;
|
|
||||||
//a completer encore
|
public Pixel[] getPixels() {
|
||||||
|
return pixels;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPixels(Pixel[] pixels) {
|
||||||
|
this.pixels = pixels;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user