gvsig-raster / org.gvsig.raster / branches / org.gvsig.raster.2.4 / org.gvsig.raster / org.gvsig.fmap.dal.file.jimi / src / main / java / org / gvsig / fmap / dal / file / jimi / MemoryImageBandPageManager.java @ 6302
History | View | Annotate | Download (2.77 KB)
1 |
package org.gvsig.fmap.dal.file.jimi; |
---|---|
2 |
|
3 |
import java.io.IOException; |
4 |
import java.nio.Buffer; |
5 |
import java.nio.ByteBuffer; |
6 |
import java.nio.DoubleBuffer; |
7 |
import java.nio.FloatBuffer; |
8 |
import java.nio.IntBuffer; |
9 |
import java.nio.ShortBuffer; |
10 |
|
11 |
import org.gvsig.raster.lib.buffer.api.BandInfo; |
12 |
import org.gvsig.raster.lib.buffer.api.BandPageManager; |
13 |
import org.gvsig.raster.lib.buffer.api.BufferLocator; |
14 |
import org.gvsig.raster.lib.buffer.api.BufferManager; |
15 |
|
16 |
/**
|
17 |
* Band Page Managaer for a Memory Image
|
18 |
* @author dmartinezizquierdo
|
19 |
*
|
20 |
*/
|
21 |
public class MemoryImageBandPageManager implements BandPageManager{ |
22 |
|
23 |
private MemoryImage image;
|
24 |
private int band; |
25 |
private int dataSize = -1; |
26 |
private int dataType = BufferManager.TYPE_UNDEFINED; |
27 |
|
28 |
|
29 |
/**
|
30 |
* @param image
|
31 |
* @param band
|
32 |
*/
|
33 |
public MemoryImageBandPageManager(MemoryImage image, int band){ |
34 |
this.image=image;
|
35 |
this.band=band;
|
36 |
} |
37 |
|
38 |
@Override
|
39 |
public boolean isSupportedSave() { |
40 |
return false; |
41 |
} |
42 |
|
43 |
@Override
|
44 |
public void load(Buffer buffer, int firstRow, int numberRows, int dataType) |
45 |
throws IOException { |
46 |
|
47 |
int firstCell = firstRow * image.columns;
|
48 |
int lastCell = firstCell + numberRows * image.columns;
|
49 |
byte[] bandBuffer = image.buffer[band]; |
50 |
dataSize = BufferLocator.getBufferManager().getDataTypeSize(dataType); |
51 |
|
52 |
int pageCell = 0; |
53 |
switch (dataType) {
|
54 |
case BufferManager.TYPE_INT:
|
55 |
for (int cell = firstCell; cell < lastCell; cell++) { |
56 |
((IntBuffer) buffer).put(pageCell++, bandBuffer[cell*dataSize]);
|
57 |
} |
58 |
break;
|
59 |
case BufferManager.TYPE_BYTE:
|
60 |
buffer.rewind(); |
61 |
((ByteBuffer) buffer).put(bandBuffer, firstCell * dataSize,
|
62 |
numberRows * image.columns * dataSize); |
63 |
break;
|
64 |
case BufferManager.TYPE_DOUBLE:
|
65 |
for (int cell = firstCell; cell < lastCell; cell++) { |
66 |
((DoubleBuffer) buffer).put(pageCell++, bandBuffer[cell*dataSize]);
|
67 |
} |
68 |
break;
|
69 |
case BufferManager.TYPE_FLOAT:
|
70 |
for (int cell = firstCell; cell < lastCell; cell++) { |
71 |
((FloatBuffer) buffer).put(pageCell++, bandBuffer[cell*dataSize]);
|
72 |
} |
73 |
break;
|
74 |
case BufferManager.TYPE_SHORT:
|
75 |
case BufferManager.TYPE_USHORT:
|
76 |
for (int cell = firstCell; cell < lastCell; cell++) { |
77 |
((ShortBuffer) buffer).put(pageCell++, bandBuffer[cell*dataSize]);
|
78 |
} |
79 |
break;
|
80 |
} |
81 |
} |
82 |
|
83 |
@Override
|
84 |
public void save(Buffer buffer, int row, int rows, int dataType) |
85 |
throws IOException { |
86 |
throw new UnsupportedOperationException(); |
87 |
|
88 |
} |
89 |
|
90 |
@Override
|
91 |
public BandInfo getBandInfo(int band) { |
92 |
return null; |
93 |
} |
94 |
|
95 |
} |