Finalisation des interfaces pour les codes + test avec une image

This commit is contained in:
2025-12-27 14:19:04 +01:00
parent 9d925f6782
commit 2dbef96484
19 changed files with 75 additions and 31 deletions
@@ -77,4 +77,8 @@ public class ConverterController {
e.printStackTrace();
}
}
public RGBImage getImage(){
return this.image;
}
}
+51 -7
View File
@@ -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<Integer, String> codesRouge = new HashMap<>();
/*Map<Integer, String> 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<Integer,String> codesHuffR = arbreR.generateCodes();
HuffmanTree arbreG = new HuffmanTree(freqG);
Map<Integer,String> codesHuffG = arbreG.generateCodes();
HuffmanTree arbreB = new HuffmanTree(freqB);
Map<Integer,String> codesHuffB = arbreB.generateCodes();
window.setHuffmanTable(codesHuffR,codesHuffG,codesHuffB);
// Passons désormais aux codes canoniques :
CanonicalCode codeCanoniques = new CanonicalCode();
Map<Integer,String> codesCanoniqueRouges = codeCanoniques.generateCodes(codesHuffR);
Map<Integer,String> codesCanoniqueGreen = codeCanoniques.generateCodes(codesHuffG);
Map<Integer,String> codesCanoniqueBleu = codeCanoniques.generateCodes(codesHuffB);
window.setCanonicalTable(codesCanoniqueRouges, codesCanoniqueGreen, codesCanoniqueBleu);
//System.out.println("DLKSLDKSLKDSLKSLKSLDKSLDKLSdkslkdl");
}
}
@@ -2,17 +2,18 @@ package fr.iutfbleau.sae.mhuffman;
import java.util.*;
public class CanonicalCode{
private Map<Integer, String> codeLengths = new HashMap<>();
private Map<Integer, String> canonicalCodes = new HashMap<>();
//private Map<Integer, String> codeLengths = new HashMap<>();
//private Map<Integer, String> canonicalCodes = new HashMap<>();
public Map<Integer,String> generateCodes(){
public Map<Integer,String> generateCodes(Map<Integer,String> 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<Map.Entry<Integer, String>> liste = new ArrayList<>(codeLengths.entrySet());
List<Map.Entry<Integer, String>> 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<Integer,String> 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<Integer,String> canonicalCodes,int value){
return canonicalCodes.get(value);
}
public int getLength(int value){
return this.codeLengths.get(value).length();
public int getLength(Map<Integer,String> codesH,int value){
return codesH.get(value).length();
}
public Map<Integer,String> getCanonicalCodes(){
return this.canonicalCodes;
}
}
@@ -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;
@@ -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");
}
@@ -129,7 +129,7 @@ public class ConverterWindow extends JFrame {
public void setHuffmanTable(Map<Integer, String> codesRouge,
Map<Integer, String> codesVert,
Map<Integer, String> codesBleu) {
codeTablePanel.updateCanonicalCodes(codesRouge, codesVert, codesBleu);
codeTablePanel.updateCodes(codesRouge, codesVert, codesBleu);
}
/**
@@ -144,6 +144,6 @@ public class ConverterWindow extends JFrame {
public void setCanonicalTable(Map<Integer, String> codesRouge,
Map<Integer, String> codesVert,
Map<Integer, String> codesBleu) {
codeTablePanel.updateCodes(codesRouge, codesVert, codesBleu);
codeTablePanel.updateCanonicalCodes(codesRouge, codesVert, codesBleu);
}
}