svn-gvsig-desktop / trunk / libraries / libRaster / src / org / gvsig / raster / grid / filter / enhancement / LinearStretchEnhancementFloatFilter.java @ 19494
History | View | Annotate | Download (3.22 KB)
1 | 19338 | nbrodin | /* 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 org.gvsig.raster.dataset.IBuffer; |
||
22 | 19363 | nbrodin | import org.gvsig.raster.grid.filter.enhancement.LinearStretchParams.Stretch; |
23 | 19338 | nbrodin | /**
|
24 | * Filtro de realce lineal para tipos de datos float. El realce es aplicado por intervalos.
|
||
25 | * Para cada pixel se obtiene en que intervalo se encuentra y se aplica la scala y offset
|
||
26 | * calculados para ese intervalo.
|
||
27 | *
|
||
28 | * @version 11/05/2007
|
||
29 | * @author Nacho Brodin (nachobrodin@gmail.com)
|
||
30 | */
|
||
31 | public class LinearStretchEnhancementFloatFilter extends LinearStretchEnhancementFilter { |
||
32 | |||
33 | /*
|
||
34 | * (non-Javadoc)
|
||
35 | * @see org.gvsig.raster.grid.filter.enhancement.LinearEnhancementFilter#process(int, int)
|
||
36 | */
|
||
37 | public void process(int col, int line) { |
||
38 | for (int iBand = 0; iBand < raster.getBandCount(); iBand++) { |
||
39 | float p = raster.getElemFloat(line, col, iBand);
|
||
40 | if (renderBands[iBand] < 0) { |
||
41 | rasterResult.setElem(line, col, iBand, (byte) p);
|
||
42 | continue;
|
||
43 | } |
||
44 | 19395 | nbrodin | |
45 | 19363 | nbrodin | processValue(p, stretchs.gray, col, line, iBand); |
46 | switch (iBand) {
|
||
47 | 19395 | nbrodin | case 0: processValue(p, scaleOffsetList[0], col, line, iBand); |
48 | 19363 | nbrodin | break;
|
49 | 19395 | nbrodin | case 1: processValue(p, scaleOffsetList[1], col, line, iBand); |
50 | 19363 | nbrodin | break;
|
51 | 19395 | nbrodin | case 2: processValue(p, scaleOffsetList[2], col, line, iBand); |
52 | 19363 | nbrodin | break;
|
53 | 19338 | nbrodin | } |
54 | 19363 | nbrodin | } |
55 | } |
||
56 | 19338 | nbrodin | |
57 | 19363 | nbrodin | /**
|
58 | * Procesa un dato del raster aplicandole el factor de escala y desplazamiento que
|
||
59 | * necesita.
|
||
60 | * @param p Valor del punto
|
||
61 | * @param data Estructura de datos con los valores de escala y desplazamiento
|
||
62 | * @param col Columna del valor dentro del raster
|
||
63 | * @param line L?nea del valor dentro del raster
|
||
64 | * @param iBand N?mero de banda del valor dentro del raster
|
||
65 | * @return true si ha podido ser procesado y false si no lo hace
|
||
66 | */
|
||
67 | private void processValue(float p, Stretch data, int col, int line, int iBand) { |
||
68 | if(data.scale != null) { |
||
69 | 19395 | nbrodin | if (p > data.maxValue)
|
70 | p = (float) data.maxValue;
|
||
71 | else if (p < data.minValue) |
||
72 | p = (float) data.minValue;
|
||
73 | |||
74 | 19363 | nbrodin | for (int i = 0; i < data.scale.length; i++) { |
75 | 19494 | nbrodin | if(p >= data.stretchIn[i] && p <= data.stretchIn[i + 1]) { |
76 | 19492 | nbrodin | p = (float)( (((double)p) - data.stretchIn[i]) * data.scale[i] + data.offset[i]); |
77 | 19494 | nbrodin | break;
|
78 | } |
||
79 | 19363 | nbrodin | } |
80 | 19395 | nbrodin | rasterResult.setElem(line, col, iBand,(byte)(((byte) p) & 0xff) ); |
81 | |||
82 | 19338 | nbrodin | } |
83 | } |
||
84 | 19363 | nbrodin | |
85 | 19338 | nbrodin | /*
|
86 | * (non-Javadoc)
|
||
87 | * @see org.gvsig.raster.grid.filter.enhancement.LinearEnhancementFilter#getInRasterDataType()
|
||
88 | */
|
||
89 | public int getInRasterDataType() { |
||
90 | return IBuffer.TYPE_FLOAT;
|
||
91 | } |
||
92 | } |