Files
SAE32_2025/src/fr/iutfbleau/sae/mhuffman/FrequencyTable.java
T

85 lines
2.3 KiB
Java
Raw Normal View History

2025-12-17 22:26:49 +01:00
package fr.iutfbleau.sae.mhuffman;
2026-01-07 19:27:03 +01:00
2026-01-05 10:19:59 +01:00
import fr.iutfbleau.sae.mpif.Pixel;
import fr.iutfbleau.sae.mpif.RGBImage;
2025-12-15 20:21:48 +01:00
2025-12-17 22:26:49 +01:00
/**
2026-01-07 19:27:03 +01:00
*
* 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.
2025-12-17 22:26:49 +01:00
*/
public class FrequencyTable {
2025-12-15 20:21:48 +01:00
2026-01-07 19:27:03 +01:00
/** Fréquences des valeurs de rouge entre 0 et 255. */
2026-01-05 10:19:59 +01:00
private final int[] freqR;
2025-12-17 22:26:49 +01:00
2026-01-07 19:27:03 +01:00
/** Fréquences des valeurs de vert entre 0 et 255. */
2026-01-05 10:19:59 +01:00
private final int[] freqG;
2025-12-17 22:26:49 +01:00
2026-01-07 19:27:03 +01:00
/** Fréquences des valeurs de bleu entre 0 et 255. */
private final int[] freqB;
2025-12-17 22:26:49 +01:00
/**
2026-01-07 19:27:03 +01:00
* Constructeur qui initialise les trois tableaux de fréquences
* à zéro pour toutes les valeurs possibles.
2025-12-17 22:26:49 +01:00
*/
public FrequencyTable() {
this.freqR = new int[256];
this.freqG = new int[256];
this.freqB = new int[256];
}
/**
2026-01-07 19:27:03 +01:00
* 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.
2025-12-17 22:26:49 +01:00
*
2026-01-07 19:27:03 +01:00
* @param img l'image à analyser
* @throws IllegalArgumentException si l'image est nulle
2025-12-17 22:26:49 +01:00
*/
public void computeFromImage(RGBImage img) {
2026-01-04 18:05:46 +01:00
if (img == null) {
throw new IllegalArgumentException("L'image ne peut pas être null");
}
2026-01-07 19:27:03 +01:00
2026-01-04 18:05:46 +01:00
for (int x = 0; x < img.getWidth(); x++) {
for (int y = 0; y < img.getHeight(); y++) {
2026-01-07 19:27:03 +01:00
2026-01-04 18:05:46 +01:00
Pixel pixel = img.getPixel(x, y);
2026-01-07 19:27:03 +01:00
2026-01-04 18:05:46 +01:00
this.freqR[pixel.getR()]++;
this.freqG[pixel.getG()]++;
this.freqB[pixel.getB()]++;
2025-12-27 10:20:24 +01:00
}
2025-12-17 22:26:49 +01:00
}
}
/**
2026-01-07 19:27:03 +01:00
* Renvoie les fréquences des valeurs rouges.
2025-12-17 22:26:49 +01:00
*
2026-01-07 19:27:03 +01:00
* @return tableau de fréquence pour le rouge
2025-12-17 22:26:49 +01:00
*/
public int[] getRed() {
return this.freqR;
}
/**
2026-01-07 19:27:03 +01:00
* Renvoie les fréquences des valeurs vertes.
*
* @return tableau de fréquence pour le vert
2025-12-17 22:26:49 +01:00
*/
public int[] getGreen() {
return this.freqG;
}
/**
2026-01-07 19:27:03 +01:00
* Renvoie les fréquences des valeurs bleues.
2025-12-17 22:26:49 +01:00
*
2026-01-07 19:27:03 +01:00
* @return tableau de fréquence pour le bleu
2025-12-17 22:26:49 +01:00
*/
public int[] getBlue() {
return this.freqB;
}
2026-01-07 19:27:03 +01:00
}