/* JAI-Ext - OpenSource Java Advanced Image Extensions Library
* http://www.geo-solutions.it/
* Copyright 2014 GeoSolutions
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package it.geosolutions.jaiext.buffer;
import it.geosolutions.jaiext.range.Range;
import java.awt.RenderingHints;
import java.awt.image.RenderedImage;
import java.awt.image.renderable.ParameterBlock;
import java.util.List;
import javax.media.jai.BorderExtender;
import javax.media.jai.JAI;
import javax.media.jai.OperationDescriptorImpl;
import javax.media.jai.ParameterBlockJAI;
import javax.media.jai.ROI;
import javax.media.jai.RenderedOp;
import javax.media.jai.registry.RenderedRegistryMode;
public class BufferDescriptor extends OperationDescriptorImpl {
// private final static Logger LOGGER = Logger.getLogger(BufferDescriptor.class.toString());
public static final BorderExtender DEFAULT_EXTENDER = BorderExtender
.createInstance(BorderExtender.BORDER_ZERO);
/**
* The resource strings that provide the general documentation and specify the parameter list for the "Buffer" operation.
*/
private static final String[][] resources = { { "GlobalName", "Buffer" },
{ "LocalName", "Buffer" }, { "Vendor", "it.geosolutions.jaiext" },
{ "Description", "Calculates sum on a buffer for each pixels." },
{ "DocURL", "Not Defined" }, { "Version", JaiI18N.getString("DescriptorVersion") },
{ "arg0Desc", JaiI18N.getString("BufferDescriptor0") },
{ "arg1Desc", JaiI18N.getString("BufferDescriptor1") },
{ "arg2Desc", JaiI18N.getString("BufferDescriptor2") },
{ "arg3Desc", JaiI18N.getString("BufferDescriptor3") },
{ "arg4Desc", JaiI18N.getString("BufferDescriptor4") },
{ "arg5Desc", JaiI18N.getString("BufferDescriptor5") },
{ "arg6Desc", JaiI18N.getString("BufferDescriptor6") },
{ "arg7Desc", JaiI18N.getString("BufferDescriptor7") },
{ "arg8Desc", JaiI18N.getString("BufferDescriptor8") },
{ "arg9Desc", JaiI18N.getString("BufferDescriptor9") },
{ "arg10Desc", JaiI18N.getString("BufferDescriptor10") }};
/** The parameter names for the "Warp" operation. */
private static final String[] paramNames = { "extender", "leftP", "rightP", "topP", "bottomP",
"rois", "nodata", "destNoData", "valueToCount", "type", "pixelArea" };
/** The parameter class types for the "Warp" operation. */
private static final Class[] paramClasses = { javax.media.jai.BorderExtender.class,
java.lang.Integer.class, java.lang.Integer.class, java.lang.Integer.class,
java.lang.Integer.class, java.util.List.class,
it.geosolutions.jaiext.range.Range.class, java.lang.Double.class,
java.lang.Double.class, java.lang.Integer.class, java.lang.Double.class};
/** The parameter default values for the "Warp" operation. */
private static final Object[] paramDefaults = { DEFAULT_EXTENDER, 0, 0, 0, 0, null, null, 0d,
null, null, 1d};
/** Constructor. */
public BufferDescriptor() {
super(resources, 1, paramClasses, paramNames, paramDefaults);
}
/**
* Calculates the buffer on an Image
*
* <p>
* Creates a <code>ParameterBlockJAI</code> from all supplied arguments except <code>hints</code> and invokes
* {@link JAI#create(String,ParameterBlock,RenderingHints)}.
*
* @see JAI
* @see ParameterBlockJAI
* @see RenderedOp
*
* @param source0 <code>RenderedImage</code> source 0.
* @param warp The warp object.
* @param interpolation The interpolation method. May be <code>null</code>.
* @param backgroundValues The user-specified background values. May be <code>null</code>.
* @param sourceROI ROI object used in calculations. May be <code>null</code>.
* @param noData NoData Range used in calculations. May be <code>null</code>.
* @param hints The <code>RenderingHints</code> to use. May be <code>null</code>.
* @return The <code>RenderedOp</code> destination.
* @throws IllegalArgumentException if <code>source0</code> is <code>null</code>.
* @throws IllegalArgumentException if <code>warp</code> is <code>null</code>.
*/
public static RenderedOp create(RenderedImage source, BorderExtender extender, int leftPad,
int rightPad, int topPad, int bottomPad, List<ROI> rois, Range nodata,
double destinationNoData, Double valueToCount, Integer type, double pixelArea, RenderingHints hints) {
ParameterBlockJAI pb = new ParameterBlockJAI("Buffer", RenderedRegistryMode.MODE_NAME);
pb.setSource("source0", source);
// Extender
pb.setParameter("extender", extender);
// Padding params
pb.setParameter("leftP", leftPad);
pb.setParameter("rightP", rightPad);
pb.setParameter("topP", topPad);
pb.setParameter("bottomP", bottomPad);
// Rois
pb.setParameter("rois", rois);
// noData
if (nodata != null) {
pb.setParameter("nodata", nodata);
}
// DestinationNoData
pb.setParameter("destNoData", destinationNoData);
// Value to count
if (valueToCount != null) {
pb.setParameter("valueToCount", valueToCount);
}
// Change final image to double
pb.setParameter("pixelArea", pixelArea);
// Image data type
if (type != null) {
pb.setParameter("type", type);
}
return JAI.create("Buffer", pb, hints);
}
}