svn-gvsig-desktop / branches / org.gvsig.desktop-2018a / org.gvsig.desktop.library / org.gvsig.raster / org.gvsig.raster.lib / org.gvsig.raster.lib.buffer.impl / src / main / java / org / gvsig / raster / lib / buffer / impl / SimpleBandTileManager.java @ 43803
History | View | Annotate | Download (5.81 KB)
1 |
package org.gvsig.raster.lib.buffer.impl; |
---|---|
2 |
|
3 |
import java.io.File; |
4 |
import java.io.IOException; |
5 |
import java.io.RandomAccessFile; |
6 |
import java.nio.Buffer; |
7 |
import java.nio.ByteBuffer; |
8 |
import java.nio.DoubleBuffer; |
9 |
import java.nio.FloatBuffer; |
10 |
import java.nio.IntBuffer; |
11 |
import java.nio.ShortBuffer; |
12 |
|
13 |
import org.gvsig.raster.lib.buffer.api.Band; |
14 |
import org.gvsig.raster.lib.buffer.api.BandInfo; |
15 |
import org.gvsig.raster.lib.buffer.api.BandTileManager; |
16 |
import org.gvsig.raster.lib.buffer.api.BufferLocator; |
17 |
import org.gvsig.raster.lib.buffer.api.BufferManager; |
18 |
import org.gvsig.raster.lib.buffer.api.TileStruct; |
19 |
import org.gvsig.tools.dispose.impl.AbstractDisposable; |
20 |
import org.gvsig.tools.exception.BaseException; |
21 |
|
22 |
|
23 |
/**
|
24 |
* @author fdiaz
|
25 |
*
|
26 |
*/
|
27 |
@Deprecated
|
28 |
public class SimpleBandTileManager extends AbstractDisposable implements BandTileManager { |
29 |
|
30 |
private RandomAccessFile raf; |
31 |
private int rows; |
32 |
private int columns; |
33 |
private int dataType; |
34 |
private File file; |
35 |
|
36 |
private int rowsPerTile; |
37 |
private int columnsPerTile; |
38 |
|
39 |
/**
|
40 |
* @param file
|
41 |
* @param rows
|
42 |
* @param columns
|
43 |
* @param dataType
|
44 |
* @throws IOException
|
45 |
*/
|
46 |
public SimpleBandTileManager(File file, int rows, int columns, int dataType) throws IOException { |
47 |
this.rows = rows;
|
48 |
this.columns = columns;
|
49 |
this.dataType = dataType;
|
50 |
this.file = file;
|
51 |
if(this.file==null){ |
52 |
this.file = File.createTempFile("bandTileManager", "tmp"); |
53 |
} |
54 |
|
55 |
this.raf = new RandomAccessFile(this.file, "rw"); |
56 |
BufferManager bufferManager = BufferLocator.getBufferManager(); |
57 |
int dataTypeSize=bufferManager.getDataTypeSize(dataType);
|
58 |
raf.setLength(rows*columns*dataTypeSize); |
59 |
|
60 |
this.rowsPerTile=256; |
61 |
this.columnsPerTile=256; |
62 |
} |
63 |
|
64 |
public Band load(int row, int col, int dataType) throws IOException { |
65 |
//FIXME: Comentarizado para que me deje compilar (no s? si es necesaria esta clase
|
66 |
|
67 |
// //TODO review (un)used params
|
68 |
// int pos = row*this.columns+col;
|
69 |
// raf.seek(pos);
|
70 |
// BufferManager bufferManager = BufferLocator.getBufferManager();
|
71 |
// int dataTypeSize = bufferManager.getDataTypeSize(dataType);
|
72 |
// byte[] byteArray = new byte[buffer.capacity() * dataTypeSize];
|
73 |
// raf.read(byteArray);
|
74 |
// buffer.rewind();
|
75 |
//
|
76 |
// switch (dataType) {
|
77 |
// case BufferManager.TYPE_BYTE:
|
78 |
// //FIXME: Elegir cual de las dos siguientes maneras de hacerlo es la id?nea
|
79 |
//
|
80 |
// ((ByteBuffer) buffer).put(byteArray, 0, byteArray.length);
|
81 |
//// System.arraycopy(byteArray, 0, ((ByteBuffer) buffer).array(), 0, byteArray.length);
|
82 |
// break;
|
83 |
// case BufferManager.TYPE_SHORT:
|
84 |
// case BufferManager.TYPE_USHORT:
|
85 |
// for( int cell =0 ; cell<byteArray.length ; cell++ ) {
|
86 |
// ((ShortBuffer) buffer).put((int)(cell/dataTypeSize), byteArray[cell]);
|
87 |
// }
|
88 |
// break;
|
89 |
// case BufferManager.TYPE_INT:
|
90 |
// for( int cell =0 ; cell<byteArray.length ; cell++ ) {
|
91 |
// ((IntBuffer) buffer).put((int)(cell/dataTypeSize), byteArray[cell]);
|
92 |
// }
|
93 |
// break;
|
94 |
// case BufferManager.TYPE_FLOAT:
|
95 |
// for( int cell =0 ; cell<byteArray.length ; cell++ ) {
|
96 |
// ((FloatBuffer) buffer).put((int)(cell/dataTypeSize), byteArray[cell]);
|
97 |
// }
|
98 |
// break;
|
99 |
//
|
100 |
// case BufferManager.TYPE_DOUBLE:
|
101 |
// for( int cell =0 ; cell<byteArray.length ; cell++ ) {
|
102 |
// ((DoubleBuffer) buffer).put((int)(cell/dataTypeSize), byteArray[cell]);
|
103 |
// }
|
104 |
// break;
|
105 |
//
|
106 |
// default:
|
107 |
// throw new IllegalArgumentException("Data Type " + dataType + " not supported.");
|
108 |
// }
|
109 |
return null; |
110 |
|
111 |
} |
112 |
|
113 |
public void save(Buffer buffer, int row, int rows, int col, int cols, int dataType) throws IOException { |
114 |
//TODO review (un)used params
|
115 |
int pos = row*this.columns+col; |
116 |
raf.seek(pos); |
117 |
|
118 |
BufferManager bufferManager = BufferLocator.getBufferManager(); |
119 |
ByteBuffer byteBuffer = ByteBuffer.allocate(buffer.capacity() * bufferManager.getDataTypeSize(dataType)); |
120 |
switch (dataType) {
|
121 |
case BufferManager.TYPE_BYTE:
|
122 |
byteBuffer.put(((ByteBuffer)buffer).array());
|
123 |
break;
|
124 |
case BufferManager.TYPE_SHORT:
|
125 |
case BufferManager.TYPE_USHORT:
|
126 |
ShortBuffer byteAsShortBuffer = byteBuffer.asShortBuffer();
|
127 |
byteAsShortBuffer.put((short[]) buffer.array()); |
128 |
break;
|
129 |
case BufferManager.TYPE_INT:
|
130 |
IntBuffer byteAsIntBuffer = byteBuffer.asIntBuffer();
|
131 |
byteAsIntBuffer.put((int[]) buffer.array()); |
132 |
break;
|
133 |
case BufferManager.TYPE_FLOAT:
|
134 |
FloatBuffer byteAsFloatBuffer = byteBuffer.asFloatBuffer();
|
135 |
byteAsFloatBuffer.put((float[]) buffer.array()); |
136 |
break;
|
137 |
case BufferManager.TYPE_DOUBLE:
|
138 |
DoubleBuffer byteAsDoubleBuffer = byteBuffer.asDoubleBuffer();
|
139 |
byteAsDoubleBuffer.put((double[]) buffer.array()); |
140 |
break;
|
141 |
default:
|
142 |
throw new IllegalArgumentException("Data Type " + dataType + " not supported."); |
143 |
} |
144 |
raf.write(byteBuffer.array()); |
145 |
|
146 |
} |
147 |
|
148 |
@Override
|
149 |
public boolean isSupportedSave() { |
150 |
return true; |
151 |
} |
152 |
|
153 |
@Override
|
154 |
public BandInfo getBandInfo() {
|
155 |
return null; |
156 |
} |
157 |
|
158 |
@Override
|
159 |
public int getRowsPerTile() { |
160 |
return rowsPerTile;
|
161 |
} |
162 |
|
163 |
@Override
|
164 |
public int getColumnsPerTile() { |
165 |
return columnsPerTile;
|
166 |
} |
167 |
|
168 |
@Override
|
169 |
public TileStruct getTileStruct() {
|
170 |
// TODO Auto-generated method stub
|
171 |
return null; |
172 |
} |
173 |
|
174 |
@Override
|
175 |
protected void doDispose() throws BaseException { |
176 |
this.raf = null; |
177 |
this.file = null; |
178 |
|
179 |
|
180 |
} |
181 |
|
182 |
} |