Revision 6220

View differences:

org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.fmap.mapcontext.raster/org.gvsig.fmap.mapcontext.raster.impl/src/test/java/org/gvsig/fmap/mapcontext/raster/impl/DefaultRasterLayerTest.java
27 27
import org.gvsig.fmap.dal.file.jimi.JimiRasterStoreProviderParameters;
28 28
import org.gvsig.fmap.dal.raster.api.RasterStore;
29 29
import org.gvsig.fmap.dal.raster.impl.DefaultRasterStore;
30
import org.gvsig.fmap.geom.jts.primitive.Envelope2D;
30 31
import org.gvsig.fmap.geom.primitive.Envelope;
31 32
import org.gvsig.fmap.mapcontext.ViewPort;
32 33
import org.gvsig.fmap.mapcontext.raster.api.RasterLayer;
......
79 80
            RasterLayer layer=new DefaultRasterLayer(store, legend);
80 81
            assertNotNull(layer);
81 82

  
82

  
83
            //589 x 467
84
            //1178 x 934
85
            //294 x 233
83 86
            BufferedImage image = new BufferedImage(589, 467, BufferedImage.TYPE_INT_ARGB);
84 87
            ViewPort viewPort = new ViewPort(projection);
85
            viewPort.setEnvelope(layer.getFullEnvelope());
88
            Envelope envelope = new Envelope2D(-100, -100, 1000, 1000);
89
            viewPort.setEnvelope(envelope);
90
//            viewPort.setEnvelope(layer.getFullEnvelope());
86 91
            viewPort.setImageSize(new Dimension(589, 467));
87 92
            viewPort.refreshExtent();
88 93

  
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.legend/org.gvsig.raster.lib.legend.impl/src/main/java/org/gvsig/raster/lib/legend/impl/DefaultRasterLegend.java
170 170
            double heightPixel = 0;
171 171
            try {
172 172
                // Clip and interpolate buffer with view port envelope
173
                bufferToDraw = buffer.clip(viewPort.getEnvelope());
173
                if(buffer.getEnvelope().equals(viewPort.getEnvelope())){
174
                    bufferToDraw = buffer;
175
                } else {
176
                    bufferToDraw = buffer.clip(viewPort.getEnvelope());
177
                }
174 178
                widthPixel =
175 179
                    getWidthPixel(bufferToDraw.getEnvelope(), viewPort.getEnvelope().getLength(0)
176 180
                        / viewPort.getImageWidth());
......
274 278
                "Color interpretation is not RGB,RGBA or BGR and buffer was be drawn without color table");
275 279
        }
276 280

  
281
        int redBandIndex = colorInterpretation.getBand(ColorInterpretation.RED_BAND);
282
        int greenBandIndex = colorInterpretation.getBand(ColorInterpretation.GREEN_BAND);
283
        int blueBandIndex = colorInterpretation.getBand(ColorInterpretation.BLUE_BAND);
284

  
285
        Band redBand = buffer.getBand(redBandIndex);
286
        Band greenBand = buffer.getBand(greenBandIndex);
287
        Band blueBand = buffer.getBand(blueBandIndex);
288
        Band alphaBand = null;
289
        if (colorInterpretation.hasAlphaBand()) {
290
            int alphaBandIndex =
291
                colorInterpretation.getBand(ColorInterpretation.ALPHA_BAND);
292
            alphaBand = buffer.getBand(alphaBandIndex);
293
        }
