85 lines
2.3 KiB
Java
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;
|
|
}
|
|
}
|