source: ether_eccad/trunk/ECCAD_INTERFACE/WEB-INF/src/org/medias/eccad/metier/generationRaster/GenerateurLegendeImg.java @ 68

Last change on this file since 68 was 68, checked in by cbipsl, 14 years ago

commit v1 eccad

  • Property svn:executable set to *
File size: 4.3 KB
Line 
1package org.medias.eccad.metier.generationRaster;
2
3import java.awt.AlphaComposite;
4import java.awt.Color;
5import java.awt.Font;
6import java.awt.Graphics;
7import java.awt.Graphics2D;
8import java.awt.image.BufferedImage;
9import java.io.FileOutputStream;
10import java.io.OutputStream;
11import java.util.ArrayList;
12import java.util.List;
13
14import javax.imageio.ImageIO;
15
16
17import org.medias.eccad.helpers.LoggerPerso;
18import org.medias.eccad.metier.generationRaster.colorMap.ColorMapping;
19import org.medias.eccad.modele.ColorTab;
20import org.medias.eccad.modele.Legende;
21
22public class GenerateurLegendeImg implements GenerateurLegendRaster {
23        private Graphics2D image;
24        private BufferedImage buff_image;
25        private int longueur;
26        private int hauteur;
27        private int nbr_case;
28        private int larg_image;
29        private int haut_image;
30        private List<Color> tab_unique;
31       
32        private List<String> valeur;
33       
34        public GenerateurLegendeImg() {
35                larg_image = 200;
36                haut_image = 360;
37        }
38       
39        public void enregistreLegend(String fichier) {
40                try
41                {
42                        OutputStream fos = new FileOutputStream(fichier);
43                        ImageIO.write(buff_image, "png", fos);
44                }
45                catch(Exception e)
46                {
47                        e.printStackTrace();
48                }
49                LoggerPerso.log(GenerateurLegendeImg.class, LoggerPerso.DEBUG, "fin write");
50
51        }
52
53        public void genereLegendVertical(ColorMapping colormap, Legende texte_legende, String infoSup) {
54                ColorTab colortab = colormap.getColorTable();
55                init(colortab, texte_legende.getLegend());
56               
57                initcolor();
58                genereCarre();
59                genereText(texte_legende.getType());
60                genereCadre();
61                genereInfoSup(infoSup);
62        }
63
64        private void init(ColorTab colortab, List<String> texte_legende) {
65                valeur = texte_legende;
66                tab_unique = getTabCouleurUnique(colortab);
67                nbr_case = tab_unique.size();
68                longueur = 15;
69                //hauteur  = haut_image/nbr_case;
70                hauteur = 20;
71                haut_image = hauteur*nbr_case+3 + 15;
72                //larg_image = calculer le nombre de chiffre
73                buff_image = new BufferedImage(larg_image, haut_image, BufferedImage.TYPE_INT_ARGB);
74                image = buff_image.createGraphics();
75        }
76       
77        private void initcolor() {
78                image.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0f ));
79                image.setColor(new Color(255,255,255));
80                image.fillRect(0, 0, larg_image, haut_image);
81                image.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f ));
82        }
83       
84        private void genereInfoSup(String info) {
85                image.setColor(new Color (0,0,0));
86                image.drawString(info, 1 , haut_image-1);
87                LoggerPerso.log(GenerateurLegendeImg.class, LoggerPerso.DEBUG, info);
88        }
89       
90        private void genereCadre() {
91                image.setColor(new Color(0, 0, 0));
92                image.drawRect(0, 0, longueur + 1, hauteur*nbr_case+1);
93        }
94       
95        private void genereCarre() {
96                for (int i=0; i<nbr_case; i++) {
97                        image.setColor(tab_unique.get(nbr_case - 1 - i));
98                        image.fillRect(1, i*hauteur + 1, longueur, hauteur);
99                }
100        }
101       
102        private void genereText(int type_legend) {
103                image.setColor(new Color(0,0,0));
104                image.setFont(new Font("Serif", Font.PLAIN, 12));
105                if (nbr_case > valeur.size()+1)
106                        return;
107               
108                if (type_legend == Legende.TYPE_VALUE)
109                        for (int i=0; i<nbr_case -1; i++) {
110                                image.drawString(valeur.get(i), longueur + 6, hauteur*(nbr_case - i - 1)+6);
111                        }
112                else
113                        for (int i=1; i<=valeur.size(); i++) {
114                                image.drawString(valeur.get(i-1), longueur + 6, hauteur*(nbr_case - i + 1) - (hauteur/2) + 6);
115                        }
116        }
117       
118        private List<Color> getTabCouleurUnique(ColorTab colortab) {
119                List<Color> list_unique = new ArrayList<Color>();
120                List<String> valeur_unique = new ArrayList<String>();
121               
122                if (valeur.size() > 0) {
123                        list_unique.add(colortab.getColor(0));
124                        valeur_unique.add(valeur.get(0));
125                }
126               
127                for (int i=0; i<colortab.getLength(); i++) {
128                        if (!list_unique.get(list_unique.size()-1).equals(colortab.getColor(i))) {
129                                list_unique.add(colortab.getColor(i));
130                                if (i < valeur.size())
131                                        valeur_unique.add(valeur.get(i));
132                        }
133                        else {
134                                if (i < valeur.size()) {
135                                        valeur_unique.remove(valeur_unique.size()-1);
136                                        valeur_unique.add(valeur.get(i));
137                                }
138                        }
139                }
140                valeur = valeur_unique;
141                return list_unique;
142        }
143
144        public int getLarg_image() {
145                return larg_image;
146        }
147
148        public void setLarg_image(int larg_image) {
149                this.larg_image = larg_image;
150        }
151
152        public int getHaut_image() {
153                return haut_image;
154        }
155
156        public void setHaut_image(int haut_image) {
157                this.haut_image = haut_image;
158        }
159
160        public List<String> getValeur() {
161                return valeur;
162        }
163
164        public void setValeur(List<String> valeur) {
165                this.valeur = valeur;
166        }
167
168}
Note: See TracBrowser for help on using the repository browser.