294

  
277 295
        for (int i = 0; i < buffer.getRows(); i++) {
278 296
            for (int j = 0; j < buffer.getColumns(); j++) {
279
                //TODO Review this bucle
280
                int redBandIndex = colorInterpretation.getBand(ColorInterpretation.RED_BAND);
281
                int greenBandIndex = colorInterpretation.getBand(ColorInterpretation.GREEN_BAND);
282
                int blueBandIndex = colorInterpretation.getBand(ColorInterpretation.BLUE_BAND);
283

  
284
                Band redBand = buffer.getBand(redBandIndex);
285
                Band greenBand = buffer.getBand(greenBandIndex);
286
                Band blueBand = buffer.getBand(blueBandIndex);
287
                Band alphaBand = null;
288
                if (colorInterpretation.hasAlphaBand()) {
289
                    int alphaBandIndex =
290
                        colorInterpretation.getBand(ColorInterpretation.ALPHA_BAND);
291
                    alphaBand = buffer.getBand(alphaBandIndex);
292
                }
293

  
294 297
                Number redValue = (Number) redBand.get(i, j);
295 298
                Number blueValue = (Number) blueBand.get(i, j);
296 299
                Number greenValue = (Number) greenBand.get(i, j);
300

  
297 301
                Number alphaValue = 255;
298 302
                if (alphaBand != null) {
299 303
                    alphaValue = (Number) alphaBand.get(i, j);
......
424 428
        this.filters = filterList;
425 429
    }
426 430

  
431
    /**
432
     *
433
     */
427 434
    public static void registerDefinition() {
428 435
        PersistenceManager manager = ToolsLocator.getPersistenceManager();
429 436
        DynStruct definition = manager.getDefinition(PERSISTENT_NAME);
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.api/src/main/java/org/gvsig/raster/lib/buffer/api/BandPageManager.java
1 1
package org.gvsig.raster.lib.buffer.api;
2 2

  
3 3
import java.io.IOException;
4
import java.nio.ByteBuffer;
5 4

  
6 5

  
7 6
/**
......
17 16
     * @param dataType
18 17
     * @throws IOException
19 18
     */
20
    public void load(ByteBuffer buffer, int row, int rows, int dataType) throws IOException;
19
    public void load(java.nio.Buffer buffer, int row, int rows, int dataType) throws IOException;
21 20

  
22 21
    /**
23 22
     * @param buffer
......
26 25
     * @param dataType
27 26
     * @throws IOException
28 27
     */
29
    public void save(ByteBuffer buffer, int row, int rows, int dataType) throws IOException;
28
    public void save(java.nio.Buffer buffer, int row, int rows, int dataType) throws IOException;
30 29

  
31 30
}
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/PaginatedBandDouble.java
15 15
 */
16 16
public class PaginatedBandDouble extends AbstractPaginatedBand implements BandDouble {
17 17

  
18
    private DoubleBuffer specificData;
19

  
20 18
    /**
21 19
     * @param rows
22 20
     * @param columns
......
26 24
     */
27 25
    public PaginatedBandDouble(int rows, int columns, NoData noData, BandPageManager pageManager) {
28 26
        super(rows, columns, noData, pageManager);
29
        specificData = data.asDoubleBuffer();
27
        data = DoubleBuffer.allocate(rowsPerPage * columns);
30 28
    }
31 29

  
32 30
    @Override
......
57 55

  
58 56
        for(int row=0; row<this.rows; row+=this.rowsPerPage){
59 57
            loadPage(row);
60
            Arrays.fill(specificData.array(), (double) value);
58
            Arrays.fill((double[])data.array(), (double) value);
61 59
        }
62 60
    }
63 61

  
64 62
    @Override
65 63
    public double getValue(int row, int column) {
66 64
        loadPage(row);
67
        return specificData.get( ((row-firstRowOfPage)*this.columns) + column);
65
        return ((DoubleBuffer) data).get( ((row-firstRowOfPage)*this.columns) + column);
68 66
    }
69 67

  
70 68
    @Override
......
75 73

  
76 74
    protected void doSetValue(int row, int column, double value) {
77 75
        loadPage(row);
78
        specificData.put(((row-firstRowOfPage)*this.columns) + column, value);
76
        ((DoubleBuffer) data).put(((row-firstRowOfPage)*this.columns) + column, value);
79 77
    }
80 78

  
81 79
    @Override
......
86 84
    @Override
87 85
    public void fetchRow(int row, Object rowBuffer) {
88 86
        loadPage(row);
89
        double[] source = (double[]) ((java.nio.Buffer)specificData).array();
87
        double[] source = (double[]) data.array();
90 88
        double[] target = (double[]) rowBuffer;
91 89
        System.arraycopy(source, (row-firstRowOfPage)*this.columns, target, 0, this.columns);
92 90
    }
......
95 93
    protected void doPutRow(int row, Object rowBuffer) {
96 94
        loadPage(row);
97 95
        double[] source = (double[]) rowBuffer;
98
        double[] target = (double[]) ((java.nio.Buffer)specificData).array();
96
        double[] target = (double[]) data.array();
99 97
        System.arraycopy(source, 0, target, (row-firstRowOfPage)*this.columns, this.columns);
100 98
    }
101 99
}
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/DefaultBuffer.java
7 7
import java.util.Iterator;
8 8
import java.util.List;
9 9

  
10
import org.apache.commons.lang3.exception.CloneFailedException;
10 11
import org.cresques.cts.ICoordTrans;
11 12
import org.cresques.cts.IProjection;
12 13
import org.slf4j.Logger;
......
89 90
                this.envelope =
90 91
                    GeometryLocator.getGeometryManager().createEnvelope(0, 0, columns, rows, Geometry.SUBTYPES.GEOM2D);
91 92
            }
