This commit is contained in:
AlgaLaptop
2025-12-28 00:50:00 +01:00
parent 27ec290315
commit 608853fcfe
16 changed files with 92 additions and 114 deletions
+63 -3
View File
@@ -1,6 +1,7 @@
package fr.iutfbleau.sae;
import fr.iutfbleau.sae.mhuffman.CanonicalCode;
import fr.iutfbleau.sae.mhuffman.FrequencyTable;
import fr.iutfbleau.sae.mhuffman.HuffmanTree;
import fr.iutfbleau.sae.mimage.Pixel;
import fr.iutfbleau.sae.mimage.RGBImage;
import fr.iutfbleau.sae.vconverter.ConverterWindow;
@@ -30,9 +31,9 @@ public class ConverterController {
private Map<Integer, String> abrHuffmanB;
// Codes canoniques pour chaque composante
private CanonicalCode canonRED;
private CanonicalCode canonGREEN;
private CanonicalCode canonBLUE;
private Map<Integer, String> canonRED;
private Map<Integer, String> canonGREEN;
private Map<Integer, String> canonBLUE;
// La fenêtre du convertisseur
private ConverterWindow fen;
@@ -78,6 +79,65 @@ public class ConverterController {
}
}
public void computeFrequencies() {
if (this.image == null) {
System.err.println("Aucune image chargée pour le calcul des fréquences.");
return;
}
this.frequencyTable = new FrequencyTable();
this.frequencyTable.computeFromImage(this.image);
// Mettre à jour le GUI avec les fréquences
int[] freqR = this.frequencyTable.getRed();
int[] freqG = this.frequencyTable.getGreen();
int[] freqB = this.frequencyTable.getBlue();
this.fen.setFrequencyTable(freqR, freqG, freqB);
}
public void computeHuffman() {
if (this.frequencyTable == null) {
System.err.println("Les fréquences ne sont pas encore calculées.");
return;
}
// Génération des arbres de Huffman pour chaque composante et stockage des codes
HuffmanTree arbreR = new HuffmanTree(this.frequencyTable.getRed());
this.abrHuffmanR = arbreR.generateCodes();
HuffmanTree arbreG = new HuffmanTree(this.frequencyTable.getGreen());
this.abrHuffmanG = arbreG.generateCodes();
HuffmanTree arbreB = new HuffmanTree(this.frequencyTable.getBlue());
this.abrHuffmanB = arbreB.generateCodes();
// Mettre à jour le GUI avec les codes de Huffman
this.fen.setHuffmanTable(this.abrHuffmanR, this.abrHuffmanG, this.abrHuffmanB);
}
public void computeCanonical() {
if (this.abrHuffmanR == null || this.abrHuffmanG == null || this.abrHuffmanB == null) {
System.err.println("Les codes de Huffman doivent être générés d'abord.");
return;
}
CanonicalCode codeCanoniques = new CanonicalCode();
this.canonRED = codeCanoniques.generateCodes(this.abrHuffmanR);
this.canonGREEN = codeCanoniques.generateCodes(this.abrHuffmanG);
this.canonBLUE = codeCanoniques.generateCodes(this.abrHuffmanB);
// Mettre à jour le GUI avec les codes canoniques
this.fen.setCanonicalTable(this.canonRED, this.canonGREEN, this.canonBLUE);
}
public void saveAsPIF(String filepath) {
// À implémenter : sauvegarder l'image convertie au format PIF
}
public RGBImage getImage(){
return this.image;
}