Statistics
| Revision:

gvsig-raster / org.gvsig.raster / trunk / org.gvsig.raster / org.gvsig.raster.lib / org.gvsig.raster.lib.api / src / main / java / org / gvsig / fmap / dal / coverage / store / props / Transparency.java @ 969

History | View | Annotate | Download (7.07 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 */
22
package org.gvsig.fmap.dal.coverage.store.props;
23

    
24
import java.util.ArrayList;
25

    
26
import org.gvsig.fmap.dal.coverage.dataset.Buffer;
27
import org.gvsig.fmap.dal.coverage.datastruct.NoData;
28
import org.gvsig.fmap.dal.coverage.datastruct.TransparencyRange;
29
import org.gvsig.fmap.dal.coverage.util.PropertyListener;
30

    
31

    
32
/**
33
 * <P>Interfaz que representa la transparencia.</P>
34
 * 
35
 * <P>
36
 * El estado de transparencia de un raster puede verse modificado desde los siguientes sitios:
37
 * <UL>
38
 * <LI>Color con transparencia definido en los metadatos de la imagen. Caracteristica de PNG.</LI>
39
 * <LI>Una banda del raster definida como banda de transparencia. PNGs, IMGs o TIFFs 
40
 * pueden tener bandas de transparencia</LI>
41
 * <LI>Tablas de color con valores de transparencia. GIF y PNG pueden tener tablas 
42
 * que definan entradas de color con transparencia</LI>
43
 * <LI>Informaci?n de transparencia en la cabecera raster. Tipicamente valores NO_DATA suelen 
44
 * ser interpretados como transparentes en la visualizaci?n.</LI>
45
 * <LI>Modificaci?n hecha por el usuario. En la visualizaci?n un usuario puede necesitar
46
 * asignar valores o rangos de valores como transparentes.</LI>
47
 * </UL> 
48
 * </P>
49
 * <P>
50
 * Estas transparencias quedan representadas por cinco tipo b?sicos:
51
 * <UL>
52
 * <LI><b>Transparencia por rangos. </b>Esta se aplicar? antes que ninguna y siempre sobre los valores
53
 * base del raster.</LI>
54
 * <LI><b>Banda de transparencia en un raster. </b></LI>
55
 * <LI>M?scara de transparencia</LI>
56
 * <LI>Opacidad</LI>
57
 * <LI>Zona de recorte</LI>
58
 * </UL>
59
 * </P>
60
 * 
61
 * @author Nacho Brodin (nachobrodin@gmail.com)
62
 */
63
public interface Transparency {
64
        /**
65
         * Asigna un listener a la lista que ser? informado cuando cambie una
66
         * propiedad visual en la renderizaci?n.
67
         * @param listener VisualPropertyListener
68
         */
69
        public void addPropertyListener(PropertyListener listener);
70
        
71
        /**
72
         * Asigna la informaci?n de si existe o no banda de transparencia cuando este
73
         * objeto va asociado a un dataset. Si tiene este tipo de banda en cada
74
         * dibujado se cargar? la informaci?n de m?scara de transparencia en el la
75
         * variable mask.
76
         * @param true si existe banda de transparencia y false si no lo es.
77
         */
78
        public void setTransparencyBand(int alphaBandNumber);
79
        
80
        /**
81
         * Mezcla un objeto Transparency con el actual
82
         * @param ts objeto TransparencyStatus
83
         */
84
        public Transparency merge(Transparency transp);
85
        
86
        /**
87
         * Mezcla el alpha actual con el que nos pasan por parametro y se asigna
88
         * directamente a destino
89
         * @param buffer
90
         * @param dst
91
         */
92
        public void mergeBuffer(Buffer buffer, Buffer dst);
93
        
94
        /**
95
         * Obtiene el grado de opacidad de todo el raster
96
         * @return valor del grado de opacidad.
97
         */
98
        public int getOpacity();
99
        
100
        /**
101
         * Asigna el grado de opacidad de todo el raster
102
         * @param opacity valor del grado de opacidad.
103
         */
104
        public void setOpacity(int opacity);
105
        
106
        /**
107
         * Obtiene la m?scara asociada
108
         * @return M?scara de transparencia
109
         */
110
        public Buffer getAlphaBand();
111
        
112
        /**
113
         * Obtiene la banda de transpareci si existe o -1 si no existe.
114
         * @return n?mero de banda de transparencia o -1 si no existe.
115
         */
116
        public int getAlphaBandNumber();
117
        
118
        /**
119
         * Obtiene los rangos de pixels que son transparentes en el raster.
120
         * @return Rangos de transparencias a aplicar
121
         */
122
        public ArrayList<TransparencyRange> getTransparencyRange();
123
        
124
        /**
125
         * Asigna la lista de rangos de transparencia
126
         * @param ranges
127
         */
128
        public void setTransparencyRangeList(ArrayList<TransparencyRange> ranges);
129
        
130
        /**
131
         * Obtiene el valor noData 
132
         * @return
133
         */
134
        public NoData getNoData();
135
        
136
        /**
137
         * Obtiene el ?rea de datos
138
         * @return M?scara de transparencia
139
         */
140
        public Buffer getDataBuffer();
141
        
142
        /**
143
         * Obtiene la informaci?n de si existe o no banda de transparencia cuando este
144
         * objeto va asociado a un dataset. Si tiene este tipo de banda en cada
145
         * dibujado se cargar? la informaci?n de m?scara de transparencia en el la
146
         * variable mask.
147
         * @return true si existe banda de transparencia y false si no lo es.
148
         */
149
        public boolean existAlphaBand();
150
        
151
        /**
152
         * Asigna el buffer con la m?scara
153
         * @param b
154
         */
155
        public void setAlphaBand(Buffer b);
156
        
157
        /**
158
         * Asigna el ?rea de datos
159
         * @param b
160
         */
161
        public void setDataBuffer(Buffer b);
162
        
163
        /**
164
         * Asigna el valor noData
165
         * @param noData
166
         */
167
        public void setNoData(NoData noData);
168
        
169
        /**
170
         * Inicializa la lista de rangos de transparencia.
171
         */
172
        public void clearListOfTransparencyRange();
173
        
174
        /**
175
         * Asigna un rango de pixels que son transparentes en el raster.
176
         * @param range
177
         */
178
        public void setTransparencyRange(TransparencyRange range);
179
        
180
        /**
181
         * Pone a null los buffers de datos y pasa el garbage collector para liberar la memoria.
182
         * Despu?s de renderizar es conveniente hacer esto porque el objeto Transparency asociado a
183
         * un dataset no se destruye hasta que no se cierra este. Esto hace que esta memoria este
184
         * siempre ocupada.
185
         */
186
        public void free() ;
187
        
188
        /**
189
         * Comprueba si hay criterios para la aplicaci?n de transparencia y la activa si es
190
         * as? sino se desactiva. Los criterios son:
191
         * <P>
192
         * Que haya una mascara de transparencia.
193
         * </P><P>
194
         * Que exista un buffer de datos para la aplicaci?n de nodata
195
         * </P><P>
196
         * Que hayan reglas sobre la aplicaci?n de transparencia.
197
         * </P><P>
198
         * Que la opacidad sea distita de 255 (completamente opaco). 
199
         * </P>
200
         */
201
        public void activeTransparency();
202
        
203
        
204
        /**
205
         * Obtiene el flag de transparencia activa o desactivada.
206
         * @return true la transparencia est? activa y false desactiva
207
         */
208
        public boolean isTransparencyActive();
209
        
210
        /**
211
         * Asigna el flag de transparencia activa o desactivada.
212
         * @param transparencyActive true activa la transparencia false la desactiva
213
         */
214
        public void setTransparencyActive(boolean transparencyActive);
215
        
216
        /**
217
         * Aplica las reglas de transparencia a un pixel RGB y devuelve el valor de ese
218
         * mismo pixel con la transparencia aplicada. Primero procesar? los rangos. Si
219
         * el pixel est? en alguno directamente lo pone transparente y lo devuelve, sino
220
         * comprueba si existe banda de transparencia y si es as? la aplica.
221
         * @param rgb
222
         * @param line
223
         * @param col
224
         * @return
225
         */
226
        public int processRGB(int r, int g, int b, int line, int col);
227
        
228
        /**
229
         * Clones this object
230
         * @return
231
         */
232
        public Transparency cloneTransparency();
233
}