You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2023/03/21 21:40:35 UTC
[commons-imaging] 01/03: Allow fluent API use of ImagingParameters and subclasses
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-imaging.git
commit 9cc6da1f131bd90225fd576f0aa70b6fc15d5cac
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Tue Mar 21 16:07:24 2023 -0400
Allow fluent API use of ImagingParameters and subclasses
---
.../apache/commons/imaging/ImagingParameters.java | 36 ++--
.../imaging/common/XmpImagingParameters.java | 6 +-
.../imaging/formats/bmp/BmpImagingParameters.java | 4 +-
.../imaging/formats/gif/GifImagingParameters.java | 4 +-
.../formats/icns/IcnsImagingParameters.java | 4 +-
.../imaging/formats/ico/IcoImagingParameters.java | 4 +-
.../formats/jpeg/JpegImagingParameters.java | 4 +-
.../imaging/formats/pcx/PcxImagingParameters.java | 27 +--
.../imaging/formats/png/PngImagingParameters.java | 62 ++++---
.../imaging/formats/pnm/PnmImagingParameters.java | 16 +-
.../imaging/formats/psd/PsdImagingParameters.java | 4 +-
.../formats/rgbe/RgbeImagingParameters.java | 4 +-
.../formats/tiff/TiffImagingParameters.java | 195 +++++++++++----------
.../formats/wbmp/WbmpImagingParameters.java | 4 +-
.../imaging/formats/xbm/XbmImagingParameters.java | 4 +-
.../imaging/formats/xpm/XpmImagingParameters.java | 4 +-
16 files changed, 219 insertions(+), 163 deletions(-)
diff --git a/src/main/java/org/apache/commons/imaging/ImagingParameters.java b/src/main/java/org/apache/commons/imaging/ImagingParameters.java
index 7ef1b3ac..4957ae63 100644
--- a/src/main/java/org/apache/commons/imaging/ImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/ImagingParameters.java
@@ -24,9 +24,10 @@ import org.apache.commons.imaging.common.BufferedImageFactory;
* <p>Contains parameters that are common to all formats. Implementations must include
* the specific parameters for each image format.</p>
*
+ * @param <E> This type
* @since 1.0-alpha3
*/
-public class ImagingParameters {
+public class ImagingParameters<E extends ImagingParameters<E>> {
/**
* Whether to throw an exception when any issue occurs during reading
@@ -54,35 +55,44 @@ public class ImagingParameters {
// getters and setters
- public boolean isStrict() {
- return strict;
+ @SuppressWarnings("unchecked")
+ public E asThis() {
+ return (E) this;
}
- public void setStrict(final boolean strict) {
- this.strict = strict;
+ public BufferedImageFactory getBufferedImageFactory() {
+ return bufferedImageFactory;
}
public String getFileName() {
return fileName;
}
- public void setFileName(final String fileName) {
- this.fileName = fileName;
+ public PixelDensity getPixelDensity() {
+ return pixelDensity;
}
- public BufferedImageFactory getBufferedImageFactory() {
- return bufferedImageFactory;
+ public boolean isStrict() {
+ return strict;
}
- public void setBufferedImageFactory(final BufferedImageFactory bufferedImageFactory) {
+ public E setBufferedImageFactory(final BufferedImageFactory bufferedImageFactory) {
this.bufferedImageFactory = bufferedImageFactory;
+ return asThis();
}
- public PixelDensity getPixelDensity() {
- return pixelDensity;
+ public E setFileName(final String fileName) {
+ this.fileName = fileName;
+ return asThis();
}
- public void setPixelDensity(final PixelDensity pixelDensity) {
+ public E setPixelDensity(final PixelDensity pixelDensity) {
this.pixelDensity = pixelDensity;
+ return asThis();
+ }
+
+ public E setStrict(final boolean strict) {
+ this.strict = strict;
+ return asThis();
}
}
diff --git a/src/main/java/org/apache/commons/imaging/common/XmpImagingParameters.java b/src/main/java/org/apache/commons/imaging/common/XmpImagingParameters.java
index 810b22ab..f2f26ef8 100644
--- a/src/main/java/org/apache/commons/imaging/common/XmpImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/common/XmpImagingParameters.java
@@ -21,9 +21,10 @@ import org.apache.commons.imaging.ImagingParameters;
/**
* Parameters for formats that support Xmp.
+ *
* @since 1.0-alpha3
*/
-public class XmpImagingParameters extends ImagingParameters {
+public class XmpImagingParameters<E extends XmpImagingParameters<E>> extends ImagingParameters<E> {
private String xmpXml;
@@ -31,8 +32,9 @@ public class XmpImagingParameters extends ImagingParameters {
return xmpXml;
}
- public void setXmpXml(final String xmpXml) {
+ public E setXmpXml(final String xmpXml) {
this.xmpXml = xmpXml;
+ return asThis();
}
}
diff --git a/src/main/java/org/apache/commons/imaging/formats/bmp/BmpImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/bmp/BmpImagingParameters.java
index 73cc8033..4b2110f1 100644
--- a/src/main/java/org/apache/commons/imaging/formats/bmp/BmpImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/bmp/BmpImagingParameters.java
@@ -21,6 +21,8 @@ import org.apache.commons.imaging.ImagingParameters;
/**
* Bmp format parameters.
+ *
* @since 1.0-alpha3
*/
-public class BmpImagingParameters extends ImagingParameters {}
+public class BmpImagingParameters extends ImagingParameters<BmpImagingParameters> {
+}
diff --git a/src/main/java/org/apache/commons/imaging/formats/gif/GifImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/gif/GifImagingParameters.java
index 3a8490aa..66a11038 100644
--- a/src/main/java/org/apache/commons/imaging/formats/gif/GifImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/gif/GifImagingParameters.java
@@ -21,6 +21,8 @@ import org.apache.commons.imaging.common.XmpImagingParameters;
/**
* Gif format parameters.
+ *
* @since 1.0-alpha3
*/
-public class GifImagingParameters extends XmpImagingParameters {}
+public class GifImagingParameters extends XmpImagingParameters<GifImagingParameters> {
+}
diff --git a/src/main/java/org/apache/commons/imaging/formats/icns/IcnsImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/icns/IcnsImagingParameters.java
index c0475f8c..c155a817 100644
--- a/src/main/java/org/apache/commons/imaging/formats/icns/IcnsImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/icns/IcnsImagingParameters.java
@@ -19,6 +19,8 @@ import org.apache.commons.imaging.ImagingParameters;
/**
* Icns format parameters.
+ *
* @since 1.0-alpha3
*/
-public class IcnsImagingParameters extends ImagingParameters {}
+public class IcnsImagingParameters extends ImagingParameters<IcnsImagingParameters> {
+}
diff --git a/src/main/java/org/apache/commons/imaging/formats/ico/IcoImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/ico/IcoImagingParameters.java
index 0ac95c8b..8311a15c 100644
--- a/src/main/java/org/apache/commons/imaging/formats/ico/IcoImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/ico/IcoImagingParameters.java
@@ -19,6 +19,8 @@ import org.apache.commons.imaging.ImagingParameters;
/**
* Ico format parameters.
+ *
* @since 1.0-alpha3
*/
-public class IcoImagingParameters extends ImagingParameters {}
+public class IcoImagingParameters extends ImagingParameters<IcoImagingParameters> {
+}
diff --git a/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImagingParameters.java
index 1fed2d69..d7ed59be 100644
--- a/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImagingParameters.java
@@ -19,6 +19,8 @@ import org.apache.commons.imaging.common.XmpImagingParameters;
/**
* Jpeg format parameters.
+ *
* @since 1.0-alpha3
*/
-public class JpegImagingParameters extends XmpImagingParameters {}
+public class JpegImagingParameters extends XmpImagingParameters<JpegImagingParameters> {
+}
diff --git a/src/main/java/org/apache/commons/imaging/formats/pcx/PcxImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/pcx/PcxImagingParameters.java
index 35b221b2..811e5e1e 100644
--- a/src/main/java/org/apache/commons/imaging/formats/pcx/PcxImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/pcx/PcxImagingParameters.java
@@ -21,34 +21,37 @@ import org.apache.commons.imaging.ImagingParameters;
* Parameters used by the Pcx format.
* @since 1.0-alpha3
*/
-public class PcxImagingParameters extends ImagingParameters {
+public class PcxImagingParameters extends ImagingParameters<PcxImagingParameters> {
private int planes = -1;
private int bitDepth = -1;
private int compression = PcxConstants.PCX_COMPRESSION_UNCOMPRESSED;
- public int getPlanes() {
- return planes;
+ public int getBitDepth() {
+ return bitDepth;
}
- public void setPlanes(final int planes) {
- this.planes = planes;
+ public int getCompression() {
+ return compression;
}
- public int getBitDepth() {
- return bitDepth;
+ public int getPlanes() {
+ return planes;
}
- public void setBitDepth(final int bitDepth) {
+ public PcxImagingParameters setBitDepth(final int bitDepth) {
this.bitDepth = bitDepth;
+ return asThis();
}
- public int getCompression() {
- return compression;
+ public PcxImagingParameters setCompression(final int compression) {
+ this.compression = compression;
+ return asThis();
}
- public void setCompression(final int compression) {
- this.compression = compression;
+ public PcxImagingParameters setPlanes(final int planes) {
+ this.planes = planes;
+ return asThis();
}
}
diff --git a/src/main/java/org/apache/commons/imaging/formats/png/PngImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/png/PngImagingParameters.java
index 0eb6f297..90440506 100644
--- a/src/main/java/org/apache/commons/imaging/formats/png/PngImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/png/PngImagingParameters.java
@@ -24,7 +24,7 @@ import org.apache.commons.imaging.common.XmpImagingParameters;
* Png format parameters.
* @since 1.0-alpha3
*/
-public class PngImagingParameters extends XmpImagingParameters {
+public class PngImagingParameters extends XmpImagingParameters<PngImagingParameters> {
public static final byte DEFAULT_BIT_DEPTH = 8;
@@ -59,49 +59,49 @@ public class PngImagingParameters extends XmpImagingParameters {
return bitDepth;
}
- public void setBitDepth(final byte bitDepth) {
- this.bitDepth = bitDepth;
+ public PhysicalScale getPhysicalScale() {
+ return physicalScale;
}
- public boolean isForceIndexedColor() {
- return forceIndexedColor;
+ public List<? extends PngText> getTextChunks() {
+ return textChunks != null ? Collections.unmodifiableList(textChunks) : null;
}
- public void setForceIndexedColor(final boolean forceIndexedColor) {
- this.forceIndexedColor = forceIndexedColor;
+ public boolean isForceIndexedColor() {
+ return forceIndexedColor;
}
public boolean isForceTrueColor() {
return forceTrueColor;
}
- public void setForceTrueColor(final boolean forceTrueColor) {
- this.forceTrueColor = forceTrueColor;
- }
-
- public PhysicalScale getPhysicalScale() {
- return physicalScale;
+ /**
+ * Indicates that the PNG write operation should enable
+ * the predictor.
+ * @return true if the predictor is enabled; otherwise, false.
+ */
+ public boolean isPredictorEnabled(){
+ return predictorEnabled;
}
- public void setPhysicalScale(final PhysicalScale physicalScale) {
- this.physicalScale = physicalScale;
+ public PngImagingParameters setBitDepth(final byte bitDepth) {
+ this.bitDepth = bitDepth;
+ return asThis();
}
- public List<? extends PngText> getTextChunks() {
- return textChunks != null ? Collections.unmodifiableList(textChunks) : null;
+ public PngImagingParameters setForceIndexedColor(final boolean forceIndexedColor) {
+ this.forceIndexedColor = forceIndexedColor;
+ return asThis();
}
- public void setTextChunks(final List<? extends PngText> textChunks) {
- this.textChunks = Collections.unmodifiableList(textChunks);
+ public PngImagingParameters setForceTrueColor(final boolean forceTrueColor) {
+ this.forceTrueColor = forceTrueColor;
+ return asThis();
}
- /**
- * Indicates that the PNG write operation should enable
- * the predictor.
- * @return true if the predictor is enabled; otherwise, false.
- */
- public boolean isPredictorEnabled(){
- return predictorEnabled;
+ public PngImagingParameters setPhysicalScale(final PhysicalScale physicalScale) {
+ this.physicalScale = physicalScale;
+ return asThis();
}
/**
@@ -112,9 +112,17 @@ public class PngImagingParameters extends XmpImagingParameters {
* The specification of a predictor may result in an increased
* processing time when writing an image, but will not affect the
* time required to read an image.
+ *
* @param predictorEnabled true if a predictor is enabled; otherwise, false.
+ * @return this
*/
- public void setPredictorEnabled(final boolean predictorEnabled){
+ public PngImagingParameters setPredictorEnabled(final boolean predictorEnabled){
this.predictorEnabled = predictorEnabled;
+ return asThis();
+ }
+
+ public PngImagingParameters setTextChunks(final List<? extends PngText> textChunks) {
+ this.textChunks = Collections.unmodifiableList(textChunks);
+ return asThis();
}
}
diff --git a/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImagingParameters.java
index 6cb95681..65f9c4eb 100644
--- a/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImagingParameters.java
@@ -23,7 +23,7 @@ import org.apache.commons.imaging.ImagingParameters;
* Pnm format parameters.
* @since 1.0-alpha3
*/
-public class PnmImagingParameters extends ImagingParameters {
+public class PnmImagingParameters extends ImagingParameters<PnmImagingParameters> {
private boolean rawBits = true;
/**
@@ -31,19 +31,21 @@ public class PnmImagingParameters extends ImagingParameters {
*/
private ImageFormats subtype = null;
+ public ImageFormats getSubtype() {
+ return subtype;
+ }
+
public boolean isRawBits() {
return rawBits;
}
- public void setRawBits(final boolean rawBits) {
+ public PnmImagingParameters setRawBits(final boolean rawBits) {
this.rawBits = rawBits;
+ return asThis();
}
- public ImageFormats getSubtype() {
- return subtype;
- }
-
- public void setSubtype(final ImageFormats subtype) {
+ public PnmImagingParameters setSubtype(final ImageFormats subtype) {
this.subtype = subtype;
+ return asThis();
}
}
diff --git a/src/main/java/org/apache/commons/imaging/formats/psd/PsdImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/psd/PsdImagingParameters.java
index d2889a7d..bdc6f70d 100644
--- a/src/main/java/org/apache/commons/imaging/formats/psd/PsdImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/psd/PsdImagingParameters.java
@@ -21,6 +21,8 @@ import org.apache.commons.imaging.ImagingParameters;
/**
* Psd format parameters.
+ *
* @since 1.0-alpha3
*/
-public class PsdImagingParameters extends ImagingParameters {}
+public class PsdImagingParameters extends ImagingParameters<PsdImagingParameters> {
+}
diff --git a/src/main/java/org/apache/commons/imaging/formats/rgbe/RgbeImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/rgbe/RgbeImagingParameters.java
index 09d8cf59..877436e2 100644
--- a/src/main/java/org/apache/commons/imaging/formats/rgbe/RgbeImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/rgbe/RgbeImagingParameters.java
@@ -19,6 +19,8 @@ import org.apache.commons.imaging.ImagingParameters;
/**
* Rgbe format parameters.
+ *
* @since 1.0-alpha3
*/
-public class RgbeImagingParameters extends ImagingParameters {}
+public class RgbeImagingParameters extends ImagingParameters<RgbeImagingParameters> {
+}
diff --git a/src/main/java/org/apache/commons/imaging/formats/tiff/TiffImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/tiff/TiffImagingParameters.java
index bb64fddf..8823a244 100644
--- a/src/main/java/org/apache/commons/imaging/formats/tiff/TiffImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/tiff/TiffImagingParameters.java
@@ -21,9 +21,10 @@ import org.apache.commons.imaging.formats.tiff.write.TiffOutputSet;
/**
* Tiff format parameters.
+ *
* @since 1.0-alpha3
*/
-public class TiffImagingParameters extends XmpImagingParameters {
+public class TiffImagingParameters extends XmpImagingParameters<TiffImagingParameters> {
/**
* Indicates whether to read embedded thumbnails or not. Only applies to read EXIF metadata from JPEG/JFIF files.
@@ -99,12 +100,25 @@ public class TiffImagingParameters extends XmpImagingParameters {
*/
private Integer t6Options = null;
- public boolean isReadThumbnails() {
- return readThumbnails;
+ /**
+ * Clears settings for sub-image. Subsequent read operations will retrieve
+ * the entire image.
+ */
+ public void clearSubImage() {
+ subImageWidth = 0;
+ subImageHeight = 0;
}
- public void setReadThumbnails(final boolean readThumbnails) {
- this.readThumbnails = readThumbnails;
+ public Integer getCompression() {
+ return compression;
+ }
+
+ public PhotometricInterpreter getCustomPhotometricInterpreter() {
+ return customPhotometricInterpreter;
+ }
+
+ public Integer getLzwCompressionBlockSize() {
+ return lzwCompressionBlockSize;
}
/**
@@ -116,64 +130,25 @@ public class TiffImagingParameters extends XmpImagingParameters {
}
/**
- * Set the TIFF output set for writing TIFF files. An output set
- * may contain various types of TiffDirectories including image directories,
- * EXIF directories, GPS-related directories, etc.
- *
- * @param tiffOutputSet A valid instance.
- */
- public void setOutputSet(final TiffOutputSet tiffOutputSet) {
- this.tiffOutputSet = tiffOutputSet;
- }
-
- /**
- * Sets parameters for performing a partial read operation on an image. This
- * method is useful for reducing memory and run-time overhead when accessing
- * large source images.
- * <p>
- * Note that the corner x and y coordinates must be positive integers (zero
- * or greater). The width and height must be greater than zero.
+ * Gets the height for a sub-image setting. For a sub-image setting to be
+ * meaningful, both the width and height must be set.
*
- * @param x pixel coordinate of the upper-left corner of the source image,
- * must be zero or greater.
- * @param y pixel coordinate of the upper-left corner of the source image,
- * must be zero or greater.
- * @param width width of the image subset to be read, must be greater than
- * zero.
- * @param height height of the image subset to be read, must be greater than
- * zero.
- */
- public void setSubImage(final int x, final int y, final int width, final int height) {
- if (x < 0 || y < 0) {
- throw new IllegalArgumentException(
- "Invalid sub-image specification: negative x and y values not allowed");
- }
- if (width <= 0 || height <= 0) {
- throw new IllegalArgumentException(
- "Invalid sub-image specification width and height must be greater than zero");
- }
- subImageX = x;
- subImageY = y;
- subImageWidth = width;
- subImageHeight = height;
- }
-
- /**
- * Clears settings for sub-image. Subsequent read operations will retrieve
- * the entire image.
+ * @return if the sub-image feature is enabled, a value greater than zero;
+ * otherwise, zero.
*/
- public void clearSubImage() {
- subImageWidth = 0;
- subImageHeight = 0;
+ public int getSubImageHeight() {
+ return subImageHeight;
}
/**
- * Indicates whether the application has set sub-image parameters.
+ * Gets the width for a sub-image setting. For a sub-image setting to be
+ * meaningful, both the width and height must be set.
*
- * @return true if the sub-image parameters are set; otherwise, false.
+ * @return if the sub-image feature is enabled, a value greater than zero;
+ * otherwise, zero.
*/
- public boolean isSubImageSet() {
- return subImageWidth > 0 && subImageHeight > 0;
+ public int getSubImageWidth() {
+ return subImageWidth;
}
/**
@@ -196,66 +171,102 @@ public class TiffImagingParameters extends XmpImagingParameters {
return subImageY;
}
- /**
- * Gets the width for a sub-image setting. For a sub-image setting to be
- * meaningful, both the width and height must be set.
- *
- * @return if the sub-image feature is enabled, a value greater than zero;
- * otherwise, zero.
- */
- public int getSubImageWidth() {
- return subImageWidth;
+ public Integer getT4Options() {
+ return t4Options;
+ }
+
+ public Integer getT6Options() {
+ return t6Options;
+ }
+
+ public boolean isReadThumbnails() {
+ return readThumbnails;
}
/**
- * Gets the height for a sub-image setting. For a sub-image setting to be
- * meaningful, both the width and height must be set.
+ * Indicates whether the application has set sub-image parameters.
*
- * @return if the sub-image feature is enabled, a value greater than zero;
- * otherwise, zero.
+ * @return true if the sub-image parameters are set; otherwise, false.
*/
- public int getSubImageHeight() {
- return subImageHeight;
+ public boolean isSubImageSet() {
+ return subImageWidth > 0 && subImageHeight > 0;
}
- public PhotometricInterpreter getCustomPhotometricInterpreter() {
- return customPhotometricInterpreter;
+ public TiffImagingParameters setCompression(final Integer compression) {
+ this.compression = compression;
+ return asThis();
}
- public void setCustomPhotometricInterpreter(final PhotometricInterpreter customPhotometricInterpreter) {
+ public TiffImagingParameters setCustomPhotometricInterpreter(final PhotometricInterpreter customPhotometricInterpreter) {
this.customPhotometricInterpreter = customPhotometricInterpreter;
+ return asThis();
}
- public Integer getCompression() {
- return compression;
- }
-
- public void setCompression(final Integer compression) {
- this.compression = compression;
+ public TiffImagingParameters setLzwCompressionBlockSize(final Integer lzwCompressionBlockSize) {
+ this.lzwCompressionBlockSize = lzwCompressionBlockSize;
+ return asThis();
}
- public Integer getLzwCompressionBlockSize() {
- return lzwCompressionBlockSize;
+ /**
+ * Set the TIFF output set for writing TIFF files. An output set
+ * may contain various types of TiffDirectories including image directories,
+ * EXIF directories, GPS-related directories, etc.
+ *
+ * @param tiffOutputSet A valid instance.
+ * @return this
+ */
+ public TiffImagingParameters setOutputSet(final TiffOutputSet tiffOutputSet) {
+ this.tiffOutputSet = tiffOutputSet;
+ return asThis();
}
- public void setLzwCompressionBlockSize(final Integer lzwCompressionBlockSize) {
- this.lzwCompressionBlockSize = lzwCompressionBlockSize;
+ public TiffImagingParameters setReadThumbnails(final boolean readThumbnails) {
+ this.readThumbnails = readThumbnails;
+ return asThis();
}
- public Integer getT4Options() {
- return t4Options;
+ /**
+ * Sets parameters for performing a partial read operation on an image. This
+ * method is useful for reducing memory and run-time overhead when accessing
+ * large source images.
+ * <p>
+ * Note that the corner x and y coordinates must be positive integers (zero
+ * or greater). The width and height must be greater than zero.
+ *
+ * @param x pixel coordinate of the upper-left corner of the source image,
+ * must be zero or greater.
+ * @param y pixel coordinate of the upper-left corner of the source image,
+ * must be zero or greater.
+ * @param width width of the image subset to be read, must be greater than
+ * zero.
+ * @param height height of the image subset to be read, must be greater than
+ * zero.
+ * @return this
+ */
+ public TiffImagingParameters setSubImage(final int x, final int y, final int width, final int height) {
+ if (x < 0 || y < 0) {
+ throw new IllegalArgumentException(
+ "Invalid sub-image specification: negative x and y values not allowed");
+ }
+ if (width <= 0 || height <= 0) {
+ throw new IllegalArgumentException(
+ "Invalid sub-image specification width and height must be greater than zero");
+ }
+ subImageX = x;
+ subImageY = y;
+ subImageWidth = width;
+ subImageHeight = height;
+ return asThis();
}
- public void setT4Options(final Integer t4Options) {
+ public TiffImagingParameters setT4Options(final Integer t4Options) {
this.t4Options = t4Options;
+ return asThis();
}
- public Integer getT6Options() {
- return t6Options;
- }
-
- public void setT6Options(final Integer t6Options) {
+ public TiffImagingParameters setT6Options(final Integer t6Options) {
this.t6Options = t6Options;
+ return asThis();
}
}
diff --git a/src/main/java/org/apache/commons/imaging/formats/wbmp/WbmpImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/wbmp/WbmpImagingParameters.java
index f74f28e8..73b6ee45 100644
--- a/src/main/java/org/apache/commons/imaging/formats/wbmp/WbmpImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/wbmp/WbmpImagingParameters.java
@@ -19,6 +19,8 @@ import org.apache.commons.imaging.ImagingParameters;
/**
* Wbmp format parameters.
+ *
* @since 1.0-alpha3
*/
-public class WbmpImagingParameters extends ImagingParameters {}
+public class WbmpImagingParameters extends ImagingParameters<WbmpImagingParameters> {
+}
diff --git a/src/main/java/org/apache/commons/imaging/formats/xbm/XbmImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/xbm/XbmImagingParameters.java
index b0daa357..07a3243f 100644
--- a/src/main/java/org/apache/commons/imaging/formats/xbm/XbmImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/xbm/XbmImagingParameters.java
@@ -19,6 +19,8 @@ import org.apache.commons.imaging.ImagingParameters;
/**
* Xbm format parameters.
+ *
* @since 1.0-alpha3
*/
-public class XbmImagingParameters extends ImagingParameters {}
+public class XbmImagingParameters extends ImagingParameters<XbmImagingParameters> {
+}
diff --git a/src/main/java/org/apache/commons/imaging/formats/xpm/XpmImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/xpm/XpmImagingParameters.java
index 36be8571..e21064f3 100644
--- a/src/main/java/org/apache/commons/imaging/formats/xpm/XpmImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/xpm/XpmImagingParameters.java
@@ -18,6 +18,8 @@ import org.apache.commons.imaging.ImagingParameters;
/**
* Xpm format parameters.
+ *
* @since 1.0-alpha3
*/
-public class XpmImagingParameters extends ImagingParameters {}
+public class XpmImagingParameters extends ImagingParameters<XpmImagingParameters> {
+}