Files
SAE32_2025/src/fr/iutfbleau/sae/ConverterController.java
T

81 lines
2.6 KiB
Java
Raw Normal View History

2025-12-19 10:49:27 +01:00
package fr.iutfbleau.sae;
2025-12-27 10:20:24 +01:00
import fr.iutfbleau.sae.mhuffman.CanonicalCode;
import fr.iutfbleau.sae.mhuffman.FrequencyTable;
import fr.iutfbleau.sae.mimage.Pixel;
import fr.iutfbleau.sae.mimage.RGBImage;
import fr.iutfbleau.sae.vconverter.ConverterWindow;
import java.awt.image.BufferedImage;
2025-12-27 10:20:24 +01:00
import java.io.File;
import java.util.Map;
import javax.imageio.ImageIO;
2025-12-19 10:49:27 +01:00
2025-12-27 10:20:24 +01:00
/**
* Contrôleur pour la conversion d'images.
* <p>
* Cette classe gère le chargement des fichiers image et les opérations
* de conversion associées. tel que
* </p>
*
*/
2025-12-19 10:49:27 +01:00
public class ConverterController {
2025-12-27 10:20:24 +01:00
// Image convertie en RGBImage
private RGBImage image;
2025-12-27 10:20:24 +01:00
// Table de fréquences pour chaque composante
private FrequencyTable frequencyTable;
// Arbres de Huffman pour chaque composante
private Map<Integer, String> abrHuffmanR;
private Map<Integer, String> abrHuffmanG;
private Map<Integer, String> abrHuffmanB;
// Codes canoniques pour chaque composante
private CanonicalCode canonRED;
private CanonicalCode canonGREEN;
private CanonicalCode canonBLUE;
// La fenêtre du convertisseur
private ConverterWindow fen;
public ConverterController(ConverterWindow fen) {
this.fen = fen;
}
// charger une image depuis un fichier avec bufferedImage et la convertir en RGBImage
public void loadImage(String filepath) {
File FI = new File(filepath);
try{
// Lire l'image avec BufferedImage
BufferedImage buffimage = ImageIO.read(FI);
if (buffimage == null) {
throw new IllegalArgumentException("Le fichier spécifié n'est pas une image valide.");
}
int w = buffimage.getWidth();
int h = buffimage.getHeight();
// Créer une RGBImage de la même taille
this.image = new RGBImage(w, h);
// remplir la RGBImage avec les pixels de BufferedImage
for (int y = 0; y < h; y++) {
for (int x = 0; x < w; x++) {
int rgb = buffimage.getRGB(x, y); // obtenir la valeur RGB du pixel
// Extraire les composantes R, G, B
int r = (rgb >> 16) & 0xFF;
int g = (rgb >> 8) & 0xFF;
int b = rgb & 0xFF;
// Créer un pixel et l'ajouter à la RGBImage
this.image.setPixel(x, y, new Pixel(r, g, b));
}
}
// Mettre à jour le GUI
this.fen.setImagePreview(buffimage);
} catch (Exception e) {
e.printStackTrace();
}
2025-12-26 19:49:39 +01:00
}
2025-12-19 10:49:27 +01:00
}