Statistics
| Revision:

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
}