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; } }