1 | package org.medias.eccad.metier.generationRaster; |
---|
2 | |
---|
3 | import java.awt.AlphaComposite; |
---|
4 | import java.awt.Color; |
---|
5 | import java.awt.Font; |
---|
6 | import java.awt.Graphics; |
---|
7 | import java.awt.Graphics2D; |
---|
8 | import java.awt.image.BufferedImage; |
---|
9 | import java.io.FileOutputStream; |
---|
10 | import java.io.OutputStream; |
---|
11 | import java.util.ArrayList; |
---|
12 | import java.util.List; |
---|
13 | |
---|
14 | import javax.imageio.ImageIO; |
---|
15 | |
---|
16 | |
---|
17 | import org.medias.eccad.helpers.LoggerPerso; |
---|
18 | import org.medias.eccad.metier.generationRaster.colorMap.ColorMapping; |
---|
19 | import org.medias.eccad.modele.ColorTab; |
---|
20 | import org.medias.eccad.modele.Legende; |
---|
21 | |
---|
22 | public 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 | } |
---|