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 @ 2308

History | View | Annotate | Download (6.52 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
         * Obtiene el grado de opacidad de todo el raster
83
         * @return valor del grado de opacidad.
84
         */
85
        public int getOpacity();
86
        
87
        /**
88
         * Asigna el grado de opacidad de todo el raster
89
         * @param opacity valor del grado de opacidad.
90
         */
91
        public void setOpacity(int opacity);
92
        
93
        /**
94
         * Obtiene la banda de transpareci si existe o -1 si no existe.
95
         * @return n?mero de banda de transparencia o -1 si no existe.
96
         */
97
        public int getAlphaBandNumber();
98
        
99
        /**
100
         * Obtiene los rangos de pixels que son transparentes en el raster.
101
         * @return Rangos de transparencias a aplicar
102
         */
103
        public List<TransparencyRange> getTransparencyRange();
104
        
105
        /**
106
         * Asigna la lista de rangos de transparencia
107
         * @param ranges
108
         */
109
        public void setTransparencyRangeList(List<TransparencyRange> ranges);
110
        
111
        /**
112
         * Obtiene el valor noData 
113
         * @return
114
         */
115
        public NoData getNoData();
116
        
117
        /**
118
         * Obtiene el ?rea de datos
119
         * @return M?scara de transparencia
120
         */
121
        public Buffer getDataBuffer();
122
        
123
        /**
124
         * Obtiene la informaci?n de si existe o no banda de transparencia cuando este
125
         * objeto va asociado a un dataset. Si tiene este tipo de banda en cada
126
         * dibujado se cargar? la informaci?n de m?scara de transparencia en el la
127
         * variable mask.
128
         * @return true si existe banda de transparencia y false si no lo es.
129
         */
130
        public boolean existAlphaBand();
131
        
132
        /**
133
         * Asigna el ?rea de datos
134
         * @param b
135
         */
136
        public void setDataBuffer(Buffer b);
137
        
138
        /**
139
         * Asigna el valor noData
140
         * @param noData
141
         */
142
        public void setNoData(NoData noData);
143
        
144
        /**
145
         * Inicializa la lista de rangos de transparencia.
146
         */
147
        public void clearListOfTransparencyRange();
148
        
149
        /**
150
         * Asigna un rango de pixels que son transparentes en el raster.
151
         * @param range
152
         */
153
        public void setTransparencyRange(TransparencyRange range);
154
        
155
        /**
156
         * Comprueba si hay criterios para la aplicaci?n de transparencia y la activa si es
157
         * as? sino se desactiva. Los criterios son:
158
         * <P>
159
         * Que haya una mascara de transparencia.
160
         * </P><P>
161
         * Que exista un buffer de datos para la aplicaci?n de nodata
162
         * </P><P>
163
         * Que hayan reglas sobre la aplicaci?n de transparencia.
164
         * </P><P>
165
         * Que la opacidad sea distita de 255 (completamente opaco). 
166
         * </P>
167
         */
168
        public void activeTransparency();
169
        
170
        
171
        /**
172
         * Obtiene el flag de transparencia activa o desactivada.
173
         * @return true la transparencia est? activa y false desactiva
174
         */
175
        public boolean isTransparencyActive();
176
        
177
        /**
178
         * Asigna el flag de transparencia activa o desactivada.
179
         * @param transparencyActive true activa la transparencia false la desactiva
180
         */
181
        public void setTransparencyActive(boolean transparencyActive);
182
        
183
        /**
184
         * Aplica las reglas de transparencia a un pixel RGB y devuelve el valor de ese
185
         * mismo pixel con la transparencia aplicada. Primero procesar? los rangos. Si
186
         * el pixel est? en alguno directamente lo pone transparente y lo devuelve, sino
187
         * comprueba si existe banda de transparencia y si es as? la aplica.
188
         * @param rgb
189
         * @param line
190
         * @param col
191
         * @return
192
         */
193
        public int processRGB(int r, int g, int b, int line, int col, Buffer buf);
194
        
195
        /**
196
         * Sets the band color interpretation 
197
         * @param colorInterpretation
198
         */
199
        public void setColorInterpretation(ColorInterpretation colorInterpretation);
200
        
201
        /**
202
         * Gets the color interpretation
203
         * @return
204
         */
205
        public ColorInterpretation getColorInterpretation();
206
        
207
        /**
208
         * Clones this object
209
         * @return
210
         */
211
        public Transparency cloneTransparency();
212
}