From bcc6be172b1e85dfa92fdde8b4a2b5ed2e38e6da Mon Sep 17 00:00:00 2001 From: Dretse Date: Sat, 28 Oct 2017 20:55:43 +0200 Subject: [PATCH 01/10] ajout de la fonction palette, correction des erreurs --- src/ImageViewer.java | 1 - src/KdNode.java | 69 +++++++++++++++++++++++++++++++++++++++++--- src/Kdtree.java | 60 +++++++++++++++----------------------- src/Quant.java | 55 +++++++++++++++++++++-------------- src/couleur.java | 27 +++++++++++++++++ 5 files changed, 149 insertions(+), 63 deletions(-) diff --git a/src/ImageViewer.java b/src/ImageViewer.java index 081b6c5..74a9d90 100644 --- a/src/ImageViewer.java +++ b/src/ImageViewer.java @@ -94,7 +94,6 @@ public void actionPerformed(ActionEvent arg0) { global.setLayout(new BoxLayout(global, BoxLayout.LINE_AXIS)); global.add(input); - global.add(action); global.add(quant); global.add(histo); diff --git a/src/KdNode.java b/src/KdNode.java index 4426406..3e28e5d 100644 --- a/src/KdNode.java +++ b/src/KdNode.java @@ -15,7 +15,7 @@ public KdNode(couleur C, int p) public int addpointnode(couleur RVB) { - //ajoute un point par r�cursivit� et renvoie la profondeur � laquelle il a �t� ajout� + //ajoute un point par recursivite et renvoie la profondeur a laquelle il a �t� ajout� if (RVB.getRVB()[P%3]>coul.getRVB()[P%3]) { if(fils[1]) @@ -43,9 +43,70 @@ public int addpointnode(couleur RVB) } } } - public couleur[] palettenode(couleur[] palette,int p) + public couleur getcoul() { - - + return coul; + } + public couleur[] palnode(couleur[] pal) + { + int L= pal.length; + if(L==2) + { + pal[0]=filsD.Moy(); + pal[1]=filsG.Moy(); + return pal; + } + else + { + int i; + couleur[] A=new couleur[L/2]; + couleur[] B=new couleur[L/2]; + if(fils[0]) {A=filsG.palnode(A);} + else { + for(i=0;iprofondeur) + { + profondeur=p; + } } - //Retire un noeud de l’arbe - public void addpoint(int XY[], int RVB[]){ - + public couleur[] palette(int pow) + { + //renvoie une palette de 2**pow couleurs + couleur[] palette= new couleur[(int) Math.pow(2, pow-1)]; + palette= Racine.palnode(palette); + return palette; } - /*Ajoute un point à la racine de l’arbre, en créant une couleur associée à RVB - Met à jour profondeur - >> la méthode addpoint de KdNode devra renvoyer un entier la profondeur du nouveau noeud créé*/ - - /*public int addpoint(Couleur RVB, int[] XY){ - if(RVB.compare(couleur, P%3)){ - if (fils[0]){ - filsG.addpoint(RVB, XY); - } - else{ - filsG= new KdNode(RVB,XY, P+1); - fils[0]=true; return P+1; - } - } - else{ - if (fils[1]){ - filsD.addpoint(RVB, XY); - } - else{ - filsD= new KdNode(RVB,XY,P+1); - fils[1]=true; return P+1; - } - }*/ -} -/*couleurR= couleur de la racine (class Couleur) -Profondeur=profondeur de l’arbre -Racine = Premier noeud de l’arbe (class KdNode)*/ \ No newline at end of file + + +} \ No newline at end of file diff --git a/src/Quant.java b/src/Quant.java index 409c052..5870829 100644 --- a/src/Quant.java +++ b/src/Quant.java @@ -46,8 +46,19 @@ public void actionPerformed(ActionEvent arg0) int[][] line= linear(image,w,h); //création d'un arbre à partir de line KdTree Arbre1 = InitFromArray(line); + palette = Arbre1.palette(5); + printpal(palette); } + public void printpal(couleur[] pal) + { + int i; + for(i=0;i Date: Sat, 28 Oct 2017 22:02:31 +0200 Subject: [PATCH 02/10] finalisation de la palettisation --- src/KdTree.java | 43 ++++++++++++++++++++++++------------------- src/Kdtree.java | 33 --------------------------------- 2 files changed, 24 insertions(+), 52 deletions(-) delete mode 100644 src/Kdtree.java diff --git a/src/KdTree.java b/src/KdTree.java index c2909c1..c8fd121 100644 --- a/src/KdTree.java +++ b/src/KdTree.java @@ -1,28 +1,33 @@ -public class KdTree { - int P=0; - KdNode Racine; - public KdTree(int[] RVB) - { - couleur coul= new couleur(RVB); - Racine= new KdNode(coul,P); +public class KdTree{ + private int profondeur=0; + + private couleur couleurR; + private KdNode Racine; + + public KdTree (int RVB[]){ + this.couleurR=new couleur(RVB[0], RVB[1], RVB[2]); + this.Racine= new KdNode(couleurR,0); } - void addpoint(int []RVB) - { - //ajoute un point à l'arbre, si il est plus profond, on augemente la profondeur max de l'arbre - couleur coul=new couleur(RVB); - int A=Racine.addpointnode(coul); - if (A>P) + + + public void addpoint(int RVB[]){ + couleur C=new couleur(RVB); + int p= Racine.addpointnode(C); + if(p>profondeur) { - P=A; + profondeur=p; } + } - couleur[] palette(int p) + public couleur[] palette(int pow) { - int L=(int) Math.pow(2,p); - couleur[] palette= new couleur[L]; - palette= Racine.palettenode(palette, p); + //renvoie une palette de 2**pow couleurs + couleur[] palette= new couleur[(int) Math.pow(2, pow-1)]; + palette= Racine.palnode(palette); return palette; } -} + + +} \ No newline at end of file diff --git a/src/Kdtree.java b/src/Kdtree.java deleted file mode 100644 index c8fd121..0000000 --- a/src/Kdtree.java +++ /dev/null @@ -1,33 +0,0 @@ - -public class KdTree{ - private int profondeur=0; - - private couleur couleurR; - private KdNode Racine; - - public KdTree (int RVB[]){ - this.couleurR=new couleur(RVB[0], RVB[1], RVB[2]); - this.Racine= new KdNode(couleurR,0); - } - - - - public void addpoint(int RVB[]){ - couleur C=new couleur(RVB); - int p= Racine.addpointnode(C); - if(p>profondeur) - { - profondeur=p; - } - - } - public couleur[] palette(int pow) - { - //renvoie une palette de 2**pow couleurs - couleur[] palette= new couleur[(int) Math.pow(2, pow-1)]; - palette= Racine.palnode(palette); - return palette; - } - - -} \ No newline at end of file From 61941fb90b76963a21133257a10d32123a0fd49c Mon Sep 17 00:00:00 2001 From: Dretse Date: Sat, 28 Oct 2017 22:09:31 +0200 Subject: [PATCH 03/10] =?UTF-8?q?retirer=20les=20derni=C3=A8res=20erreurs?= =?UTF-8?q?=20avant=20rendu=20intermediaire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ImageViewer.java | 224 ++++++++++++++++++++++++++++++++++++++++++- src/KdNode.java | 51 ++++++++++ src/KdTree.java | 14 +++ src/Quant.java | 45 ++++++++- src/couleur.java | 4 + 5 files changed, 333 insertions(+), 5 deletions(-) diff --git a/src/ImageViewer.java b/src/ImageViewer.java index 74a9d90..e3c705d 100644 --- a/src/ImageViewer.java +++ b/src/ImageViewer.java @@ -58,7 +58,229 @@ public ImageViewer () { quant.setLayout(new BoxLayout(quant, BoxLayout.PAGE_AXIS)); quant.add(buttonQuant); // Defines action associated to buttons - buttonQuant.addActionListener(new Quant()); + buttonQuant.addActionListener(new Quant() + { + public void actionPerformed(ActionEvent arg0) + { + couleur[] palette; + //importation de l'image + BufferedImage ima = null; + try { + ima = ImageIO.read(new File("img.png")); + } catch (IOException e) { + + e.printStackTrace(); + } + System.out.println("Matrice importée"); + int h; + int w; + w= ima.getWidth(); + h= ima.getHeight(); + int[][][] image = new int[w][h][3]; + System.out.println("L x H :"+w +" "+ h); + //récupération des couleurs, mises dans le tableau image + int i,j,A; + for( j=0 ; j>> 16)&0xFF; + image[i][j][1]=(byte)(A >>> 8)&0xFF; + image[i][j][2]=(byte)(A >>> 0)&0xFF; + } + } + + //passage d'un tableau w*h à un tableau à une ligne + int[][] line= linear(image,w,h); + //création d'un arbre à partir de line + KdTree Arbre1 = InitFromArray(line); + palette = Arbre1.palette(5); + line = CoulToInt(palette); + KdTree Arbre2 = InitFromArray(line); + System.out.println("arbre de la palette créé."); + int[][] image_traitee = quantif(Arbre2, image, w,h, palette); + System.out.println("Image Traitée!!!"); + affichage(image_traitee, palette); + + + + } + public void affichage(int[][] image, couleur[] palette) + { + BufferedImage Invimage; + Invimage = ouputImage.getimage(); + + /*Début du traitement de l'image*/ + int x,y; + int color; + + for(x=0;x (coul.getRVB())[P%3]) + { + if (fils[1]) + { + couleur CurrentBest = filsD.getNN(A); + if (CurrentBest.distance(A) > coul.distance(A)) + { + CurrentBest=coul; + } + if(CurrentBest.distance(A) > Math.abs((coul.getRVB())[P%3] - (A.getRVB())[P%3]) && fils[0]) + { + couleur Alter = filsG.getNN(A); + if(CurrentBest.distance(A) > Alter.distance(A)) + { + CurrentBest=Alter; + } + } + return CurrentBest; + } + else + { + return coul; + } + } + else + { + if (fils[0]) + { + couleur CurrentBest = filsG.getNN(A); + if (CurrentBest.distance(A) > coul.distance(A)) + { + CurrentBest=coul; + } + if(CurrentBest.distance(A) > Math.abs((coul.getRVB())[P%3] - (A.getRVB())[P%3]) && fils[1]) + { + couleur Alter = filsD.getNN(A); + if(CurrentBest.distance(A) > Alter.distance(A)) + { + CurrentBest=Alter; + } + } + return CurrentBest; + } + else + { + return coul; + } + } + } } diff --git a/src/KdTree.java b/src/KdTree.java index c8fd121..c10891b 100644 --- a/src/KdTree.java +++ b/src/KdTree.java @@ -28,6 +28,20 @@ public couleur[] palette(int pow) palette= Racine.palnode(palette); return palette; } + + public int getNearestNeighbors(couleur A, couleur[] pal) + { + couleur Nearest= Racine.getNN(A); + int i; + for(i=0;i Date: Sun, 5 Nov 2017 19:21:10 +0100 Subject: [PATCH 04/10] modifications mineures pour retirer les erreurs --- src/ImageViewer.java | 9 +++------ src/Quant.java | 1 - 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/ImageViewer.java b/src/ImageViewer.java index e3c705d..ba38137 100644 --- a/src/ImageViewer.java +++ b/src/ImageViewer.java @@ -7,7 +7,6 @@ import javax.imageio.ImageIO; import javax.swing.BoxLayout; -import java.awt.Image; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -58,6 +57,8 @@ public ImageViewer () { quant.setLayout(new BoxLayout(quant, BoxLayout.PAGE_AXIS)); quant.add(buttonQuant); // Defines action associated to buttons + + // ########## CLASS QUANT ########## buttonQuant.addActionListener(new Quant() { public void actionPerformed(ActionEvent arg0) @@ -113,12 +114,8 @@ public void affichage(int[][] image, couleur[] palette) /*Début du traitement de l'image*/ int x,y; - int color; - for(x=0;x Date: Sun, 5 Nov 2017 19:59:44 +0100 Subject: [PATCH 05/10] =?UTF-8?q?s=C3=A9paration=20des=20calculs=20de=20im?= =?UTF-8?q?age=20viewer,=20et=20changement=20de=20la=20classe=20quant=20en?= =?UTF-8?q?=20class=20traitement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ImageViewer.java | 267 +++++----------------------- src/{Quant.java => Traitement.java} | 59 +++--- 2 files changed, 67 insertions(+), 259 deletions(-) rename src/{Quant.java => Traitement.java} (81%) diff --git a/src/ImageViewer.java b/src/ImageViewer.java index ba38137..59a702a 100644 --- a/src/ImageViewer.java +++ b/src/ImageViewer.java @@ -59,225 +59,7 @@ public ImageViewer () { // Defines action associated to buttons // ########## CLASS QUANT ########## - buttonQuant.addActionListener(new Quant() - { - public void actionPerformed(ActionEvent arg0) - { - couleur[] palette; - //importation de l'image - BufferedImage ima = null; - try { - ima = ImageIO.read(new File("img.png")); - } catch (IOException e) { - - e.printStackTrace(); - } - System.out.println("Matrice importée"); - int h; - int w; - w= ima.getWidth(); - h= ima.getHeight(); - int[][][] image = new int[w][h][3]; - System.out.println("L x H :"+w +" "+ h); - //récupération des couleurs, mises dans le tableau image - int i,j,A; - for( j=0 ; j>> 16)&0xFF; - image[i][j][1]=(byte)(A >>> 8)&0xFF; - image[i][j][2]=(byte)(A >>> 0)&0xFF; - } - } - - //passage d'un tableau w*h à un tableau à une ligne - int[][] line= linear(image,w,h); - //création d'un arbre à partir de line - KdTree Arbre1 = InitFromArray(line); - palette = Arbre1.palette(5); - line = CoulToInt(palette); - KdTree Arbre2 = InitFromArray(line); - System.out.println("arbre de la palette créé."); - int[][] image_traitee = quantif(Arbre2, image, w,h, palette); - System.out.println("Image Traitée!!!"); - affichage(image_traitee, palette); - - - - } - public void affichage(int[][] image, couleur[] palette) - { - BufferedImage Invimage; - Invimage = ouputImage.getimage(); - - /*Début du traitement de l'image*/ - int x,y; - for(x=0;x>> 16)&0xFF; + image[i][j][1]=(byte)(A >>> 8)&0xFF; + image[i][j][2]=(byte)(A >>> 0)&0xFF; + } + } + Traitement PAL = new Traitement(image, w,h); + int[][][] image_finale= PAL.returnImage(); + BufferedImage Invimage; + Invimage = ouputImage.getimage(); + + int x,y; + for(x=0;x>> 16)&0xFF; - image[i][j][1]=(byte)(A >>> 8)&0xFF; - image[i][j][2]=(byte)(A >>> 0)&0xFF; - } - } + + couleur[] palette; //passage d'un tableau w*h à un tableau à une ligne int[][] line= linear(image,w,h); //création d'un arbre à partir de line @@ -50,13 +26,26 @@ public void actionPerformed(ActionEvent arg0) System.out.println("arbre de la palette créé."); int[][] image_traitee = quantif(Arbre2, image, w,h, palette); System.out.println("Image Traitée!!!"); - - - - + imagefinale = ajoutcoul(image_traitee, palette,w,h); } - + public int[][][] returnImage() + { + return this.imagefinale; + } + public int[][][] ajoutcoul(int[][] image, couleur[] palette, int w, int h) + { + int[][][] imagefinale = new int[w][h][3]; + int i,j; + for (i=0; i Date: Sun, 5 Nov 2017 21:09:47 +0100 Subject: [PATCH 06/10] =?UTF-8?q?Changement=20de=20couleur=20=C3=A0=20Coul?= =?UTF-8?q?eur?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Couleur.java | 73 +++++++++++++++++++++++++++++++++++++------ src/KdNode.java | 38 +++++++++++------------ src/KdTree.java | 18 +++++------ src/Traitement.java | 14 ++++----- src/couleur.java | 76 --------------------------------------------- 5 files changed, 99 insertions(+), 120 deletions(-) delete mode 100644 src/couleur.java diff --git a/src/Couleur.java b/src/Couleur.java index c0e1035..56d1d0a 100644 --- a/src/Couleur.java +++ b/src/Couleur.java @@ -1,21 +1,76 @@ + public class Couleur { - private int[] RVB= {0,0,0}; - public Couleur(int R, int V, int B) + int R,G,B; + int N=1; + // N représente de combien de Couleurs est issue celle ci, + //pour pouvoir faire des moyennes sans consommer trop de mémoire + public Couleur(int Red, int Green, int Blue) { - this.RVB[0]=R; - this.RVB[1]=V; - this.RVB[2]=B; + R=Red; + G=Green; + B=Blue; + } + public Couleur(int[] RVB) + { + // deuxième constructeur pour faciliter la vie + R=RVB[0]; + G=RVB[1]; + B=RVB[2]; + } + + public void initN(int n) + { + N=n; } public int getR() { - return this.RVB[0]; + return R; } - public int getV() + public int getG() { - return this.RVB[1]; + return G; } public int getB() { - return this.RVB[2]; + return B; + } + public int getN() + { + return N; + } + public int[] getRVB() + { + int[] a= {R,G,B}; + return a; + } + + public int distance(Couleur C) + { + //calcule la distance au carré entre 2 Couleurs, sur les 3 axes + int A=(R-C.getR())*(R-C.getR()); + A+=(G-C.getG())*(G-C.getG()); + A+=(B-C.getB())*(B-C.getB()); + return A; + } + + public void printcoul() + { + System.out.printf(" %d , %d , %d \n",R, G, B); + } + + public Couleur moyenne(Couleur C) + { + int[] A=new int[3]; + A[0]=(R*N + C.getR()*C.getN())/(N+C.getN()); + A[1]=(G*N + C.getG()*C.getN())/(N+C.getN()); + A[2]=(B*N + C.getB()*C.getN())/(N+C.getN()); + Couleur Retour=new Couleur(A); + Retour.initN(N+C.getN()); + return Retour; + } + public boolean egal(Couleur C) + { + return(R==C.getR() && G==C.getG() && B==C.getB()); } + } diff --git a/src/KdNode.java b/src/KdNode.java index 504a060..a374007 100644 --- a/src/KdNode.java +++ b/src/KdNode.java @@ -2,18 +2,18 @@ public class KdNode { int P; - couleur coul; + Couleur coul; KdNode filsG; KdNode filsD; boolean[] fils= {false,false}; - public KdNode(couleur C, int p) + public KdNode(Couleur C, int p) { - //Constructeur : P=profondeur du noeud, coul= couleur + //Constructeur : P=profondeur du noeud, coul= Couleur P=p; coul=C; } - public int addpointnode(couleur RVB) + public int addpointnode(Couleur RVB) { //ajoute un point par recursivite et renvoie la profondeur a laquelle il a �t� ajout� if (RVB.getRVB()[P%3]>coul.getRVB()[P%3]) @@ -43,11 +43,11 @@ public int addpointnode(couleur RVB) } } } - public couleur getcoul() + public Couleur getcoul() { return coul; } - public couleur[] palnode(couleur[] pal) + public Couleur[] palnode(Couleur[] pal) { int L= pal.length; if(L==2) @@ -59,13 +59,13 @@ public couleur[] palnode(couleur[] pal) else { int i; - couleur[] A=new couleur[L/2]; - couleur[] B=new couleur[L/2]; + Couleur[] A=new Couleur[L/2]; + Couleur[] B=new Couleur[L/2]; if(fils[0]) {A=filsG.palnode(A);} else { for(i=0;i (coul.getRVB())[P%3]) { if (fils[1]) { - couleur CurrentBest = filsD.getNN(A); + Couleur CurrentBest = filsD.getNN(A); if (CurrentBest.distance(A) > coul.distance(A)) { CurrentBest=coul; } if(CurrentBest.distance(A) > Math.abs((coul.getRVB())[P%3] - (A.getRVB())[P%3]) && fils[0]) { - couleur Alter = filsG.getNN(A); + Couleur Alter = filsG.getNN(A); if(CurrentBest.distance(A) > Alter.distance(A)) { CurrentBest=Alter; @@ -139,14 +139,14 @@ public couleur getNN(couleur A) { if (fils[0]) { - couleur CurrentBest = filsG.getNN(A); + Couleur CurrentBest = filsG.getNN(A); if (CurrentBest.distance(A) > coul.distance(A)) { CurrentBest=coul; } if(CurrentBest.distance(A) > Math.abs((coul.getRVB())[P%3] - (A.getRVB())[P%3]) && fils[1]) { - couleur Alter = filsD.getNN(A); + Couleur Alter = filsD.getNN(A); if(CurrentBest.distance(A) > Alter.distance(A)) { CurrentBest=Alter; diff --git a/src/KdTree.java b/src/KdTree.java index c10891b..155dcad 100644 --- a/src/KdTree.java +++ b/src/KdTree.java @@ -2,18 +2,18 @@ public class KdTree{ private int profondeur=0; - private couleur couleurR; + private Couleur CouleurR; private KdNode Racine; public KdTree (int RVB[]){ - this.couleurR=new couleur(RVB[0], RVB[1], RVB[2]); - this.Racine= new KdNode(couleurR,0); + this.CouleurR=new Couleur(RVB[0], RVB[1], RVB[2]); + this.Racine= new KdNode(CouleurR,0); } public void addpoint(int RVB[]){ - couleur C=new couleur(RVB); + Couleur C=new Couleur(RVB); int p= Racine.addpointnode(C); if(p>profondeur) { @@ -21,17 +21,17 @@ public void addpoint(int RVB[]){ } } - public couleur[] palette(int pow) + public Couleur[] palette(int pow) { - //renvoie une palette de 2**pow couleurs - couleur[] palette= new couleur[(int) Math.pow(2, pow-1)]; + //renvoie une palette de 2**pow Couleurs + Couleur[] palette= new Couleur[(int) Math.pow(2, pow-1)]; palette= Racine.palnode(palette); return palette; } - public int getNearestNeighbors(couleur A, couleur[] pal) + public int getNearestNeighbors(Couleur A, Couleur[] pal) { - couleur Nearest= Racine.getNN(A); + Couleur Nearest= Racine.getNN(A); int i; for(i=0;i Date: Sun, 5 Nov 2017 21:41:38 +0100 Subject: [PATCH 07/10] ajout du bouton charger --- src/ImageViewer.java | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/src/ImageViewer.java b/src/ImageViewer.java index 59a702a..97fe163 100644 --- a/src/ImageViewer.java +++ b/src/ImageViewer.java @@ -3,7 +3,9 @@ import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; +import javax.swing.JTextField; import javax.swing.JButton; +import javax.swing.JFileChooser; import javax.imageio.ImageIO; import javax.swing.BoxLayout; @@ -23,11 +25,13 @@ public class ImageViewer extends JFrame /*implements ActionListener*/ private JButton buttonHisto = new JButton("Histogramme"); private JButton buttonQuant = new JButton("Quantification"); - private JButton buttonInverse = new JButton("Inverse"); private JMenuBar menuBar = new JMenuBar(); private JMenu fileMenu = new JMenu("File"); + + private JMenuItem itemCharge = new JMenuItem("Charger une image"); + private JMenuItem itemClose = new JMenuItem("Close"); @@ -43,6 +47,12 @@ public ImageViewer () { JPanel inverse = new JPanel(); inverse.setLayout(new BoxLayout(inverse, BoxLayout.PAGE_AXIS)); inverse.add(buttonInverse); + + JPanel charger = new JPanel(); + charger.setLayout(new BoxLayout(charger, BoxLayout.PAGE_AXIS)); + charger.add(itemCharge); + // Defines action associated to buttons + itemCharge.addActionListener(new ButtonCharger()); // Defines action associated to buttons buttonAction.addActionListener(new ButtonListener()); @@ -111,7 +121,8 @@ public void actionPerformed(ActionEvent arg0) { System.exit(0); } }); - this.fileMenu.add(itemClose); + this.fileMenu.add(itemClose); + this.fileMenu.add(itemCharge); this.menuBar.add(fileMenu); this.setJMenuBar(menuBar); @@ -124,6 +135,34 @@ public void actionPerformed(ActionEvent arg0) { /** * Class listening to a given button */ + class ButtonCharger implements ActionListener{ + public JTextField status = new JTextField("pas de fichier chargé"); + public JFileChooser choose = new JFileChooser(); + private BufferedImage image = inputImage.getimage(); + + public void actionPerformed(ActionEvent evt){ //ouvrir une boite de dialogue pour choisir un fichier + choose.setApproveButtonText("Charger un fichier"); + choose.showOpenDialog(null); + if (choose.showOpenDialog(null)==JFileChooser.APPROVE_OPTION){ + status.setText(choose.getSelectedFile().getAbsolutePath()); + System.out.println(status.getText()); + + try{ + image = ImageIO.read(new File(status.getText())); + } + catch (IOException e) { + e.printStackTrace(); + } + + + } + inputImage.RefreshImage(image); + ouputImage.RefreshImage(image); + + } + + + } class ButtonListener implements ActionListener{ public void actionPerformed(ActionEvent arg0) { @@ -176,3 +215,4 @@ public void actionPerformed(ActionEvent arg0) } } + From 1932a93fc9d8998c177e999eb938f0bf379f3036 Mon Sep 17 00:00:00 2001 From: Dretse Date: Sun, 5 Nov 2017 21:46:20 +0100 Subject: [PATCH 08/10] ajout du bouton sauver --- src/DisplayedImage.java | 5 ++++- src/ImageViewer.java | 22 +++++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/DisplayedImage.java b/src/DisplayedImage.java index 14a2401..9c2187e 100644 --- a/src/DisplayedImage.java +++ b/src/DisplayedImage.java @@ -30,5 +30,8 @@ public void RefreshImage(BufferedImage newimg){ public void paintComponent(Graphics g){ //g.drawImage(image, 0, 0, this); // draw as much as possible g.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), this); // draw full image - } + } + public BufferedImage getImage() { + return image; + } } \ No newline at end of file diff --git a/src/ImageViewer.java b/src/ImageViewer.java index 97fe163..0f89364 100644 --- a/src/ImageViewer.java +++ b/src/ImageViewer.java @@ -29,6 +29,7 @@ public class ImageViewer extends JFrame /*implements ActionListener*/ private JMenuBar menuBar = new JMenuBar(); private JMenu fileMenu = new JMenu("File"); + private JMenuItem itemSave = new JMenuItem("Save"); private JMenuItem itemCharge = new JMenuItem("Charger une image"); @@ -126,7 +127,8 @@ public void actionPerformed(ActionEvent arg0) { this.menuBar.add(fileMenu); this.setJMenuBar(menuBar); - + itemSave.addActionListener(new ButtonListener2()); + this.fileMenu.add(itemSave); this.setVisible(true); @@ -135,6 +137,24 @@ public void actionPerformed(ActionEvent arg0) { /** * Class listening to a given button */ + class ButtonListener2 implements ActionListener{ + public void actionPerformed(ActionEvent arg0) + { + final JFileChooser fc=new JFileChooser(); + fc.setMultiSelectionEnabled(true); + int returnVal = fc.showSaveDialog(null); + if(returnVal == JFileChooser.APPROVE_OPTION) + { + File saved = fc.getSelectedFile(); + try { + ImageIO.write(ouputImage.getImage(),"png",saved); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + } class ButtonCharger implements ActionListener{ public JTextField status = new JTextField("pas de fichier chargé"); public JFileChooser choose = new JFileChooser(); From 4579a9461c9eec08f1a9195627abdc13cc2ad8a7 Mon Sep 17 00:00:00 2001 From: Fanouille Date: Wed, 15 Nov 2017 14:11:07 +0100 Subject: [PATCH 09/10] Update KdNode.java ajout fonction removepointnode --- src/KdNode.java | 84 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/src/KdNode.java b/src/KdNode.java index a374007..0f92ff9 100644 --- a/src/KdNode.java +++ b/src/KdNode.java @@ -85,6 +85,90 @@ public Couleur[] palnode(Couleur[] pal) } } + + public int getNombreFils(){ + if(this.filsG != null && this.filsD != null){ + return 2; + } + else if (this.filsG != null || this.filsD != null){ + return 1; + } + else{ + return 0; + } + } + + public KdNode getFilsG(){ + return this.filsG; + } + + public KdNode getFilsD(){ + return this.filsD; + } + + public void replaceNode(KdNode point){ //remplace this par point + this.coul = point.getcoul(); + this.filsG = point.getFilsG(); + this.filsD = point.getFilsD(); + } + + + public ArrayList getPointFromTree(KdNode point, ArrayList liste){ //donne tous les points en dessous dans l'arbre + if (point != null){ + liste.add(point); + if(point.getFilsG()!=null){ + getPointFromTree(point.getFilsG(),liste); + } + else if(point.getFilsD()!=null){ + getPointFromTree(point.getFilsD(),liste); + } + } + return liste; + } + + public int getDirection(){ + return this.P % 3; //0:R;1:V;2:B + } + + public int removePointNode(KdNode point){ // enleve point et reconstruit arbre, renvoie profondeur + int direction = this.getDirection(); + int new_p = 0; + switch (this.coul.comparaison(direction, point.getcoul())){ + case 1: //fils de gauche + return (this.filsG.removePointNode(point)); + + case -1: //fils de droite + return (this.filsD.removePointNode(point)); + + default: //0 + if (this.coul.egal(point.getcoul())){//c'est le point à supprimer + //son fils de droite va prendre sa place, tous les fils de gauche reconstruits + point.replaceNode(point.getFilsD());//il emmene tous ses fils avec + + ArrayList liste = new ArrayList(); + getPointFromTree(point.getFilsG(), liste); + for (int i=0;i Date: Wed, 15 Nov 2017 14:12:23 +0100 Subject: [PATCH 10/10] Update KdTree.java --- src/KdTree.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/KdTree.java b/src/KdTree.java index 155dcad..7a1102d 100644 --- a/src/KdTree.java +++ b/src/KdTree.java @@ -10,6 +10,10 @@ public KdTree (int RVB[]){ this.Racine= new KdNode(CouleurR,0); } + public static int getProf(){ + return profondeur; + } + public void addpoint(int RVB[]){ @@ -21,6 +25,17 @@ public void addpoint(int RVB[]){ } } + + public void removePoint(int RVB[],int XY[]){ + Couleur couleur = new Couleur(RVB); + KdNode point = new KdNode(couleur,0); + int p = this.Racine.removePointNode(point); + + if (p