Statistics
| Revision:

svn-gvsig-desktop / trunk / libraries / libRaster / src / org / gvsig / raster / dataset / IBuffer.java @ 12522

History | View | Annotate | Download (14 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.dataset;
20

    
21
import java.awt.image.DataBuffer;
22

    
23
import org.gvsig.raster.buffer.IBand;
24
import org.gvsig.raster.hierarchy.IHistogramable;
25

    
26
/**
27
 * Interfaz que contiene las operaciones que debe soportar un buffer de datos.
28
 * @author Nacho Brodin (nachobrodin@gmail.com)
29
 *
30
 */
31
public interface IBuffer extends IHistogramable{
32
    public final static int TYPE_UNDEFINED = DataBuffer.TYPE_UNDEFINED;
33
    public final static int TYPE_BYTE = DataBuffer.TYPE_BYTE;
34
    public final static int TYPE_SHORT = DataBuffer.TYPE_SHORT;
35
    public final static int TYPE_USHORT = DataBuffer.TYPE_USHORT;
36
    public final static int TYPE_INT = DataBuffer.TYPE_INT;
37
    public final static int TYPE_FLOAT = DataBuffer.TYPE_FLOAT;
38
    public final static int TYPE_DOUBLE = DataBuffer.TYPE_DOUBLE;
39
    public final static int TYPE_IMAGE = -1;
40
    
41
    /**
42
     * Ancho del raster
43
     * @return Entero con el ancho del raster
44
     */
45
    public int getWidth();
46

    
47
    /**
48
     * Alto del raster
49
     * @return Entero con el alto del raster
50
     */
51
    public int getHeight();
52

    
53
    /**
54
     * N?mero de bandas
55
     * @return Entero con el n?mero de bandas
56
     */
57
    public int getBandCount();
58

    
59
    /**
60
     * Obtiene el tipo de dato. Los tipos de dato posibles est?n definidos en IRaster.
61
     * @return tipo de datos
62
     */
63
        public int getDataType();
64
        
65
        /**
66
         * Asigna el tipo de dato. Los tipos de dato posibles est?n definidos en IRaster.
67
         * @param dataType Tipo de dato del buffer
68
         */
69
        public void setDataType(int dataType);
70
        
71
    /**
72
     * Obtiene el valor NoData del buffer
73
     * @return Valor NoData del buffer
74
     */
75
    public double getNoDataValue();
76
    
77
    /**
78
     * Obtiene el valor NoData del buffer
79
     * @return Valor NoData del buffer
80
     */
81
    public byte getByteNoDataValue();
82
    
83
    /**
84
     * Obtiene el valor NoData del buffer
85
     * @return Valor NoData del buffer
86
     */
87
    public short getShortNoDataValue();
88
    
89
    /**
90
     * Obtiene el valor NoData del buffer
91
     * @return Valor NoData del buffer
92
     */
93
    public int getIntNoDataValue();
94
    
95
    /**
96
     * Obtiene el valor NoData del buffer
97
     * @return Valor NoData del buffer
98
     */
99
    public float getFloatNoDataValue();
100
    
101
    /**
102
     * Obtiene true si el pixel pasado por par?metro cae dentro de los l?mites
103
     * del rater y false si cae fuera. 
104
     * @param x Posici?n X del pixel a averiguar
105
     * @param y Posici?n Y del pixel a averiguar
106
     * @return true si est? dentro y false si cae fuera.
107
     */
108
    public boolean isInside(int x, int y);
109
    
110
    /**
111
     * Asigna el valor NoData 
112
     * @param nd Valor NoData
113
     */
114
    public void setNoDataValue(double nd);
115
    
116
    /**
117
     * Reserva de memoria para el rasterbuf solo en la banda solicitada
118
     * @param dataType Tipo de dato
119
     * @param width Ancho
120
     * @param height Alto
121
     * @param band N?mero de banda
122
     * @param orig
123
     */
124
    public void mallocOneBand(int dataType, int width, int height, int band);
125
    
126
    /**
127
     * Informa de si el buffer tiene la capacidad de intercambio de bandas o
128
     * no la tiene.
129
     * @return Devuelve true si tiene la capacidad de intercambio de bandas y 
130
     * false si no la tiene.
131
     */
132
    public boolean isBandSwitchable();
133
    
134
        /**
135
         * Libera el buffer de memoria
136
         */
137
        public void free();
138

    
139
    //***********************************************
140
    //Obtiene una linea de datos de todas las bandas
141
    
142
        /**
143
         * Obtiene una l?nea de datos con todas las bandas para buffers con tipo
144
         * de dato byte.
145
         * @param line N?mero de l?nea del buffer a recuperar
146
         * @return Array bidimensional conteniendo la l?nea de datos donde la primera
147
         * dimensi?n representa las bandas y la segunda la posici?n en la l?nea
148
         */    
149
    public byte[][] getLineByte(int line);
150

    
151
    /**
152
         * Obtiene una l?nea de datos con todas las bandas para buffers con tipo
153
         * de dato short.
154
         * @param line N?mero de l?nea del buffer a recuperar
155
         * @return Array bidimensional conteniendo la l?nea de datos donde la primera
156
         * dimensi?n representa las bandas y la segunda la posici?n en la l?nea
157
         */  
158
    public short[][] getLineShort(int line);
159

    
160
    /**
161
         * Obtiene una l?nea de datos con todas las bandas para buffers con tipo
162
         * de dato int.
163
         * @param line N?mero de l?nea del buffer a recuperar
164
         * @return Array bidimensional conteniendo la l?nea de datos donde la primera
165
         * dimensi?n representa las bandas y la segunda la posici?n en la l?nea
166
         */  
167
    public int[][] getLineInt(int line);
168
        
169
    /**
170
         * Obtiene una l?nea de datos con todas las bandas para buffers con tipo
171
         * de dato float.
172
         * @param line N?mero de l?nea del buffer a recuperar
173
         * @return Array bidimensional conteniendo la l?nea de datos donde la primera
174
         * dimensi?n representa las bandas y la segunda la posici?n en la l?nea
175
         */  
176
    public float[][] getLineFloat(int line);
177
    
178
    /**
179
         * Obtiene una l?nea de datos con todas las bandas para buffers con tipo
180
         * de dato double.
181
         * @param line N?mero de l?nea del buffer a recuperar
182
         * @return Array bidimensional conteniendo la l?nea de datos donde la primera
183
         * dimensi?n representa las bandas y la segunda la posici?n en la l?nea
184
         */  
185
    public double[][] getLineDouble(int line);
186
    
187
    //***********************************************
188
    //Obtiene una linea de datos de una banda
189
    
190
    /**
191
     * Obtiene una l?nea de datos de la banda solicitada para buffers con tipo
192
         * de dato byte.
193
     * @param line N?mero de l?nea del buffer a recuperar
194
     * @param band N?mero de banda a recuperar
195
     * @return Array unidimensional que representa la l?nea de datos.
196
     */
197
    public byte[] getLineFromBandByte(int line, int band);
198

    
199
    /**
200
     * Obtiene una l?nea de datos de la banda solicitada para buffers con tipo
201
         * de dato short.
202
     * @param line N?mero de l?nea del buffer a recuperar
203
     * @param band N?mero de banda a recuperar
204
     * @return Array unidimensional que representa la l?nea de datos.
205
     */
206
    public short[] getLineFromBandShort(int line, int band);
207

    
208
    /**
209
     * Obtiene una l?nea de datos de la banda solicitada para buffers con tipo
210
         * de dato int.
211
     * @param line N?mero de l?nea del buffer a recuperar
212
     * @param band N?mero de banda a recuperar
213
     * @return Array unidimensional que representa la l?nea de datos.
214
     */
215
    public int[] getLineFromBandInt(int line, int band);
216
        
217
    /**
218
     * Obtiene una l?nea de datos de la banda solicitada para buffers con tipo
219
         * de dato float.
220
     * @param line N?mero de l?nea del buffer a recuperar
221
     * @param band N?mero de banda a recuperar
222
     * @return Array unidimensional que representa la l?nea de datos.
223
     */
224
    public float[] getLineFromBandFloat(int line, int band);
225
    
226
    /**
227
     * Obtiene una l?nea de datos de la banda solicitada para buffers con tipo
228
         * de dato double.
229
     * @param line N?mero de l?nea del buffer a recuperar
230
     * @param band N?mero de banda a recuperar
231
     * @return Array unidimensional que representa la l?nea de datos.
232
     */
233
    public double[] getLineFromBandDouble(int line, int band);
234
    
235
    //***********************************************    
236
    //Obtiene un elemento de la matriz
237
    
238
    public byte getElemByte(int line, int col, int band);
239
    
240
    public short getElemShort(int line, int col, int band);
241
    
242
    public int getElemInt(int line, int col, int band);
243
    
244
    public float getElemFloat(int line, int col, int band);
245
    
246
    public double getElemDouble(int line, int col, int band);
247
    
248
    //***********************************************
249
    //Copia un elemento de todas la bandas en el buffer pasado por par?metro
250
    
251
    public void getElemByte(int line, int col, byte[] data);
252
    
253
    public void getElemShort(int line, int col, short[] data);
254
    
255
    public void getElemInt(int line, int col, int[] data);
256
    
257
    public void getElemFloat(int line, int col, float[] data);
258
    
259
    public void getElemDouble(int line, int col, double[] data);
260
    
261
    //***********************************************
262
    
263
    /**
264
     * Sustituye una banda completa copiando los datos de la que se pasa por par?metro
265
     * @param nBand N?mero de banda a sustituir
266
     * @param banda a copiar
267
     */
268
    public void copyBand(int nBand, IBand band);
269
    
270
    /**
271
     * Sustituye una banda completa que se asigna por referencia
272
     * @param nBand N?mero de banda a sustituir
273
     * @param banda a asignar por referencia
274
     */
275
    public void assignBand(int nBand, IBand band);
276
    
277
    /**
278
     * Obtiene una banda completa del raster
279
     * @param nBand N?mero de banda 
280
     */
281
    public IBand getBand(int nBand);
282
    
283
    /**
284
     * Obtiene una banda completa del raster
285
     * @param nBand N?mero de banda 
286
     */
287
    public IBuffer getBandBuffer(int nBand);
288
        
289
    //***********************************************
290
    //Asigna una linea de datos a una banda
291
    
292
    public void setLineInBandByte(byte[] data, int line, int band);
293

    
294
    public void setLineInBandShort(short[] data, int line, int band);
295

    
296
    public void setLineInBandInt(int[] data, int line, int band);
297
        
298
    public void setLineInBandFloat(float[] data, int line, int band);
299
    
300
    public void setLineInBandDouble(double[] data, int line, int band);
301
    
302
    //***********************************************
303
    //Asigna una linea de datos a todas las bandas
304
    
305
    public void setLineByte(byte[][] data, int line);
306

    
307
    public void setLineShort(short[][] data, int line);
308

    
309
    public void setLineInt(int[][] data, int line);
310
        
311
    public void setLineFloat(float[][] data, int line);
312
    
313
    public void setLineDouble(double[][] data, int line);
314
    
315
    //**********************************************    
316
    //Asigna un elemento de la matriz
317
    
318
    public void setElem(int line, int col, int band, byte data);
319
    
320
    public void setElem(int line, int col, int band, short data);
321
    
322
    public void setElem(int line, int col, int band, int data);
323
    
324
    public void setElem(int line, int col, int band, float data);
325
    
326
    public void setElem(int line, int col, int band, double data);
327
    
328
    //***********************************************
329
    //Asigna un elemento a todas la bandas en el buffer pasado por par?metro
330
    
331
    public void setElemByte(int line, int col, byte[] data);
332
    
333
    public void setElemShort(int line, int col, short[] data);
334
    
335
    public void setElemInt(int line, int col, int[] data);
336

    
337
    public void setElemFloat(int line, int col, float[] data);
338
    
339
    public void setElemDouble(int line, int col, double[] data);
340
    
341
    //***********************************************
342
    //Inicializa una banda a un valor pasado por par?metro
343
    
344
    public void assign(int band, byte value);
345
    
346
    public void assign(int band, short value);
347
    
348
    public void assign(int band, int value);
349

    
350
    public void assign(int band, float value);
351
    
352
    public void assign(int band, double value);
353
    
354
    //***********************************************
355
   
356
    /**
357
     * Crea un buffer banda inicializado con el valor pasado por par?metro. Las dimensiones
358
     * corresponden a las del buffer existente.
359
     * @param defaultValue Valor con el que se inicializa la banda creada
360
     */
361
    public IBand createBand(byte defaultValue);
362
    
363
    /**
364
     * Replica la banda de una posici?n sobre otra. Si la banda de destino no existe
365
     * se crea nueva. Si la posici?n de la banda de destino est? intercalada entre bandas 
366
     * que ya existen las otras se desplazan hacia abajo, NO se machacan los datos de ninguna.
367
     * Los datos se replican por referencia por lo que al modificar la banda original las
368
     * del resto quedar?n afectadas.   
369
     * @param orig. Posici?n de la banda de origen. 
370
     * @param dest. Posici?n de la banda destino
371
     */   
372
    public void replicateBand(int orig, int dest);
373
    
374
    /**
375
     * Clona el buffer actual y devuelve el clone
376
     * @return Buffer clonado
377
     */
378
    public IBuffer cloneBuffer();
379
    
380
    /**
381
     * Intercambia dos bandas.
382
     * @param band1 Banda 1 a intercambiar 
383
     * @param band2 Banda 2 a intercambiar
384
     */
385
    public void interchangeBands(int band1, int band2);
386
    
387
    /**
388
     * Intercambia la posici?n de las bandas. La nueva posici?n viene dada por el vector
389
     * pasado por par?metro. Cada posici?n del vector es una banda del buffer y el contenido de 
390
     * esa posici?n es la banda que se dibujar? sobre ese buffer.
391
         * <P> 
392
     * Por ejemplo un array con los valores:
393
     * [2, 0, 1] significa que la banda que ocupa ahora la posici?n 2 pasar? a ocupar la 0, la que 
394
     * tiene la posici?n 0 pasa a ocupar la 1 y la que tiene la posici?n 1 pasa a ocupar la 2.
395
     * </P>
396
     * @param bands  Array con la nueva distribuci?n de bandas
397
     */
398
    public void switchBands(int[] bands);
399
    
400
    /**
401
     * Asigna el valor de no valido.
402
     * @param value
403
     */
404
    public void setNotValidValue(double value);
405
    
406
    /**
407
     * Obtiene el valor de no valido.
408
     * @return value
409
     */
410
    public double getNotValidValue();
411
    
412
    /**
413
     * Asigna una banda al valor especificado como no valido. Esta banda es com?n para todas las bandas
414
     * del buffer, es decir se asigna por referencia. No tiene el mismo resultado que asignar una banda
415
     * a un valor fijo.
416
     * @param iBand N?mero de banda
417
     */
418
    public void assignBandToNotValid(int iBand);
419
}