Statistics
| Revision:

gvsig-raster / org.gvsig.raster / branches / org.gvsig.raster_dataaccess_refactoring / org.gvsig.raster.lib / org.gvsig.raster.lib.api / src / main / java / org / gvsig / fmap / dal / coverage / store / props / Transparency.java @ 2303

History | View | Annotate | Download (6.79 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.List;
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
import org.gvsig.tools.dispose.Disposable;
31

    
32

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