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();
}
}