Files
SAE32_2025/src/fr/iutfbleau/sae/mhuffman/FrequencyTable.java
T
2026-01-07 19:27:03 +01:00

85 lines
2.3 KiB
Java

package fr.iutfbleau.sae.mhuffman;
import fr.iutfbleau.sae.mpif.Pixel;
import fr.iutfbleau.sae.mpif.RGBImage;
/**
*
* Classe qui calcule les fréquences des valeurs de couleur dans une image RGB.
* Elle compte combien de fois chaque valeur de rouge, vert et bleu apparaît,
* ce qui servira ensuite pour construire les arbres de Huffman.
*/
public class FrequencyTable {
/** Fréquences des valeurs de rouge entre 0 et 255. */
private final int[] freqR;
/** Fréquences des valeurs de vert entre 0 et 255. */
private final int[] freqG;
/** Fréquences des valeurs de bleu entre 0 et 255. */
private final int[] freqB;
/**
* Constructeur qui initialise les trois tableaux de fréquences
* à zéro pour toutes les valeurs possibles.
*/
public FrequencyTable() {
this.freqR = new int[256];
this.freqG = new int[256];
this.freqB = new int[256];
}
/**
* Analyse une image et remplit les tableaux de fréquences.
* Pour chaque pixel, on récupère la valeur de rouge, de vert et de bleu,
* puis on incrémente la fréquence associée.
*
* @param img l'image à analyser
* @throws IllegalArgumentException si l'image est nulle
*/
public void computeFromImage(RGBImage img) {
if (img == null) {
throw new IllegalArgumentException("L'image ne peut pas être null");
}
for (int x = 0; x < img.getWidth(); x++) {
for (int y = 0; y < img.getHeight(); y++) {
Pixel pixel = img.getPixel(x, y);
this.freqR[pixel.getR()]++;
this.freqG[pixel.getG()]++;
this.freqB[pixel.getB()]++;
}
}
}
/**
* Renvoie les fréquences des valeurs rouges.
*
* @return tableau de fréquence pour le rouge
*/
public int[] getRed() {
return this.freqR;
}
/**
* Renvoie les fréquences des valeurs vertes.
*
* @return tableau de fréquence pour le vert
*/
public int[] getGreen() {
return this.freqG;
}
/**
* Renvoie les fréquences des valeurs bleues.
*
* @return tableau de fréquence pour le bleu
*/
public int[] getBlue() {
return this.freqB;
}
}