Statistics
| Revision:

root / trunk / libraries / libRaster / src / org / gvsig / raster / grid / filter / enhancement / BrightnessContrastListManager.java @ 12122

History | View | Annotate | Download (7.89 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 */
19
package org.gvsig.raster.grid.filter.enhancement;
20

    
21
import java.util.ArrayList;
22

    
23
import org.gvsig.raster.dataset.IBuffer;
24
import org.gvsig.raster.dataset.Params;
25
import org.gvsig.raster.grid.filter.IRasterFilterListManager;
26
import org.gvsig.raster.grid.filter.RasterFilter;
27
import org.gvsig.raster.grid.filter.RasterFilterList;
28
import org.gvsig.raster.grid.filter.RasterFilterListManager;
29
import org.gvsig.raster.util.extensionPoints.ExtensionPoints;
30
import org.gvsig.raster.util.extensionPoints.ExtensionPointsSingleton;
31
/**
32
 * Gestor de los filtros de brillo y contraste. Contiene m?todos para a?adir
33
 * ambos tipos de filtro en la pila.
34
 * 
35
 * @author Miguel ?ngel Querol Carratal? (miguelangel.querol@iver.es)
36
 */
37
public class BrightnessContrastListManager implements IRasterFilterListManager {
38
        protected RasterFilterList                        filterList                                = null;
39
        private RasterFilterListManager        filterListManager        = null;
40

    
41
        /**
42
         * Constructor. Asigna la lista de filtros y el manager.
43
         * @param filterListManager
44
         */
45
        public BrightnessContrastListManager(RasterFilterListManager filterListManager) {
46
                this.filterListManager = filterListManager;
47
                this.filterList = filterListManager.getFilterList();
48
        }
49

    
50
        /**
51
         * Registrar los manager en los puntos de extension
52
         */
53
        public static void register() {
54
                ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
55
                extensionPoints.add("RasterFilter", "BrightnessContrast", BrightnessContrastListManager.class);
56
        }
57

    
58
        /**
59
         * A?ade un filtro de brillo a la pila de filtros.
60
         * @param incrBrillo valor de brillo a aplicar
61
         * @param removeAll true si se desea eliminar cualquier filtro de brillo que
62
         * hubiera en la pila antes y false si se acumula sobre lo que haya
63
         */
64
        public void addBrightnessFilter(int incrBrillo, int insertionMode) {
65

    
66
                if (insertionMode == RasterFilterList.ADD_END_AND_DELETE && filterList.isActive(BrightnessFilter.names[0])) {
67
                        filterList.remove(BrightnessFilter.names[0]);
68
                        filterListManager.controlTypes();
69
                }
70

    
71
                RasterFilter filtro = null;
72

    
73
                switch (filterList.getDataTypeInFilter(BrightnessFilter.names[0], insertionMode)) {
74
                        case IBuffer.TYPE_BYTE:
75
                                filtro = new BrightnessByteFilter();
76
                                break;
77
                        case IBuffer.TYPE_USHORT:
78
                        case IBuffer.TYPE_SHORT:
79
                                filtro = new BrightnessShortFilter();
80
                                break;
81
                        case IBuffer.TYPE_FLOAT:
82
                                filtro = new BrightnessFloatFilter();
83
                                break;
84
                        case IBuffer.TYPE_DOUBLE:
85
                                filtro = new BrightnessDoubleFilter();
86
                                break;
87
                        case IBuffer.TYPE_INT:
88
                                filtro = new BrightnessIntegerFilter();
89
                                break;
90
                }
91

    
92
                // Cuando el filtro esta creado, tomamos los valores y lo a?adimos a la pila
93

    
94
                if (filtro != null) {
95
                        filtro.addParam("incrBrillo", new Integer(incrBrillo));
96
                        if (insertionMode == RasterFilterList.MODIFY_LAST) {
97
                                if (filterList.isActive(BrightnessFilter.names[0])) {
98
                                        filterList.replace(filtro, BrightnessFilter.names[0]);
99
                                        return;
100
                                }
101
                        }
102
                        filterList.add(filtro);
103
                }
104
        }
105

    
106
        /**
107
         * A?ade un filtro de contraste a la pila de filtros.
108
         * @param incrBrillo
109
         */
110
        public void addContrastFilter(int incrContraste, int insertionMode) {
111
                if (insertionMode == RasterFilterList.ADD_END_AND_DELETE && filterList.isActive(ContrastFilter.names[0])) {
112
                        filterList.remove(ContrastFilter.names[0]);
113
                        filterListManager.controlTypes();
114
                }
115

    
116
                RasterFilter filtro = null;
117

    
118
                switch (filterList.getDataTypeInFilter(ContrastFilter.names[0], insertionMode)) {
119
                        case IBuffer.TYPE_BYTE:
120
                                filtro = new ContrastByteFilter();
121
                                break;
122
                        case IBuffer.TYPE_USHORT:
123
                        case IBuffer.TYPE_SHORT:
124
                                filtro = new ContrastShortFilter();
125
                                break;
126
                        case IBuffer.TYPE_FLOAT:
127
                                filtro = new ContrastFloatFilter();
128
                                break;
129
                        case IBuffer.TYPE_DOUBLE:
130
                                filtro = new ContrastDoubleFilter();
131
                                break;
132
                        case IBuffer.TYPE_INT:
133
                                filtro = new ContrastIntegerFilter();
134
                                break;
135
                }
136

    
137
                // Cuando el filtro esta creado, tomamos los valores y lo a?adimos a la pila
138

    
139
                if (filtro != null) {
140
                        filtro.addParam("incrContraste", new Integer(incrContraste));
141
                        if (insertionMode == RasterFilterList.MODIFY_LAST) {
142
                                if (filterList.isActive(ContrastFilter.names[0])) {
143
                                        filterList.replace(filtro, ContrastFilter.names[0]);
144
                                        return;
145
                                }
146
                        }
147
                        filterList.add(filtro);
148
                }
149
        }
150

    
151
        /*
152
         * (non-Javadoc)
153
         * @see org.gvsig.raster.grid.filter.IRasterFilterListManager#getStringsFromFilterList(java.util.ArrayList, org.gvsig.raster.grid.filter.RasterFilter)
154
         */
155
        public ArrayList getStringsFromFilterList(ArrayList filterList, RasterFilter rf) {
156

    
157
                if ((rf instanceof BrightnessFilter) || (rf instanceof ContrastFilter)) {
158
                        filterList.add("filter.brightCont.active=true");
159
                }
160

    
161
                if (rf instanceof BrightnessFilter) {
162
                        BrightnessFilter bright = (BrightnessFilter) rf;
163
                        filterList.add("filter.brightness.incrBrillo=" + bright.incrBrillo);
164
                } else if (rf instanceof ContrastFilter) {
165
                        ContrastFilter contrast = (ContrastFilter) rf;
166
                        filterList.add("filter.contrast.incrContraste=" + contrast.incrContraste);
167
                }
168

    
169
                return filterList;
170
        }
171

    
172
        /*
173
         * (non-Javadoc)
174
         * @see org.gvsig.raster.grid.filter.IRasterFilterListManager#createFilterListFromStrings(java.util.ArrayList, java.lang.String, int)
175
         */
176
        public int createFilterListFromStrings(ArrayList filters, String fil, int filteri) {
177
                if ((fil.startsWith("filter.brightCont.active")) && (RasterFilterListManager.getValue(fil).equals("true"))) {
178

    
179
                        int incrBrillo = 0;
180
                        int incrContraste = 0;
181
                        filters.remove(0);
182

    
183
                        for (int prop = 0; prop < filters.size(); prop++) {
184
                                String elem = (String) filters.get(prop);
185
                                if (elem.startsWith("filter.brightness.incrBrillo")) {
186
                                        incrBrillo = Integer.parseInt(RasterFilterListManager.getValue(elem));
187
                                        filters.remove(prop);
188
                                        prop--;
189
                                }
190

    
191
                                if (elem.startsWith("filter.contrast.incrContraste")) {
192
                                        incrContraste = Integer.parseInt(RasterFilterListManager.getValue(elem));
193
                                        filters.remove(prop);
194
                                        prop--;
195
                                }
196
                        }
197
                        addBrightnessFilter(incrBrillo, RasterFilterList.ADD_END);
198
                        addContrastFilter(incrContraste, RasterFilterList.ADD_END);
199
                }
200
                return filteri;
201
        }
202

    
203
        /*
204
         * (non-Javadoc)
205
         * @see org.gvsig.raster.grid.filter.IRasterFilterListManager#getRasterFilterList()
206
         */
207
        public ArrayList getRasterFilterList() {
208
                ArrayList filters = new ArrayList();
209
                filters.add(BrightnessFilter.class);
210
                filters.add(ContrastFilter.class);
211
                return filters;
212
        }
213

    
214
        /*
215
         * (non-Javadoc)
216
         * @see org.gvsig.raster.grid.filter.IRasterFilterListManager#addFilter(java.lang.Class, org.gvsig.raster.dataset.Params)
217
         */
218
        public void addFilter(Class classFilter, Params params) {
219
                if (classFilter.equals(ContrastFilter.class)) {
220
                        int contrast = 0;
221
                        for (int i = 0; i < params.getNumParams(); i++) {
222
                                if (params.getParam(i).id.equals("Contrast"))
223
                                        contrast = new Integer(params.getParam(i).defaultValue).intValue();
224
                        }
225
                        addContrastFilter(contrast, RasterFilterList.ADD_END);
226
                }
227
                if (classFilter.equals(BrightnessFilter.class)) {
228
                        int brightness = 0;
229
                        for (int i = 0; i < params.getNumParams(); i++) {
230
                                if (params.getParam(i).id.equals("Brightness"))
231
                                        brightness = new Integer(params.getParam(i).defaultValue).intValue();
232
                        }
233
                        addBrightnessFilter(brightness, RasterFilterList.ADD_END);
234
                }
235
        }
236
}