Statistics
| Revision:

gvsig-raster / org.gvsig.raster.tools / trunk / org.gvsig.raster.tools / org.gvsig.raster.tools.app.basic / src / main / java / org / gvsig / raster / tools / app / basic / tool / filter / regionalpha / RegionAlphaFilter.java @ 2125

History | View | Annotate | Download (5.86 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.raster.tools.app.basic.tool.filter.regionalpha;
23

    
24
import java.util.ArrayList;
25

    
26
import org.gvsig.fmap.dal.coverage.RasterLocator;
27
import org.gvsig.fmap.dal.coverage.dataset.Buffer;
28
import org.gvsig.fmap.dal.coverage.datastruct.GridExtent;
29
import org.gvsig.fmap.dal.coverage.datastruct.Params;
30
import org.gvsig.fmap.dal.coverage.grid.filter.BaseRasterFilter;
31
import org.gvsig.fmap.dal.coverage.store.RasterDataStore;
32
import org.gvsig.fmap.mapcontext.layers.FLayer;
33
import org.gvsig.raster.fmap.layers.FLyrRaster;
34
import org.gvsig.raster.roi.ROI;
35

    
36
/**
37
 * 
38
 * @version 15/01/2008
39
 * @author BorSanZa - Borja S?nchez Zamorano (borja.sanchez@iver.es)
40
 */
41
public class RegionAlphaFilter extends BaseRasterFilter {
42
        public static String[]     names           = new String[] { "regionalpha" };
43
        private RegionAlphaUI      regionAlphaUI   = null;
44
        private ArrayList<ROI>     rois            = null;
45
        private Buffer             rasterAlpha     = null;
46
        private int                alpha           = 255;
47
        protected boolean          inverse         = false;
48

    
49
        /* Variables que hacen falta en el process */
50
        private GridExtent         gridExtent      = null;
51
        private GridExtent         windowExtent    = null;
52
        private RasterDataStore    dataset         = null;
53
        private double             cellsize        = 0D;
54
        
55
        /**
56
         * Constructor
57
         */
58
        public RegionAlphaFilter() {
59
                super();
60
                setName(names[0]);
61
        }
62

    
63
        /*
64
         * (non-Javadoc)
65
         * @see org.gvsig.raster.grid.filter.RasterFilter#getGroup()
66
         */
67
        public String getGroup() {
68
                return "mascaras";
69
        }
70

    
71
        /*
72
         * (non-Javadoc)
73
         * @see org.gvsig.raster.grid.filter.RasterFilter#getNames()
74
         */
75
        public String[] getNames() {
76
                return names;
77
        }
78

    
79
        /*
80
         * (non-Javadoc)
81
         * @see org.gvsig.raster.grid.filter.RasterFilter#getResult(java.lang.String)
82
         */
83
        public Object getResult(String name) {
84
                if (name.equals("alphaBand"))
85
                        if(rois == null || rois.size() == 0)
86
                                return null;
87
                        else
88
                                return rasterAlpha;
89
                
90
                if (!name.equals("raster"))
91
                        return null;
92

    
93
                if (!exec)
94
                        return (Object) this.raster;
95

    
96
                return (Object) this.rasterResult;
97
        }
98

    
99
        /*
100
         * (non-Javadoc)
101
         * @see org.gvsig.raster.grid.filter.RasterFilter#getUIParams(java.lang.String)
102
         */
103
        public Params getUIParams(String nameFilter) {
104
                Params params = RasterLocator.getManager().createParams(
105
                                "Panel", getRegionAlphaUI(), -1, null);
106
                params.setParam("FilterName", nameFilter, -1, null);
107
                params.setParam("Alpha",
108
                                new Integer(alpha),
109
                                Params.SLIDER,
110
                                new String[]{ "0", "255", "0", "1", "25" }); //min, max, valor defecto, intervalo peque?o, intervalo grande;
111

    
112
                return params;
113
        }
114
        
115
        private RegionAlphaUI getRegionAlphaUI() {
116
                if (regionAlphaUI == null) {
117
                        regionAlphaUI = new RegionAlphaUI();
118
                        FLayer raster = (FLayer) getEnv().get("initRaster");
119
                        regionAlphaUI.setRois(rois);
120
                        if(raster instanceof FLyrRaster)
121
                                regionAlphaUI.setLayer((FLyrRaster)raster);
122
                }
123
                return regionAlphaUI;
124
        }
125

    
126
        /*
127
         * (non-Javadoc)
128
         * @see org.gvsig.raster.grid.filter.RasterFilter#pre()
129
         */
130
        @SuppressWarnings("unchecked")
131
        public void pre() {
132
                exec = true;
133
                raster = rasterResult;
134
                raster = (Buffer) params.get("raster");
135
                
136
                Boolean inverseBoolean = (Boolean) params.get("inverse");
137
                if (inverseBoolean != null)
138
                        inverse = inverseBoolean.booleanValue();
139
                
140
                rois = (ArrayList<ROI>) params.get("rois");
141
                if (rois == null)
142
                        rois = new ArrayList<ROI>();
143
                height = raster.getHeight();
144
                width = raster.getWidth();
145
                
146
                alpha = ((Integer) params.get("alpha")).intValue();
147
                
148
                gridExtent = (GridExtent) environment.get("GridExtent");
149
                windowExtent = (GridExtent) environment.get("WindowExtent");
150
                dataset = (RasterDataStore) environment.get("MultiRasterDataset");
151
                rasterAlpha = RasterLocator.getManager().createBuffer(Buffer.TYPE_BYTE, raster.getWidth(), raster.getHeight(), 1, true);
152
                cellsize = dataset.getCellSize();
153
        }
154

    
155
        /*
156
         * (non-Javadoc)
157
         * @see org.gvsig.raster.grid.filter.RasterFilter#post()
158
         */
159
        public void post() {
160
        }
161

    
162
        /*
163
         * (non-Javadoc)
164
         * @see org.gvsig.raster.grid.filter.RasterFilter#process(int, int)
165
         */
166
        public void process(int x, int y) {
167
                if ((windowExtent == null) || (gridExtent == null))
168
                        return;
169
                double wcX = windowExtent.minX() + ((((double) x) * windowExtent.width()) / ((double) raster.getWidth()));
170
                double wcY = windowExtent.minY() + ((((double) (raster.getHeight() - (y))) * windowExtent.height()) / ((double) raster.getHeight()));
171
                
172
                for (int i = 0; i < rois.size(); i++) {
173
                        if (((ROI) rois.get(i)).isInside(wcX, wcY, cellsize, cellsize)) {
174
                                if (inverse)
175
                                        rasterAlpha.setElem(y, x, 0, (byte) 255);
176
                                else
177
                                        rasterAlpha.setElem(y, x, 0, (byte) (255 - alpha));
178
                                return;
179
                        }
180
                }
181
                if (inverse)
182
                        rasterAlpha.setElem(y, x, 0, (byte) (255 - alpha));
183
                else
184
                        rasterAlpha.setElem(y, x, 0, (byte) 255);
185
        }
186

    
187
        public int getInRasterDataType() {return 0;}
188
        public int getOutRasterDataType() {return 0;}
189
}