Finalisation des interfaces pour les codes + test avec une image
This commit is contained in:
@@ -77,4 +77,8 @@ public class ConverterController {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public RGBImage getImage(){
|
||||
return this.image;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user