Statistics
| Revision:

root / trunk / libraries / libRaster / src-test / org / gvsig / raster / dataset / TestIOMemoryRasterDriver.java @ 11074

History | View | Annotate | Download (8.79 KB)

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

    
27
import junit.framework.TestCase;
28

    
29
import org.gvsig.raster.RasterLibrary;
30
import org.gvsig.raster.buffer.BufferFactory;
31
import org.gvsig.raster.buffer.RasterBuffer;
32
import org.gvsig.raster.dataset.io.MemoryRasterDriverParam;
33

    
34
/**
35
 * 
36
 * @author Nacho Brodin (nachobrodin@gmail.com)
37
 *
38
 */
39
public class TestIOMemoryRasterDriver extends TestCase {
40

    
41
        private String baseDir = "./test-images/";
42
        private String path = baseDir + "miniRaster25x24.tif";        
43
        
44
        private RasterDataset f = null;
45
        private RasterDataset f1 = null;
46
        private BufferFactory ds = null;
47
        private BandList bandList = null;
48
        
49
        public void start() {
50
                this.setUp();
51
                this.testStack();
52
        }
53
        
54
        static {
55
                RasterLibrary.wakeUp();
56
        }
57
        
58
        public void setUp() {
59
                System.err.println("TestIOMemoryRasterDriver running...");
60
                try {
61
                        f1 = RasterDataset.open(null, path);
62
                } catch (NotSupportedExtensionException e1) {
63
                        e1.printStackTrace();
64
                } catch (RasterDriverException e1) {
65
                        e1.printStackTrace();
66
                }
67
                int[] drawableBands = {0, 1, 2};
68
                ds = new BufferFactory(f1);
69
                ds.addDrawableBands(drawableBands);
70
                ds.setAreaOfInterest(0, 0, 25, 24);
71
                IBuffer buf = ds.getRasterBuf();
72
                
73
                try {
74
                        MemoryRasterDriverParam param = new MemoryRasterDriverParam(buf, ds.getGeoRasterMultiFile().getExtent());
75
                        f = RasterDataset.open(null, param);
76
                } catch (NotSupportedExtensionException e1) {
77
                        e1.printStackTrace();
78
                } catch (RasterDriverException e1) {
79
                        e1.printStackTrace();
80
                }
81
                
82
                bandList = new BandList();
83
                for(int i = 0; i < buf.getBandCount();i++){
84
                        try{
85
                                Band band = new Band(f.getFName(), i, f.getDataType());
86
                                band.setPositionToDrawInBuffer(i);
87
                                bandList.addBand(band, i);
88
                        }catch(BandFoundInListException ex){
89
                                //No a?adimos la banda
90
                        }
91
                }
92
        }
93
        
94
        public void testStack(){
95
                //**************************************
96
                //Prueba getWindowRaster(int x, int y, int w, int h, BandList bandList, IBuffer rasterBuf)
97
                
98
                //COMPLETA
99
                IBuffer buffer = RasterBuffer.getBuffer(f.getDataType(), 25, 24, 3, true, null);
100
                f.getWindowRaster(0, 0, 25, 24, bandList, buffer);
101
                dataTest1(buffer);
102
                
103
                //ZOOM
104
                buffer = RasterBuffer.getBuffer(f.getDataType(), 2, 2, 3, true, null);
105
                f.getWindowRaster(10, 10, 2, 2, bandList, buffer);
106
                dataTest2(buffer);
107
                
108
                //**************************************                
109
                //Prueba de getWindowRaster(double minX, double minY, double maxX, double maxY, int bufWidth, int bufHeight, BandList bandList, IBuffer rasterBuf, boolean adjustToExtent)
110
                
111
                //EXTENT COMPLETO
112
                buffer = RasterBuffer.getBuffer(f.getDataType(), 25, 24, 3, true, null);
113
                f.getWindowRaster(f.getExtent().minX(),
114
                                                        f.getExtent().minY(),
115
                                                        f.getExtent().maxX(),
116
                                                        f.getExtent().maxY(),
117
                                                        25, 24, bandList, buffer, true);
118
                dataTest1(buffer);
119
                        
120
                //ZOOM + subsampling
121
                buffer = RasterBuffer.getBuffer(f.getDataType(), 8, 8, 3, true, null);
122
                f.getWindowRaster(        Math.ceil(f.getExtent().minX()),
123
                                                        Math.ceil(f.getExtent().minY()),
124
                                                        Math.floor(f.getExtent().maxX()),
125
                                                        Math.floor(f.getExtent().maxY()),
126
                                                        8, 8, bandList, buffer, true);
127
                dataTest3(buffer);
128
                
129
                //ZOOM + supersampling
130
                buffer = RasterBuffer.getBuffer(f.getDataType(), 20, 20, 3, true, null);
131
                f.getWindowRaster(        Math.ceil(f.getExtent().minX()),
132
                                                        Math.ceil(f.getExtent().minY()),
133
                                                        Math.floor(f.getExtent().minX() + 10),
134
                                                        Math.floor(f.getExtent().minY() + 10),
135
                                                        20, 20, bandList, buffer, true);
136
                
137
                
138
                //**************************************
139
                //Prueba de getWindowRaster(double x, double y, double w, double h, BandList bandList, IBuffer rasterBuf, boolean adjustToExtent)
140
                
141
                //COMPLETA
142
                buffer = RasterBuffer.getBuffer(f.getDataType(), 25, 24, 3, true, null);
143
                f.getWindowRaster(        f.getExtent().minX(),
144
                                                        f.getExtent().maxY(),
145
                                                        f.getExtent().width(),
146
                                                        f.getExtent().height(),
147
                                                        bandList, buffer, true);
148
                dataTest1(buffer);
149
                
150
                //**************************************
151
        }
152
        
153
        
154
        private void dataTest1(IBuffer raster){
155
                //Upper Left
156
                assertEquals((int)(raster.getElemByte(0, 0, 0) & 0xff), 14);
157
                assertEquals((int)(raster.getElemByte(0, 0, 1) & 0xff), 14);
158
                assertEquals((int)(raster.getElemByte(0, 0, 2) & 0xff), 0);
159
                //Upper Right
160
                assertEquals((int)(raster.getElemByte(0, 24, 0) & 0xff), 68);
161
                assertEquals((int)(raster.getElemByte(0, 24, 1) & 0xff), 90);
162
                assertEquals((int)(raster.getElemByte(0, 24, 2) & 0xff), 52);
163
                //Lower Left
164
                assertEquals((int)(raster.getElemByte(23, 0, 0) & 0xff), 129);
165
                assertEquals((int)(raster.getElemByte(23, 0, 1) & 0xff), 122);
166
                assertEquals((int)(raster.getElemByte(23, 0, 2) & 0xff), 106);
167
                //Lower Right
168
                assertEquals((int)(raster.getElemByte(23, 24, 0) & 0xff), 145);
169
                assertEquals((int)(raster.getElemByte(23, 24, 1) & 0xff), 140);
170
                assertEquals((int)(raster.getElemByte(23, 24, 2) & 0xff), 134);
171
                
172
                assertEquals((int)(raster.getElemByte(6, 6, 0) & 0xff), 21);
173
                assertEquals((int)(raster.getElemByte(6, 6, 1) & 0xff), 37);
174
                assertEquals((int)(raster.getElemByte(6, 6, 2) & 0xff), 10);
175
                
176
                assertEquals((int)(raster.getElemByte(6, 23, 0) & 0xff), 91);
177
                assertEquals((int)(raster.getElemByte(6, 23, 1) & 0xff), 105);
178
                assertEquals((int)(raster.getElemByte(6, 23, 2) & 0xff), 92);
179
                
180
                assertEquals((int)(raster.getElemByte(23, 6, 0) & 0xff), 153);
181
                assertEquals((int)(raster.getElemByte(23, 6, 1) & 0xff), 133);
182
                assertEquals((int)(raster.getElemByte(23, 6, 2) & 0xff), 122);
183
                
184
                assertEquals((int)(raster.getElemByte(9, 14, 0) & 0xff), 63);
185
                assertEquals((int)(raster.getElemByte(9, 14, 1) & 0xff), 69);
186
                assertEquals((int)(raster.getElemByte(9, 14, 2) & 0xff), 55);
187
                
188
                assertEquals((int)(raster.getElemByte(6, 13, 0) & 0xff), 70);
189
                assertEquals((int)(raster.getElemByte(6, 13, 1) & 0xff), 78);
190
                assertEquals((int)(raster.getElemByte(6, 13, 2) & 0xff), 55);
191
        }
192
        
193
        private void dataTest2(IBuffer raster){
194
                //Upper Left
195
                assertEquals((int)(raster.getElemByte(0, 0, 0) & 0xff), 80);
196
                assertEquals((int)(raster.getElemByte(0, 0, 1) & 0xff), 96);
197
                assertEquals((int)(raster.getElemByte(0, 0, 2) & 0xff), 60);
198
                //Upper Right
199
                assertEquals((int)(raster.getElemByte(0, 1, 0) & 0xff), 80);
200
                assertEquals((int)(raster.getElemByte(0, 1, 1) & 0xff), 96);
201
                assertEquals((int)(raster.getElemByte(0, 1, 2) & 0xff), 60);
202
                //Lower Left
203
                assertEquals((int)(raster.getElemByte(1, 0, 0) & 0xff), 82);
204
                assertEquals((int)(raster.getElemByte(1, 0, 1) & 0xff), 97);
205
                assertEquals((int)(raster.getElemByte(1, 0, 2) & 0xff), 68);
206
                //Lower Right
207
                assertEquals((int)(raster.getElemByte(1, 1, 0) & 0xff), 82);
208
                assertEquals((int)(raster.getElemByte(1, 1, 1) & 0xff), 97);
209
                assertEquals((int)(raster.getElemByte(1, 1, 2) & 0xff), 68);
210
        }
211
        
212
        private void dataTest3(IBuffer raster){
213
                //Upper Left
214
                assertEquals((int)(raster.getElemByte(0, 0, 0) & 0xff), 14);
215
                assertEquals((int)(raster.getElemByte(0, 0, 1) & 0xff), 14);
216
                assertEquals((int)(raster.getElemByte(0, 0, 2) & 0xff), 0);
217
                //Upper Right
218
                assertEquals((int)(raster.getElemByte(0, 7, 0) & 0xff), 75);
219
                assertEquals((int)(raster.getElemByte(0, 7, 1) & 0xff), 84);
220
                assertEquals((int)(raster.getElemByte(0, 7, 2) & 0xff), 57);
221
                //Lower Left
222
                assertEquals((int)(raster.getElemByte(7, 0, 0) & 0xff), 97);
223
                assertEquals((int)(raster.getElemByte(7, 0, 1) & 0xff), 106);
224
                assertEquals((int)(raster.getElemByte(7, 0, 2) & 0xff), 87);
225
                //Lower Right
226
                assertEquals((int)(raster.getElemByte(7, 7, 0) & 0xff), 215);
227
                assertEquals((int)(raster.getElemByte(7, 7, 1) & 0xff), 215);
228
                assertEquals((int)(raster.getElemByte(7, 7, 2) & 0xff), 215);
229
        }
230
        
231
        /**
232
         * Imprime todos los pixels de la fuente de datos en RGB
233
         */
234
        private void print(IBuffer raster){
235
                for(int line = 0; line < raster.getHeight(); line++){
236
                        for(int col = 0; col < raster.getWidth(); col++)
237
                                System.out.print("(" + (int)(raster.getElemByte(line, col, 0) & 0xff) + " " + (int)(raster.getElemByte(line, col, 1) & 0xff) + " " + (int)(raster.getElemByte(line, col, 2) & 0xff) + ")");
238
                        System.out.println();
239
                }
240
        }
241
}