All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.geotools.gce.geotiff.GeoTiffWriteParams Maven / Gradle / Ivy

/*
 *    GeoTools - The Open Source Java GIS Toolkit
 *    http://geotools.org
 *
 *    (C) 2005-2008, Open Source Geospatial Foundation (OSGeo)
 *
 *    This library is free software; you can redistribute it and/or
 *    modify it under the terms of the GNU Lesser General Public
 *    License as published by the Free Software Foundation;
 *    version 2.1 of the License.
 *
 *    This library is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *    Lesser General Public License for more details.
 */
package org.geotools.gce.geotiff;

import it.geosolutions.imageio.plugins.tiff.TIFFColorConverter;
import it.geosolutions.imageio.plugins.tiff.TIFFCompressor;
import it.geosolutions.imageio.plugins.tiff.TIFFImageWriteParam;
import java.util.Locale;
import javax.imageio.ImageWriteParam;
import org.geotools.coverage.grid.io.imageio.GeoToolsWriteParams;

/**
 * Subclass of {@link GeoToolsWriteParams} the allows the user to specify parameters to control the
 * process of writing out a GeoTiff file through standards {@link ImageWriteParam} (with possible
 * extensions).
 *
 * 

This class allows the user to control the output tile size for the GeoTiff file we are going * to create as well as the possible compression. * *

An example of usage of this parameters is as follows: * *

 * 
 *       		//getting a format
 *       		final GeoTiffFormat format = new GeoTiffFormat();
 *
 *      		//getting the write parameters
 *       		final GeoTiffWriteParams wp = new GeoTiffWriteParams();
 *
 *       		//setting compression to LZW
 *       		wp.setCompressionMode(GeoTiffWriteParams.MODE_EXPLICIT);
 *       		wp.setCompressionType("LZW");
 *       		wp.setCompressionQuality(0.75F);
 *
 *       		//setting the tile size to 256X256
 *       		wp.setTilingMode(GeoToolsWriteParams.MODE_EXPLICIT);
 *       		wp.setTiling(256, 256);
 *
 *       		//setting the write parameters for this geotiff
 *       		final ParameterValueGroup params = format.getWriteParameters();
 *       		params.parameter(
 *       				AbstractGridFormat.GEOTOOLS_WRITE_PARAMS.getName().toString())
 *       				.setValue(wp);
 *
 *       		//get a reader to the input File
 *       		GridCoverageReader reader = new GeoTiffReader(inFile, null);
 *       		GridCoverageWriter writer = null;
 *       		GridCoverage2D gc = null;
 *       		if (reader != null) {
 *
 *       			// reading the coverage
 *       			gc = (GridCoverage2D) reader.read(null);
 *   				if (gc != null) {
 *       					final File writeFile = new File(new StringBuffer(writedir
 *       							.getAbsolutePath()).append(File.separatorChar)
 *       							.append(gc.getName().toString()).append(".tiff")
 *       							.toString());
 *       					writer = format.getWriter(writeFile);
 *       					writer.write(gc, (GeneralParameterValue[]) params.values()
 *        			.toArray(new GeneralParameterValue[1]));
 *        		}
 * 
 * 
* * @author Simone Giannecchini * @since 2.3.x */ public class GeoTiffWriteParams extends GeoToolsWriteParams { /** Default constructor. */ public GeoTiffWriteParams() { super(new TIFFImageWriteParam(Locale.getDefault())); } public void setForceToBigTIFF(final boolean forceToBigTIFF) { ((TIFFImageWriteParam) adaptee).setForceToBigTIFF(forceToBigTIFF); } public boolean isForceToBigTIFF() { return ((TIFFImageWriteParam) adaptee).isForceToBigTIFF(); } /** * Returns the current TIFFColorConverter object that will be used to perform color * conversion when writing the image, or null if none is set. * * @return a TIFFColorConverter object, or null. * @see #setColorConverter(TIFFColorConverter, int) */ public TIFFColorConverter getColorConverter() { return ((TIFFImageWriteParam) adaptee).getColorConverter(); } /** * Returns the current value that will be written to the Photometricinterpretation * tag. This method should only be called if a value has been set using the * setColorConverter method. * * @return an int to be used as the value of the PhotometricInterpretation * tag. * @see #setColorConverter(TIFFColorConverter, int) * @throws IllegalStateException if no value is set. */ public int getPhotometricInterpretation() { return ((TIFFImageWriteParam) adaptee).getPhotometricInterpretation(); } /** * Returns the TIFFCompressor that is currently set to be used by the * ImageWriter to encode each image strip or tile, or null if none has been * set. * * @return compressor the TIFFCompressor to be used for encoding, or null * if none has been set (allowing the writer to choose its own). * @throws IllegalStateException if the compression mode is not MODE_EXPLICIT. * @see #setTIFFCompressor(TIFFCompressor) */ public TIFFCompressor getTIFFCompressor() { return ((TIFFImageWriteParam) adaptee).getTIFFCompressor(); } public boolean isCompressionLossless() { return ((TIFFImageWriteParam) adaptee).isCompressionLossless(); } /** * Sets the TIFFColorConverter object describing the color space to which the input * data should be converted for storage in the input stream. In addition, the value to be * written to the PhotometricInterpretation tag is supplied. * * @param colorConverter a TIFFColorConverter object, or null. * @param photometricInterpretation the value to be written to the * PhotometricInterpretation tag in the root IFD. * @see #getColorConverter * @see #getPhotometricInterpretation */ public void setColorConverter( TIFFColorConverter colorConverter, int photometricInterpretation) { ((TIFFImageWriteParam) adaptee) .setColorConverter(colorConverter, photometricInterpretation); } /** * Sets the TIFFCompressor object to be used by the ImageWriter to * encode each image strip or tile. A value of null allows the writer to choose its * own TIFFCompressor. * *

Note that invoking this method is not sufficient to set the compression type: {@link * ImageWriteParam#setCompressionType(String) setCompressionType()} must be invoked * explicitly for this purpose. The following code illustrates the correct procedure: * *

     * TIFFImageWriteParam writeParam;
     * TIFFCompressor compressor;
     * writeParam.setCompressionMode(writeParam.MODE_EXPLICIT);
     * writeParam.setTIFFCompressor(compressor);
     * writeParam.setCompressionType(compressor.getCompressionType());
     * 
* * If compressionType is set to a value different from that supported by the * TIFFCompressor then the compressor object will not be used. * *

If the compression type supported by the supplied TIFFCompressor is not among * those in {@link ImageWriteParam#compressionTypes compressionTypes}, then it will * be appended to this array after removing any previously appended compression type. If * compressor is null this will also cause any previously appended type to * be removed from the array. * * @param compressor the TIFFCompressor to be used for encoding, or null * to allow the writer to choose its own. * @throws IllegalStateException if the compression mode is not MODE_EXPLICIT. * @see #getTIFFCompressor */ public void setTIFFCompressor(TIFFCompressor compressor) { ((TIFFImageWriteParam) adaptee).setTIFFCompressor(compressor); } /** * Removes any currently set ColorConverter object and * PhotometricInterpretation tag value. * * @see #setColorConverter(TIFFColorConverter, int) */ public void unsetColorConverter() { ((TIFFImageWriteParam) adaptee).unsetColorConverter(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy