Statistics
| Revision:

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

History | View | Annotate | Download (13.9 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.util.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
    //Obtiene una linea de datos de todas las bandas
136
    
137
        /**
138
         * Obtiene una l?nea de datos con todas las bandas para buffers con tipo
139
         * de dato byte.
140
         * @param line N?mero de l?nea del buffer a recuperar
141
         * @return Array bidimensional conteniendo la l?nea de datos donde la primera
142
         * dimensi?n representa las bandas y la segunda la posici?n en la l?nea
143
         */    
144
    public byte[][] getLineByte(int line);
145

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

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

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

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

    
289
    public void setLineInBandShort(short[] data, int line, int band);
290

    
291
    public void setLineInBandInt(int[] data, int line, int band);
292
        
293
    public void setLineInBandFloat(float[] data, int line, int band);
294
    
295
    public void setLineInBandDouble(double[] data, int line, int band);
296
    
297
    //***********************************************
298
    //Asigna una linea de datos a todas las bandas
299
    
300
    public void setLineByte(byte[][] data, int line);
301

    
302
    public void setLineShort(short[][] data, int line);
303

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

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

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