gvsig-raster / org.gvsig.raster / branches / org.gvsig.raster_dataaccess_refactoring / org.gvsig.raster.lib / org.gvsig.raster.lib.impl / src / main / java / org / gvsig / raster / impl / grid / filter / FilterLoaderImpl.java @ 2315
History | View | Annotate | Download (2.82 KB)
1 |
package org.gvsig.raster.impl.grid.filter; |
---|---|
2 |
|
3 |
import org.gvsig.fmap.dal.coverage.RasterLocator; |
4 |
import org.gvsig.fmap.dal.coverage.dataset.Buffer; |
5 |
import org.gvsig.fmap.dal.coverage.exception.FilterAddException; |
6 |
import org.gvsig.fmap.dal.coverage.exception.ProcessInterruptedException; |
7 |
import org.gvsig.fmap.dal.coverage.filter.FilterLoader; |
8 |
import org.gvsig.fmap.dal.coverage.grid.RasterFilterList; |
9 |
import org.gvsig.fmap.dal.coverage.store.props.Statistics; |
10 |
import org.gvsig.fmap.dal.coverage.store.props.Transparency; |
11 |
import org.slf4j.LoggerFactory; |
12 |
|
13 |
/**
|
14 |
* <P>
|
15 |
* Applies the stack of filters to a buffer. With the same <code>FilterLoader</code>
|
16 |
* you can process different buffers. Each buffer can use a different environment
|
17 |
* </P>
|
18 |
*
|
19 |
* @author Nacho Brodin (nachobrodin@gmail.com)
|
20 |
*/
|
21 |
public class FilterLoaderImpl implements FilterLoader { |
22 |
private RasterFilterList filterList = null; |
23 |
private Buffer inputBuffer = null; |
24 |
|
25 |
/**
|
26 |
* Creates a filter loader with a default filter list
|
27 |
* @param dataType
|
28 |
*/
|
29 |
public FilterLoaderImpl(int dataType) { |
30 |
this.filterList = RasterLocator.getManager().createEmptyFilterList(dataType);
|
31 |
} |
32 |
|
33 |
/**
|
34 |
* Creates a filter loader with the list of filters passed by parameter
|
35 |
* @param filterList
|
36 |
*/
|
37 |
public FilterLoaderImpl(RasterFilterList filterList) {
|
38 |
this.filterList = filterList;
|
39 |
} |
40 |
|
41 |
public void addTransparency(Transparency transparency) { |
42 |
filterList.addEnvParam("Transparency", transparency.cloneTransparency());
|
43 |
} |
44 |
|
45 |
public void addSrcDataType(int datatype) { |
46 |
filterList.addEnvParam("SrcDataType", datatype);
|
47 |
} |
48 |
|
49 |
public void addSrcBandCount(int bandcount) { |
50 |
filterList.addEnvParam("SrcBandCount", bandcount);
|
51 |
} |
52 |
|
53 |
public void addSrcStatistics(Statistics statistics) { |
54 |
filterList.addEnvParam("SrcStatistics", statistics);
|
55 |
} |
56 |
|
57 |
public Buffer applyFilters(Buffer buffer) { |
58 |
this.inputBuffer = buffer;
|
59 |
|
60 |
//Checks if the transparency is inside the buffer
|
61 |
Transparency transparency = (Transparency)filterList.getEnvParam("Transparency"); |
62 |
if(transparency.existAlphaBand() && transparency.getAlphaBandNumber() >= buffer.getBandCount()) {
|
63 |
transparency.setTransparencyBand(-1);
|
64 |
transparency.activeTransparency(); |
65 |
} |
66 |
filterList.setInitRasterBuf(inputBuffer); |
67 |
try {
|
68 |
filterList.execute(); |
69 |
} catch (ProcessInterruptedException e) {
|
70 |
return inputBuffer;
|
71 |
} catch (FilterAddException e) {
|
72 |
LoggerFactory.getLogger(this.getClass()).debug("Filters cannot be applied", e); |
73 |
return inputBuffer;
|
74 |
} |
75 |
if(filterList.getResult() != null) |
76 |
return (Buffer) filterList.getResult(); |
77 |
return inputBuffer;
|
78 |
} |
79 |
|
80 |
public Transparency getTransparency() { |
81 |
Transparency t = filterList.getTransparency();
|
82 |
t.setDataBuffer(inputBuffer); |
83 |
return t;
|
84 |
} |
85 |
|
86 |
public Buffer getBufferResult() { |
87 |
if(filterList.getResult() != null) |
88 |
return (Buffer) filterList.getResult(); |
89 |
return inputBuffer;
|
90 |
} |
91 |
} |