From ca80d9b28b2ba5ada344f5c6b559e9331b9187d9 Mon Sep 17 00:00:00 2001
From: AlgaLaptop
Date: Sat, 27 Dec 2025 10:20:24 +0100
Subject: [PATCH] correction ayoub et controleur conv
---
.../sae/mhuffman/FrequencyTable.class | Bin 0 -> 1002 bytes
build/fr/iutfbleau/sae/mimage/Pixel.class | Bin 0 -> 646 bytes
build/fr/iutfbleau/sae/mimage/RGBImage.class | Bin 0 -> 700 bytes
.../sae/vconverter/ConverterWindow.class | Bin 3375 -> 3387 bytes
.../sae/vconverter/ImagePreviewPanel.class | Bin 316 -> 806 bytes
makefile | 14 +-
src/fr/iutfbleau/sae/ConverterController.java | 88 +++++++++--
src/fr/iutfbleau/sae/Convertisseur.java | 4 +
.../iutfbleau/sae/mhuffman/CanonicalCode.java | 12 +-
.../sae/mhuffman/FrequencyTable.java | 12 +-
.../iutfbleau/sae/mhuffman/HuffmanTree.java | 138 ++++++++++--------
src/fr/iutfbleau/sae/mimage/RGBImage.java | 14 +-
src/fr/iutfbleau/sae/mpif/PIFWriter.java | 11 +-
src/fr/iutfbleau/sae/util/GestErreur.java | 5 +
.../sae/vconverter/ConverterWindow.java | 8 +-
.../sae/vconverter/ImagePreviewPanel.java | 23 ++-
temp/photo.jpg | Bin 0 -> 720280 bytes
17 files changed, 220 insertions(+), 109 deletions(-)
create mode 100644 build/fr/iutfbleau/sae/mhuffman/FrequencyTable.class
create mode 100644 build/fr/iutfbleau/sae/mimage/Pixel.class
create mode 100644 build/fr/iutfbleau/sae/mimage/RGBImage.class
create mode 100644 src/fr/iutfbleau/sae/util/GestErreur.java
create mode 100644 temp/photo.jpg
diff --git a/build/fr/iutfbleau/sae/mhuffman/FrequencyTable.class b/build/fr/iutfbleau/sae/mhuffman/FrequencyTable.class
new file mode 100644
index 0000000000000000000000000000000000000000..980e373170bb6cd2e33fc597e99461f53da392b3
GIT binary patch
literal 1002
zcmX^0Z`VEs1_l=fGcE=u24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk-
z5<5l)W)00SP6iGJPId+^9tLg(9!3U@v?Be?(vq~KoYcfp{o=$_{oIVww6xsBJbkyK
z)WXu#yyVJ|#H5^5Mh4cjqSV45Mh2#6Pmm#eJPiCG6TrgmAQ3?x1|hhJ6BmOBgD5+L
z7!QLug9Iak0;WZoxryni`a$kao*)Jz14nvlNqA;TNe0-Zo*)CHco?KXx;fKROFU9D
z(=$pyqOv>;at!hi4FQ=IsX2@c${L=Ynm)Mf04uWQVo+pIVrNk1VNd~?DT`M%BLho%
zYDo}Cj~WkyI!FUZz#Sx@$-|%p6L4Z=U~$e*No8c<_sPsl^()OyN-cthm_TxVZb4~D
zs#{ThF4T{z8aN#Z3kYk?Fh&O6;F84TY~REJs8MVn$E2n(GO%c9MtefM?p~Cdn#ah%
zo}OCblvA3@$iNkxUs{x$>Xr$LE@9O8(*vao21N!A1||ju24)5(Q2aA6Fff5)5ljm)
z@Gvkiure@$5)uO=gEj*Lg9if>10w?igM!v}21YGGMut6HTN&743|<&RU?T$q10#bD
z0|SE?11kdqgAoG@gE0dyg9(EegDHbNgBb%OgD!&})YOFxEDS6R3=HASwldn=7=#xw
z_%qwdYHwqZT*P3nwS|FQTSj&pgUmJtg%~}S1b?k947@NARhWnXOhf}L(!$KR{Qv$I
zCdTFe*Ml6x1a^!P0|x^GgAW52gD-;!gCBz$gFk}>LjZ#pgD*n>gAYR(LokCr0|SEq
z1Ir%!GOUK>Red{MsOgof}FMi?o&3fU^D|GgArDxyy!|(7#JCh
Su__fnSDMSf$Y27F6;lBH#KZjn
literal 0
HcmV?d00001
diff --git a/build/fr/iutfbleau/sae/mimage/Pixel.class b/build/fr/iutfbleau/sae/mimage/Pixel.class
new file mode 100644
index 0000000000000000000000000000000000000000..424078e47cc440e2a2511ad2fc91e5a3996bbe40
GIT binary patch
literal 646
zcmX^0Z`VEs1_l=f1uh0A24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk-
z5<5l)W)00SP6iGJPId+^9tLg(9!3V)v?Be?(vq~KoYcfp{o=$_{oKsl#Pn4CfXs^2
z97YDlB1Q&APmm@)9tM7p4#sp4PmqT}2+T`jWMI?q^z_sWV`N})&QD2YWZ?J7%uDqv
z%}q)z3Q0`LNo8bUNlz_t0^9Ei;kZMnAVvn3;?xolr2#Ra7_1N^=+4N%6`WsMl$`38
z2{MBV>>@po_ZSozI2f217#Nrtm_XiOU|?VZISxzQd
literal 0
HcmV?d00001
diff --git a/build/fr/iutfbleau/sae/mimage/RGBImage.class b/build/fr/iutfbleau/sae/mimage/RGBImage.class
new file mode 100644
index 0000000000000000000000000000000000000000..351c0e61c7a3b121cef2b9cd8df72dff3be51091
GIT binary patch
literal 700
zcmX^0Z`VEs1_l=fMJ@&=24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk-
z5<5l)W)00SP6iGJPId+^9tLg(9!3U*v?Be?(vq~KoYcfp{o=$_{oKsl#Pn4CAa^HE
z5QC9{wLCMWB!iKG(G#SXkB5ODq>(KnH8VYPq|~C2#H5^5Mh1@b)RJ(B<;)tI
zo{S8f>8T|iV0#%EIEqtCz=kt2sAzb45^w;>9*}WR9m*i9320$t;0n$!ElN&x%LF-w
z7ZxIVpb%zIWZ+<6VqjokW?%w^Bm)Bj6DVN7vL-?$=x638rl;yVm8PYo7Nw?mf_R$?
IIQFvu02Fl-X8-^I
delta 42
ycmdljwO)$j)W2Q(7#J8FH*$n>2#ad?WF?j*>gOcprR)1AWu+#UY_8$h&jJ8K)DF!6
diff --git a/build/fr/iutfbleau/sae/vconverter/ImagePreviewPanel.class b/build/fr/iutfbleau/sae/vconverter/ImagePreviewPanel.class
index 92d61d8133007333e005613d4cdf2f2ec0c38e80..013c129b23346b458443c4bd95c65cc4d1bf9345 100644
GIT binary patch
literal 806
zcmX^0Z`VEs1_l=f9WDkY24;2!79Ivx1~x_pp{&HR#0vf5^31$+eXoGTywn^<1~!|_
zyv!0iMh0dL%`i>|4hBwk1}+{3ZU!Dk2HmtG{mjymw4|KW#8Um@#8myV%I>5}uh-k^%OJCl`YxgD5+L6eEKSKBs_8kl|sF1)0E^o?7COnwg$a
z0@5tQ#h}2T$j+d|!=TKd!pI;9HwNYaMh4E5qQr8rmlzq0k(>w?vi9^uI2sZPU~&JX
z;?$zD)FNxmC`JYr=lqmZMh1SL%)C^;(%hufqL9R-oK!{zj^fl3uyRHQMI@6U=AeeA
zW*8#_Z*WOsa<*?`0aQCzaDHh~a;jS<$Sg6iLC7(s2l5PqA_E5l69WSSBLfpCx)~T4
zm>C#BDTRTNL6w1lL6L!xfsuiMfmLfe1LH=pLNx{k22e~fFbFfSFo-fRGN?0XK$UAT
zFoBKZ($e0_z^=88ffu2NkAazifkA?Sl|hn$lR=t+1r*UxeK`!Q3@i)`4CY$e+ZhD3
zwlJ_CW6;&w#vlS>Zex&0Va>7C+QuLa;mW13=GbY2*fO$O+Zg1-L6$HvfE*^pz{bG9
pAkV
+ * Cette classe gère le chargement des fichiers image et les opérations
+ * de conversion associées. tel que
+ *
+ *
+ */
public class ConverterController {
+ // Image convertie en RGBImage
+ private RGBImage image;
- public BufferedImage loadImage(File f){
- //verification si le fichier contient quelque chose, si il est exesistant et si c'est un fichier "normal" d'apres la javadoc.
- if (f == null || !f.exists() || !f.isFile()) {
- return null;
+ // Table de fréquences pour chaque composante
+ private FrequencyTable frequencyTable;
+
+ // Arbres de Huffman pour chaque composante
+ private Map abrHuffmanR;
+ private Map abrHuffmanG;
+ private Map 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();
}
- BufferedImage image;
- try {
- image = ImageIO.read(f);
- } catch (IOException e){
- return null;
- }
- return image;
-
}
}
diff --git a/src/fr/iutfbleau/sae/Convertisseur.java b/src/fr/iutfbleau/sae/Convertisseur.java
index d914050..95d3c36 100644
--- a/src/fr/iutfbleau/sae/Convertisseur.java
+++ b/src/fr/iutfbleau/sae/Convertisseur.java
@@ -7,6 +7,10 @@ public class Convertisseur {
public static void main(String[] args) {
// Créer et stocker la référence à la fenêtre
ConverterWindow window = new ConverterWindow();
+
+ // je la passe au controleur
+ ConverterController controller = new ConverterController(window);
+ controller.loadImage("C:\\Magasin\\COURS\\BUT2\\SAES3\\SAE32_2025\\temp");
// Exemple d'utilisation pour les codes Huffman
Map codesRouge = new HashMap<>();
diff --git a/src/fr/iutfbleau/sae/mhuffman/CanonicalCode.java b/src/fr/iutfbleau/sae/mhuffman/CanonicalCode.java
index d06a2ba..017a06c 100644
--- a/src/fr/iutfbleau/sae/mhuffman/CanonicalCode.java
+++ b/src/fr/iutfbleau/sae/mhuffman/CanonicalCode.java
@@ -2,11 +2,11 @@ package fr.iutfbleau.sae.mhuffman;
import java.util.*;
public class CanonicalCode{
- private Map codeLengths = HuffmanTree.getDictionnary();
- private Map canonicalCodes = new HashMap<>();
+ private Map codeLengths = new HashMap<>(); // Changer ici car la premiere version est incorecte
+ private Map canonicalCodes = new HashMap<>();
- public Map generateCodes(){
+ public Map generateCodes(){
// 1 ere chose à faire : on regarde uniquement la longueur des codes initiaux(Huffman)
// 2eme chose à faire : remettre dans l'ordre des longueurs : si meme taille ==> regarder valeur
// 3eme chose à faire : ecriture des codes canoniques :
@@ -37,16 +37,16 @@ public class CanonicalCode{
}
- public int getCode(){
+ public int getCode(int value){
return 0;
}
- public int getLength(){
+ public int getLength(int value){
return 0;
}
- public Map getCanonicalCodes(){
+ public Map getCanonicalCodes(){
return this.canonicalCodes;
}
}
diff --git a/src/fr/iutfbleau/sae/mhuffman/FrequencyTable.java b/src/fr/iutfbleau/sae/mhuffman/FrequencyTable.java
index 71b0831..e290162 100644
--- a/src/fr/iutfbleau/sae/mhuffman/FrequencyTable.java
+++ b/src/fr/iutfbleau/sae/mhuffman/FrequencyTable.java
@@ -1,4 +1,5 @@
package fr.iutfbleau.sae.mhuffman;
+import fr.iutfbleau.sae.mimage.RGBImage;
/**
* Représente une table de fréquences pour une image RGB.
@@ -72,11 +73,12 @@ public class FrequencyTable {
puis on fait de même pour les composantes verte et bleue.
on répète ce processus pour tous les pixels de l'image.
*/
- for (int i = 0; i < img.getWidth() * img.getHeight(); i++) {
- // En un mot: frequence[Composante] += 1
- this.freqR[img.getPixel(i).getR()]++; // Incrémente la fréquence de la composante rouge
- this.freqG[img.getPixel(i).getG()]++; // Incrémente la fréquence de la composante verte
- this.freqB[img.getPixel(i).getB()]++; // Incrémente la fréquence de la composante bleue
+ for (int ligne = 0; ligne < img.getWidth(); ligne++) {
+ for (int colonne = 0; colonne < img.getHeight(); colonne++) {
+ this.freqR[img.getPixel(ligne, colonne).getR()]++; // Incrémente la fréquence de la composante rouge
+ this.freqG[img.getPixel(ligne, colonne).getG()]++; // Incrémente la fréquence de la composante verte
+ this.freqB[img.getPixel(ligne, colonne).getB()]++; // Incrémente la fréquence de la composante bleue
+ }
}
}
diff --git a/src/fr/iutfbleau/sae/mhuffman/HuffmanTree.java b/src/fr/iutfbleau/sae/mhuffman/HuffmanTree.java
index 5081ede..ed0312c 100644
--- a/src/fr/iutfbleau/sae/mhuffman/HuffmanTree.java
+++ b/src/fr/iutfbleau/sae/mhuffman/HuffmanTree.java
@@ -57,7 +57,9 @@ public class HuffmanTree {
/**
* Dictionnaire pour enregistrer les codes Huffman
*/
- private static Map codes;
+ // j'ai retirer le static car chaque arbre a ses propres codes et j'utilise string plutot que int pour stocker les codes car on construit une chaine de 0 et de 1
+ private Map codes;
+
/**
* Chaine de caracteres qui va nous permettre de sauvegader le code Huffman
@@ -85,12 +87,7 @@ public class HuffmanTree {
// J'initialise la racine à null.
this.root = null;
- // je cree une collection de feuilles
-
- /////////////////////////////////// Voir si ya moyen doptimiser //////////////////////////////////////
-
- // tu pourrait utiliser une PriorityQueue pour placer selon les fréquences comme dit dans l'énoncé !!!!
-
+ // je cree une collection de feuilles
List feuilles = new ArrayList<>();
// pour chaque valeur(symbole) dans la table de frequence
@@ -132,26 +129,13 @@ public class HuffmanTree {
// a la fin il ne reste qu'un seul noeud : la racine de l'arbre
this.root = feuilles.get(0);
}
-
-
- /**
- * Retourne la racine de l'arbre de Huffman.
- *
- * Cette méthode permet d'accéder à la structure complète de l'arbre,
- * notamment lors de la génération des codes ou du décodage des données.
- *
- *
- * @return le nœud racine de l'arbre de Huffman
- */
- public HuffmanNode getRoot() {
- return root;
- }
-
- /**
+
+ // Méthode pour générer les codes Huffman à partir de l'arbre
+ // pourquoi string et pas int ? car on va construire une chaine de 0 et de 1
+ /**
* @return Map on stockera les codes Huffman sous forme de dictionnaire
- */
-
- public Map generateCodes(){
+ */
+ public Map generateCodes() {
/**
* Le but de cette méthode est de pouvoir generer les codes Huffman à partir de l'arbre :
* Les branches prendront comme valeur 1 ou 0 selon differents cas :
@@ -159,42 +143,76 @@ public class HuffmanTree {
* 0 - si on saute vers un fils gauche.
* On construit les codes qui partent de la racine jusqu'à notre objectif
*/
-
- this.codes = new HashMap<>();
- this.chaineCarac = new String();
-
- if(root.isLeaf()){
- codes.put(root.getValue(),Integer.parseInt(chaineCarac));
- return codes;
- }
-
- HuffmanNode temp = root;
-
- if (root.getLeft() != null) {
- root = root.getLeft();
- chaineCarac = chaineCarac + "0";
- generateCodes();
- // on retire le dernier bit lorsqu'on remonte car sinon les codes seront faussés
- chaineCarac = chaineCarac.substring(0, chaineCarac.length() - 1);
- }
-
- if (temp.getRight() != null) {
- root = temp.getRight();
- chaineCarac = chaineCarac + "1";
- generateCodes();
- chaineCarac = chaineCarac.substring(0, chaineCarac.length() - 1);
- }
-
-
- root = temp;
- return codes;
-
-}
-
-
- public static Map getDictionnary(){
+ this.codes = new HashMap<>();
+ // je lance la methode recursive avec une chaine vide qui va se remplir au fur et à mesure
+ generateCodesRec(this.root, "");
return codes;
}
+
+ private void generateCodesRec(HuffmanNode node, String prefiixe) {
+ // Cas de base: si le noeud est une feuille, on ajoute le code au dictionnaire
+ if (node.isLeaf()) {
+ if (prefiixe.length() > 0){
+ this.codes.put(node.getValue(), prefiixe);
+ }else{
+ this.codes.put(node.getValue(), "0");
+ }
+ return;
+ }
+
+ //Case general : sinon on continue a parcourir l'arbre
+ // On va a gauche en ajoutant "0" au code
+ generateCodesRec(node.getLeft(), prefiixe + "0");
+ // On va a droite en ajoutant "1" au code
+ generateCodesRec(node.getRight(), prefiixe + "1");
+
+
+ // this.codes = new HashMap<>();
+ // this.chaineCarac = new String();
+
+ // if(root.isLeaf()){
+ // codes.put(root.getValue(),Integer.parseInt(chaineCarac));
+ // return codes;
+ // }
+
+ // HuffmanNode temp = root;
+
+ // if (root.getLeft() != null) {
+ // root = root.getLeft();
+ // chaineCarac = chaineCarac + "0";
+ // generateCodes();
+ // // on retire le dernier bit lorsqu'on remonte car sinon les codes seront faussés
+ // chaineCarac = chaineCarac.substring(0, chaineCarac.length() - 1);
+ // }
+
+ // if (temp.getRight() != null) {
+ // root = temp.getRight();
+ // chaineCarac = chaineCarac + "1";
+ // generateCodes();
+ // chaineCarac = chaineCarac.substring(0, chaineCarac.length() - 1);
+ // }
+
+
+ // root = temp;
+ // return codes;
+ }
+
+ /**
+ * @return Dictionnaire des codes Huffman
+ */
+ public Map getCodes(){
+ return codes;
+ }
+
+ /**
+ * @return le nœud racine de l'arbre de Huffman
+ */
+ public HuffmanNode getRoot() {
+ return root;
+ }
+
+
+
}
diff --git a/src/fr/iutfbleau/sae/mimage/RGBImage.java b/src/fr/iutfbleau/sae/mimage/RGBImage.java
index 92ef420..8808505 100644
--- a/src/fr/iutfbleau/sae/mimage/RGBImage.java
+++ b/src/fr/iutfbleau/sae/mimage/RGBImage.java
@@ -4,16 +4,14 @@ public class RGBImage {
private int width;
private int height;
- private Pixel [] pixels;
+ private Pixel [][] pixels;
public RGBImage (int lar, int haut){
this.width=lar;
this.height=haut;
- int[][] matrice = new int[this.width][this.height];
+ this.pixels = new Pixel[this.width][this.height];
}
-
-
public int getWidth() {
return width;
}
@@ -22,11 +20,11 @@ public class RGBImage {
return height;
}
- public Pixel[] getPixels() {
- return pixels;
+ public void setPixel(int x, int y, Pixel p) {
+ this.pixels[x][y] = p;
}
- public void setPixels(Pixel[] pixels) {
- this.pixels = pixels;
+ public Pixel getPixel(int x, int y) {
+ return this.pixels[x][y];
}
}
\ No newline at end of file
diff --git a/src/fr/iutfbleau/sae/mpif/PIFWriter.java b/src/fr/iutfbleau/sae/mpif/PIFWriter.java
index c31139e..7c47a73 100644
--- a/src/fr/iutfbleau/sae/mpif/PIFWriter.java
+++ b/src/fr/iutfbleau/sae/mpif/PIFWriter.java
@@ -1,18 +1,17 @@
package fr.iutfbleau.sae.mpif;
-import fr.iutfbleau.sae.util.bitOutputStream;
+import fr.iutfbleau.sae.util.BitOutputStream;
+import java.util.Map;
public class PIFWriter {
-
-
- public void writeHeader(bitOutputStream out,int width, int height){
+ public void writeHeader(BitOutputStream out,int width, int height){
}
- public void writeTables(bitOutputStream out, Map canonicalCodes){
+ public void writeTables(BitOutputStream out, Map canonicalCodes){
}
- public void encodePixels(bitOutputStream out){
+ public void encodePixels(BitOutputStream out){
}
}
diff --git a/src/fr/iutfbleau/sae/util/GestErreur.java b/src/fr/iutfbleau/sae/util/GestErreur.java
new file mode 100644
index 0000000..86e4a22
--- /dev/null
+++ b/src/fr/iutfbleau/sae/util/GestErreur.java
@@ -0,0 +1,5 @@
+package fr.iutfbleau.sae.util;
+
+public class GestErreur {
+
+}
diff --git a/src/fr/iutfbleau/sae/vconverter/ConverterWindow.java b/src/fr/iutfbleau/sae/vconverter/ConverterWindow.java
index 646eefd..54223ad 100644
--- a/src/fr/iutfbleau/sae/vconverter/ConverterWindow.java
+++ b/src/fr/iutfbleau/sae/vconverter/ConverterWindow.java
@@ -1,10 +1,10 @@
package fr.iutfbleau.sae.vconverter;
-import javax.swing.*;
+import fr.iutfbleau.sae.util.Config;
import java.awt.*;
import java.util.Map;
-
-import fr.iutfbleau.sae.util.Config;
+import javax.swing.*;
+import java.awt.image.BufferedImage;
/**
* Fenêtre principale du convertisseur.
@@ -101,7 +101,7 @@ public class ConverterWindow extends JFrame {
*
* @param img image à afficher
*/
- public void setImagePreview(Object img) {
+ public void setImagePreview(BufferedImage img) {
imagePreviewPanel.setImage(img);
}
diff --git a/src/fr/iutfbleau/sae/vconverter/ImagePreviewPanel.java b/src/fr/iutfbleau/sae/vconverter/ImagePreviewPanel.java
index 404e111..c72ea0d 100644
--- a/src/fr/iutfbleau/sae/vconverter/ImagePreviewPanel.java
+++ b/src/fr/iutfbleau/sae/vconverter/ImagePreviewPanel.java
@@ -1,6 +1,7 @@
package fr.iutfbleau.sae.vconverter;
- import javax.swing.JPanel;
+import java.awt.image.BufferedImage;
+import javax.swing.JPanel;
/**
* Le panneau d’aperçu de l’image.
@@ -12,11 +13,27 @@ package fr.iutfbleau.sae.vconverter;
public class ImagePreviewPanel extends JPanel {
+
+ private BufferedImage image;
+
public ImagePreviewPanel() {
// constructeur vide pour l'instant
}
- public void setImage(Object img) {
- // Implémentation à ajouter
+ public void setImage(BufferedImage img) {
+ this.image = img;
+ repaint();
+
+ }
+
+ @Override
+ protected void paintComponent(java.awt.Graphics g) {
+ super.paintComponent(g);
+ if (image != null) {
+ // Dessiner l'image centrée dans le panneau
+ int x = (getWidth() - image.getWidth()) / 2;
+ int y = (getHeight() - image.getHeight()) / 2;
+ g.drawImage(image, x, y, this);
+ }
}
}
\ No newline at end of file
diff --git a/temp/photo.jpg b/temp/photo.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f5c8714e59f687dc76c8a3dde775ceb9e88f7cfe
GIT binary patch
literal 720280
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