Statistics
| Revision:

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 / ClippedBuffer.java @ 43803

History | View | Annotate | Download (3.24 KB)

1
package org.gvsig.raster.lib.buffer.impl;
2

    
3
import java.awt.image.BufferedImage;
4
import java.util.ArrayList;
5

    
6
import org.slf4j.Logger;
7
import org.slf4j.LoggerFactory;
8

    
9
import org.gvsig.fmap.geom.primitive.Envelope;
10
import org.gvsig.raster.lib.buffer.api.Band;
11
import org.gvsig.raster.lib.buffer.api.Buffer;
12
import org.gvsig.raster.lib.buffer.api.BufferLocator;
13
import org.gvsig.raster.lib.buffer.api.BufferManager;
14
import org.gvsig.raster.lib.buffer.api.exceptions.BandException;
15
import org.gvsig.raster.lib.buffer.impl.exceptions.CreateBufferException;
16
import org.gvsig.tools.ToolsLocator;
17
import org.gvsig.tools.dispose.DisposeUtils;
18
import org.gvsig.tools.exception.BaseException;
19

    
20

    
21
/**
22
 * This is like a view over a raster buffer.
23
 * It's for rendering purposes only.
24
 *
25
 * @author fdiaz
26
 *
27
 */
28
public class ClippedBuffer extends AbstractBuffer implements Buffer {
29

    
30
    protected static final Logger logger = LoggerFactory.getLogger(ClippedBuffer.class);
31

    
32
    Buffer buffer;
33
    int firstRow;
34
    int firstColumn;
35

    
36

    
37
    /**
38
     * @param buffer
39
     * @param envelope
40
     * @throws CreateBufferException
41
     */
42
    public ClippedBuffer(Buffer buffer, Envelope envelope) throws CreateBufferException {
43
        ToolsLocator.getDisposableManager().bind(buffer);
44
        this.buffer = buffer;
45
        try {
46
            Envelope intersectionEnvelope = this.buffer.getEnvelope().getGeometry().intersection(envelope.getGeometry()).getEnvelope();
47
            int rows = (int) Math.round(intersectionEnvelope.getLength(1) / this.buffer.getDimensions().getPixelSizeY());
48
            rows = (rows==0)?1:rows;
49
            int columns = (int) Math.round(intersectionEnvelope.getLength(0) / this.buffer.getDimensions().getPixelSizeX());
50
            columns = (columns==0)?1:columns;
51
            this.dimensions = BufferLocator.getBufferManager().createBufferDimensions(rows, columns, intersectionEnvelope);
52

    
53
            this.firstRow =
54
                (int) (Math.round((this.buffer.getEnvelope().getMaximum(1) - this.getEnvelope().getMaximum(1))
55
                    / this.buffer.getDimensions().getPixelSizeY()));
56
            this.firstColumn =
57
                (int) (Math.round((this.getEnvelope().getMinimum(0) - this.buffer.getEnvelope().getMinimum(0))
58
                    / this.buffer.getDimensions().getPixelSizeX()));
59

    
60
            this.projection = buffer.getProjection();
61

    
62
            this.bands = new ArrayList<Band>();
63

    
64
            createBands(this.buffer.getBands());
65
        } catch (Exception e) {
66
            throw new CreateBufferException(e);
67
        }
68

    
69
    }
70

    
71
    private void createBands(Band[] bands) throws BandException {
72
        BufferManager bufferManager = BufferLocator.getBufferManager();
73

    
74
        for (int i = 0; i < bands.length; i++) {
75
            Band band = bufferManager.createClippedBand(this, bands[i]);
76
            this.bands.add(band);
77
            band.addObserver(this);
78

    
79
        }
80
    }
81

    
82
    protected int getFirstRow(){
83
        return this.firstRow;
84
    }
85

    
86
    protected int getFirstColumn(){
87
        return this.firstColumn;
88
    }
89

    
90
    @Override
91
    public void doDispose() throws BaseException {
92
        super.doDispose();
93
        DisposeUtils.dispose(buffer);
94
        buffer=null;
95
    }
96

    
97
    @Override
98
    public BufferedImage getBufferedImage() {
99
        return null;
100
    }
101

    
102
}