Revision 6220
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