92
            createBands(bandDataTypes, bandNoData, pageManagers);
93
            if(bandDataTypes!=null){
94
                createBands(bandDataTypes, bandNoData, pageManagers);
95
            }
93 96
        } catch (Exception e) {
94 97
            throw new CreateBufferException(e);
95 98
        }
......
123 126
        Buffer cloned;
124 127
        try {
125 128
            cloned =
126
                BufferLocator.getBufferManager().createBuffer(this.getRows(), this.getColumns(), this.getBandTypes(),
129
                BufferLocator.getBufferManager().createBuffer(this.getRows(), this.getColumns(), null,
127 130
                    this.getProjection());
128 131
        } catch (LocatorException | BufferException e) {
129 132
            throw new CloneNotSupportedException("Can't clone buffer.");
......
131 134
        for (int i = 0; i < this.getBandCount(); i++) {
132 135
            cloned.addBand((Band) this.getBand(i).clone());
133 136
        }
134

  
135 137
        return cloned;
136

  
137 138
    }
138 139

  
139 140
}
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/BufferInterpolation.java
173 173
                        }
174 174
                        dx = posX - ((int) posX);
175 175
                        try {
176
                            double[] kernel = getKernel(((int) posX), ((int) posY), sourceBand);
176
                            double[] kernel = getKernel((int) posY, (int) posX, sourceBand);
177 177
                            setBandValueFromDouble(iRow, iCol, targetBand, getBilinearValue(dx, dy, kernel));
178 178
                        } catch (ArrayIndexOutOfBoundsException e) {
179 179
                            LOG.warn(
......
273 273
                        }
274 274
                        dx = posX - ((int) posX);
275 275
                        try {
276
                            double[] kernel = getKernel(((int) posX), ((int) posY), sourceBand);
276
                            double[] kernel = getKernel(((int) posY), ((int) posX), sourceBand);
277 277
                            setBandValueFromDouble(iRow, iCol, targetBand, getInverseDistanceValue(dx, dy, kernel));
278 278
                        } catch (ArrayIndexOutOfBoundsException e) {
279 279
                            LOG.warn(
......
426 426
                        try {
427 427
                            double[][] submatrix = get4x4Submatrix(((int) posY), ((int) posX), source, sourceBand);
428 428
                            if (submatrix == null) {
429
                                double[] kernel = getKernel(((int) posX), ((int) posY), sourceBand);
429
                                double[] kernel = getKernel( ((int) posY), ((int) posX),sourceBand);
430 430
                                setBandValueFromDouble(iRow, iCol, targetBand, getBilinearValue(dx, dy, kernel));
431 431
                            } else {
432 432
                                setBandValueFromDouble(iRow, iCol, targetBand, getBicubicSplineValue(dx, dy, submatrix));
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/SimpleBandPageManager.java
6 6
import java.io.IOException;
7 7
import java.io.OutputStream;
8 8
import java.io.RandomAccessFile;
9
import java.nio.Buffer;
9 10
import java.nio.ByteBuffer;
11
import java.nio.DoubleBuffer;
12
import java.nio.FloatBuffer;
13
import java.nio.IntBuffer;
14
import java.nio.ShortBuffer;
10 15

  
11 16
import org.apache.commons.io.FileUtils;
12 17

  
......
49 54

  
50 55
    }
51 56

  
52
    public void load(ByteBuffer buffer, int row, int rows, int dataType) throws IOException {
57
    public void load(Buffer buffer, int row, int rows, int dataType) throws IOException {
53 58

  
54 59
        int pos = row*this.columns;
55 60
        raf.seek(pos);
56
        raf.read(buffer.array());
61
        BufferManager bufferManager = BufferLocator.getBufferManager();
62
        int dataTypeSize = bufferManager.getDataTypeSize(dataType);
63
        byte[] byteArray = new byte[buffer.capacity() * dataTypeSize];
64
        raf.read(byteArray);
65
        buffer.rewind();
57 66

  
67
        switch (dataType) {
68
        case BufferManager.TYPE_BYTE:
69
            for( int cell =0 ; cell<byteArray.length ; cell++ ) {
70
                ((ByteBuffer) buffer).put((int)(cell/dataTypeSize), byteArray[cell]);
71
            }
72
            break;
73
        case BufferManager.TYPE_SHORT:
74
        case BufferManager.TYPE_USHORT:
75
            for( int cell =0 ; cell<byteArray.length ; cell++ ) {
76
                ((ShortBuffer) buffer).put((int)(cell/dataTypeSize), byteArray[cell]);
77
            }
78
            break;
79
        case BufferManager.TYPE_INT:
80
            for( int cell =0 ; cell<byteArray.length ; cell++ ) {
81
                ((IntBuffer) buffer).put((int)(cell/dataTypeSize), byteArray[cell]);
82
            }
83
            break;
84
        case BufferManager.TYPE_FLOAT:
85
            for( int cell =0 ; cell<byteArray.length ; cell++ ) {
86
                ((FloatBuffer) buffer).put((int)(cell/dataTypeSize), byteArray[cell]);
87
            }
88
            break;
89

  
90
        case BufferManager.TYPE_DOUBLE:
91
            for( int cell =0 ; cell<byteArray.length ; cell++ ) {
92
                ((DoubleBuffer) buffer).put((int)(cell/dataTypeSize), byteArray[cell]);
93
            }
94
            break;
95

  
96
        default:
97
            throw new IllegalArgumentException("Data Type " + dataType + " not supported.");
98
        }
99

  
100

  
101

  
102

  
58 103
    }
59 104

  
60
    public void save(ByteBuffer buffer, int row, int rows, int dataType) throws IOException {
105
    public void save(Buffer buffer, int row, int rows, int dataType) throws IOException {
61 106

  
62 107
        int pos = row*this.columns;
63 108
        raf.seek(pos);
64
        raf.write(buffer.array());
65 109

  
110
        BufferManager bufferManager = BufferLocator.getBufferManager();
111
        ByteBuffer byteBuffer = ByteBuffer.allocate(buffer.capacity() * bufferManager.getDataTypeSize(dataType));
112
        switch (dataType) {
113
        case BufferManager.TYPE_BYTE:
114
            byteBuffer.put((ByteBuffer)buffer.array());
115
        case BufferManager.TYPE_SHORT:
116
        case BufferManager.TYPE_USHORT:
117
            ShortBuffer byteAsShortBuffer = byteBuffer.asShortBuffer();
118
            byteAsShortBuffer.put((short[]) buffer.array());
119
            break;
120
        case BufferManager.TYPE_INT:
121
            IntBuffer byteAsIntBuffer = byteBuffer.asIntBuffer();
122
            byteAsIntBuffer.put((int[]) buffer.array());
123
            break;
124
        case BufferManager.TYPE_FLOAT:
125
            FloatBuffer byteAsFloatBuffer = byteBuffer.asFloatBuffer();
126
            byteAsFloatBuffer.put((float[]) buffer.array());
127
            break;
128
        case BufferManager.TYPE_DOUBLE:
129
            DoubleBuffer byteAsDoubleBuffer = byteBuffer.asDoubleBuffer();
130
            byteAsDoubleBuffer.put((double[]) buffer.array());
131
            break;
132
        default:
133
            throw new IllegalArgumentException("Data Type " + dataType + " not supported.");
134
        }
135
        raf.write(byteBuffer.array());
136

  
66 137
    }
67 138

  
68 139
    @Override
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/ClippedBuffer.java
44 44
        } catch (GeometryOperationNotSupportedException | GeometryOperationException e1) {
45 45
            throw new CreateBufferException(e1);
46 46
        }
47
        this.rows = (int)Math.round(this.envelope.getLength(1)/this.buffer.getPixelSizeY());
48
        this.columns = (int)Math.round(this.envelope.getLength(0)/this.buffer.getPixelSizeX());
47 49

  
50
        this.firstRow = (int)(Math.round((this.envelope.getMinimum(1)-this.buffer.getEnvelope().getMinimum(1))/this.buffer.getPixelSizeY()));
51
        this.firstColumn = (int)(Math.round((this.envelope.getMinimum(0)-this.buffer.getEnvelope().getMinimum(0))/this.buffer.getPixelSizeX()));
52

  
53
        this.projection = buffer.getProjection();
54

  
48 55
        this.bands = new ArrayList<Band>();
49 56

  
50 57
        try {
......
53 60
            throw new CreateBufferException(e);
54 61
        }
55 62

  
56
        this.rows = (int)Math.round(this.envelope.getLength(1)/this.buffer.getPixelSizeY());
57
        this.columns = (int)Math.round(this.envelope.getLength(0)/this.buffer.getPixelSizeX());
58 63

  
59
        this.firstRow = (int)(Math.round((this.envelope.getMinimum(1)-this.buffer.getEnvelope().getMinimum(1))/this.buffer.getPixelSizeY()));
60
        this.firstColumn = (int)(Math.round((this.envelope.getMinimum(0)-this.buffer.getEnvelope().getMinimum(0))/this.buffer.getPixelSizeX()));
61 64

  
62
        this.projection = buffer.getProjection();
63 65
    }
64 66

  
65 67
    private void createBands(Band[] bands) throws BandException {
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/PaginatedBandInt.java
1 1
package org.gvsig.raster.lib.buffer.impl;
2 2

  
3
import java.nio.ByteBuffer;
3 4
import java.nio.IntBuffer;
4 5
import java.util.Arrays;
5 6

  
......
15 16
 */
16 17
public class PaginatedBandInt extends AbstractPaginatedBand implements BandInt {
17 18

  
18
    private IntBuffer specificData;
19

  
20 19
    /**
21 20
     * @param rows
22 21
     * @param columns
......
26 25
     */
27 26
    public PaginatedBandInt(int rows, int columns, NoData noData, BandPageManager pageManager) {
28 27
        super(rows, columns, noData, pageManager);
29
        specificData = data.asIntBuffer();
28
        data = IntBuffer.allocate(rowsPerPage * columns);
30 29
    }
31 30

  
32 31
    @Override
......
57 56

  
58 57
        for(int row=0; row<this.rows; row+=this.rowsPerPage){
59 58
            loadPage(row);
60
            Arrays.fill(specificData.array(), (int) value);
59
            Arrays.fill((int[])data.array(), (int) value);
61 60
        }
62 61
    }
63 62

  
64 63
    @Override
65 64
    public int getValue(int row, int column) {
66 65
        loadPage(row);
67
        return specificData.get( ((row-firstRowOfPage)*this.columns) + column);
66
        return ((IntBuffer) data).get( ((row-firstRowOfPage)*this.columns) + column);
68 67
    }
69 68

  
70 69
    @Override
......
75 74

  
76 75
    protected void doSetValue(int row, int column, int value) {
77 76
        loadPage(row);
78
        specificData.put(((row-firstRowOfPage)*this.columns) + column, value);
77
        ((IntBuffer) data).put(((row-firstRowOfPage)*this.columns) + column, value);
79 78
    }
80 79

  
81 80
    @Override
......
86 85
    @Override
87 86
    public void fetchRow(int row, Object rowBuffer) {
88 87
        loadPage(row);
89
        int[] source = (int[]) ((java.nio.Buffer)specificData).array();
88
        int[] source;
89
        source = (int[]) data.array();
90 90
        int[] target = (int[]) rowBuffer;
91 91
        System.arraycopy(source, (row-firstRowOfPage)*this.columns, target, 0, this.columns);
92 92
    }
......
95 95
    protected void doPutRow(int row, Object rowBuffer) {
96 96
        loadPage(row);
97 97
        int[] source = (int[]) rowBuffer;
98
        int[] target = (int[]) ((java.nio.Buffer)specificData).array();
99
        System.arraycopy(source, 0, target, (row-firstRowOfPage)*this.columns, this.columns);
98
        int[] target;
99
        target = (int[]) data.array();
100
        System.arraycopy(source, 0, target,(row - firstRowOfPage) * this.columns, this.columns);
100 101
    }
102

  
101 103
}
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/PaginatedBandShort.java
15 15
 */
16 16
public class PaginatedBandShort extends AbstractPaginatedBand implements BandShort {
17 17

  
18
    private ShortBuffer specificData;
19 18

  
20 19
    /**
21 20
     * @param rows
......
26 25
     */
27 26
    public PaginatedBandShort(int rows, int columns, NoData noData, BandPageManager pageManager) {
28 27
        super(rows, columns, noData, pageManager);
29
        specificData = data.asShortBuffer();
28
        data = ShortBuffer.allocate(rowsPerPage * columns);
30 29
    }
31 30

  
32 31
    @Override
......
57 56

  
58 57
        for(int row=0; row<this.rows; row+=this.rowsPerPage){
59 58
            loadPage(row);
60
            Arrays.fill(specificData.array(), (short) value);
59
            Arrays.fill((short[])data.array(), (short) value);
61 60
        }
62 61
    }
63 62

  
64 63
    @Override
65 64
    public short getValue(int row, int column) {
66 65
        loadPage(row);
67
        return specificData.get( ((row-firstRowOfPage)*this.columns) + column);
66
        return ((ShortBuffer) data).get( ((row-firstRowOfPage)*this.columns) + column);
68 67
    }
69 68

  
70 69
    @Override
......
75 74

  
76 75
    protected void doSetValue(int row, int column, short value) {
77 76
        loadPage(row);
78
        specificData.put(((row-firstRowOfPage)*this.columns) + column, value);
77
        ((ShortBuffer) data).put(((row-firstRowOfPage)*this.columns) + column, value);
79 78
    }
80 79

  
81 80
    @Override
......
86 85
    @Override
87 86
    public void fetchRow(int row, Object rowBuffer) {
88 87
        loadPage(row);
89
        short[] source = (short[]) ((java.nio.Buffer)specificData).array();
88
        short[] source = (short[]) data.array();
90 89
        short[] target = (short[]) rowBuffer;
91 90
        System.arraycopy(source, (row-firstRowOfPage)*this.columns, target, 0, this.columns);
92 91
    }
......
95 94
    protected void doPutRow(int row, Object rowBuffer) {
96 95
        loadPage(row);
97 96
        short[] source = (short[]) rowBuffer;
98
        short[] target = (short[]) ((java.nio.Buffer)specificData).array();
97
        short[] target = (short[]) data.array();
99 98
        System.arraycopy(source, 0, target, (row-firstRowOfPage)*this.columns, this.columns);
100 99
    }
101 100
}
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/AbstractPaginatedBand.java
1 1
package org.gvsig.raster.lib.buffer.impl;
2 2

  
3 3
import java.io.IOException;
4
import java.nio.Buffer;
4 5
import java.nio.ByteBuffer;
6
import java.nio.IntBuffer;
5 7

  
6 8
import org.gvsig.raster.lib.buffer.api.Band;
7 9
import org.gvsig.raster.lib.buffer.api.BandNotification;
......
16 18
 */
17 19
public abstract class AbstractPaginatedBand extends AbstractBand {
18 20

  
19
    protected ByteBuffer data;
21
    protected Buffer data;
20 22
    protected int firstRowOfPage;
21 23
    protected int rowsPerPage;
22 24
    protected BandPageManager pageManager;
25
    private boolean loaded;
23 26

  
24 27

  
25 28
    protected static final int MAX_PREFERED_SIZE = 10485760; // 10MB;
......
34 37
    public AbstractPaginatedBand(int rows, int columns, NoData noData, BandPageManager pageManager) {
35 38
        this.rows = rows;
36 39
        this.columns = columns;
40
        this.loaded=false;
37 41
        calculateRowsPerPage();
38
        data = ByteBuffer.allocate(rowsPerPage * columns * getDataSize());
42
        
39 43
        if (noData == null) {
40 44
            this.noData = BufferLocator.getBufferManager().createNoData(null, null);
41 45
        } else {
......
86 90
    }
87 91

  
88 92
    protected void loadPage(int row) {
89
        if(!(row>=firstRowOfPage && row<firstRowOfPage+rowsPerPage)){
93
        if (loaded && row >= firstRowOfPage
94
            && row < firstRowOfPage + rowsPerPage) {
90 95
            return;
91 96
        }
97
        loaded=false;
98

  
92 99
        saveCurrentPage();
93 100
        firstRowOfPage = row / rowsPerPage; //Divisi?n entera
94 101
        try {
......
97 104
                rowsInPage = this.rows - firstRowOfPage;
98 105
            }
99 106
            this.pageManager.load(data, firstRowOfPage, rowsInPage, this.getDataType());
107
            loaded=true;
100 108
        } catch (IOException e) {
101 109
            throw new RuntimeException("Can't save current page", e);
102 110
        }
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/PaginatedBandByte.java
15 15
 */
16 16
public class PaginatedBandByte extends AbstractPaginatedBand implements BandByte {
17 17

  
18
    private ByteBuffer specificData;
19 18

  
20 19
    /**
21 20
     * @param rows
......
26 25
     */
27 26
    public PaginatedBandByte(int rows, int columns, NoData noData, BandPageManager pageManager) {
28 27
        super(rows, columns, noData, pageManager);
29
        specificData = data;
28
        data = ByteBuffer.allocate(rowsPerPage * columns);
29

  
30 30
    }
31 31

  
32 32
    @Override
......
57 57

  
58 58
        for(int row=0; row<this.rows; row+=this.rowsPerPage){
59 59
            loadPage(row);
60
            Arrays.fill(specificData.array(), (byte)value);
60
            Arrays.fill((byte[])data.array(), (byte)value);
61 61
        }
62 62
    }
63 63

  
64 64
    @Override
65 65
    public byte getValue(int row, int column) {
66 66
        loadPage(row);
67
        return specificData.get( ((row-firstRowOfPage)*this.columns) + column);
67
        return ((ByteBuffer) data).get( ((row-firstRowOfPage)*this.columns) + column);
68 68
    }
69 69

  
70 70
    @Override
......
75 75

  
76 76
    protected void doSetValue(int row, int column, byte value) {
77 77
        loadPage(row);
78
        specificData.put(((row-firstRowOfPage)*this.columns) + column, value);
78
        ((ByteBuffer) data).put(((row-firstRowOfPage)*this.columns) + column, value);
79 79
    }
80 80

  
81 81
    @Override
......
86 86
    @Override
87 87
    public void fetchRow(int row, Object rowBuffer) {
88 88
        loadPage(row);
89
        byte[] source = (byte[]) ((java.nio.Buffer)specificData).array();
89
        byte[] source = (byte[]) data.array();
90 90
        byte[] target = (byte[]) rowBuffer;
91 91
        System.arraycopy(source, (row-firstRowOfPage)*this.columns, target, 0, this.columns);
92 92
    }
......
95 95
    protected void doPutRow(int row, Object rowBuffer) {
96 96
        loadPage(row);
97 97
        byte[] source = (byte[]) rowBuffer;
98
        byte[] target = (byte[]) ((java.nio.Buffer)specificData).array();
98
        byte[] target = (byte[]) data.array();
99 99
        System.arraycopy(source, 0, target, (row-firstRowOfPage)*this.columns, this.columns);
100 100
    }
101 101

  
org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.buffer/org.gvsig.raster.lib.buffer.impl/src/main/java/org/gvsig/raster/lib/buffer/impl/PaginatedBandFloat.java
1 1
package org.gvsig.raster.lib.buffer.impl;
2 2

  
3
import java.nio.DoubleBuffer;
4 3
import java.nio.FloatBuffer;
5 4
import java.util.Arrays;
6 5

  
......
16 15
 */
17 16
public class PaginatedBandFloat extends AbstractPaginatedBand implements BandFloat {
18 17

  
19
    private FloatBuffer specificData;
20 18

  
21 19
    /**
22 20
     * @param rows
......
27 25
     */
28 26
    public PaginatedBandFloat(int rows, int columns, NoData noData, BandPageManager pageManager) {
29 27
        super(rows, columns, noData, pageManager);
30
        specificData = data.asFloatBuffer();
28
        data = FloatBuffer.allocate(rowsPerPage * columns);
31 29
    }
32 30

  
33 31
    @Override
......
58 56

  
59 57
        for(int row=0; row<this.rows; row+=this.rowsPerPage){
60 58
            loadPage(row);
61
            Arrays.fill(specificData.array(), (float) value);
59
            Arrays.fill((float[])data.array(), (float) value);
62 60
        }
63 61
    }
64 62

  
65 63
    @Override
66 64
    public float getValue(int row, int column) {
67 65
        loadPage(row);
68
        return specificData.get( ((row-firstRowOfPage)*this.columns) + column);
66
        return ((FloatBuffer) data).get( ((row-firstRowOfPage)*this.columns) + column);
69 67
    }
70 68

  
71 69
    @Override
......
76 74

  
77 75
    protected void doSetValue(int row, int column, float value) {
78 76
        loadPage(row);
79
        specificData.put(((row-firstRowOfPage)*this.columns) + column, value);
77
        ((FloatBuffer) data).put(((row-firstRowOfPage)*this.columns) + column, value);
80 78
    }
81 79

  
82 80
    @Override
......
87 85
    @Override
88 86
    public void fetchRow(int row, Object rowBuffer) {
89 87
        loadPage(row);
90
        float[] source = (float[]) ((java.nio.Buffer)specificData).array();
88
        float[] source = (float[]) data.array();
91 89
        float[] target = (float[]) rowBuffer;
92 90
        System.arraycopy(source, (row-firstRowOfPage)*this.columns, target, 0, this.columns);
93 91
    }
......
96 94
    protected void doPutRow(int row, Object rowBuffer) {
97 95
        loadPage(row);
98 96
        float[] source = (float[]) rowBuffer;
99
        float[] target = (float[]) ((java.nio.Buffer)specificData).array();
97
        float[] target = (float[]) data.array();
100 98
        System.arraycopy(source, 0, target, (row-firstRowOfPage)*this.columns, this.columns);
101 99
    }
102 100
}
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
1 1
package org.gvsig.fmap.dal.file.jimi;
2 2

  
3 3
import java.io.IOException;
4
import java.nio.Buffer;
4 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;
5 10

  
6 11
import org.gvsig.raster.lib.buffer.api.BandPageManager;
7 12
import org.gvsig.raster.lib.buffer.api.BufferLocator;
......
35 40
    }
36 41

  
37 42
    @Override
38
    public void load(ByteBuffer buffer, int firstRow, int numberRows, int dataType)
43
    public void load(Buffer buffer, int firstRow, int numberRows, int dataType)
39 44
        throws IOException {
40
        if( this.dataType != dataType ) {
41
            this.dataType = dataType;
42
            this.dataSize = BufferLocator.getBufferManager().getDataTypeSize(dataType);
43
        }
45

  
44 46
        int firstCell =  firstRow * image.columns;
45 47
        int lastCell = firstCell + numberRows*image.columns;
46 48
        byte[] bandBuffer = image.buffer[band];
......
48 50
        switch(dataType) {
49 51
            case BufferManager.TYPE_INT:
50 52
                for( int cell =firstCell ; cell<lastCell ; cell++ ) {
51
                    buffer.putInt(cell*dataSize, bandBuffer[cell]);
53
                    ((IntBuffer) buffer).put(cell, bandBuffer[cell]);
52 54
                }
53 55
                break;
54 56
            case BufferManager.TYPE_BYTE:
55 57
                for( int cell =firstCell ; cell<lastCell ; cell++ ) {
56
                    buffer.put(cell*dataSize, bandBuffer[cell]);
58
                    ((ByteBuffer) buffer).put(cell, bandBuffer[cell]);
57 59
                }
58 60
                break;
59 61
            case BufferManager.TYPE_DOUBLE:
60 62
                for( int cell =firstCell ; cell<lastCell ; cell++ ) {
61
                    buffer.putDouble(cell*dataSize, bandBuffer[cell]);
63
                    ((DoubleBuffer) buffer).put(cell, bandBuffer[cell]);
62 64
                }
63 65
                break;
64 66
            case BufferManager.TYPE_FLOAT:
65 67
                for( int cell =firstCell ; cell<lastCell ; cell++ ) {
66
                    buffer.putFloat(cell*dataSize, bandBuffer[cell]);
68
                    ((FloatBuffer) buffer).put(cell, bandBuffer[cell]);
67 69
                }
68 70
                break;
69 71
            case BufferManager.TYPE_SHORT:
70 72
            case BufferManager.TYPE_USHORT:
71 73
                for( int cell =firstCell ; cell<lastCell ; cell++ ) {
72
                    buffer.putShort(cell*dataSize, bandBuffer[cell]);
74
                    ((ShortBuffer) buffer).put(cell, bandBuffer[cell]);
73 75
                }
74 76
                break;
75 77
        }
76 78
    }
77 79

  
78 80
    @Override
79
    public void save(ByteBuffer buffer, int row, int rows, int dataType)
81
    public void save(Buffer buffer, int row, int rows, int dataType)
80 82
        throws IOException {
81 83
        throw new UnsupportedOperationException();
82 84

  

Also available in: Unified diff