This is an automated email from the ASF dual-hosted git repository.

kinow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-imaging.git

commit b1970c724dc1d46cfc482b97ed3f22fb72fb1bf0
Author: Bruno P. Kinoshita <ki...@apache.org>
AuthorDate: Fri Apr 23 11:32:23 2021 +1200

    [IMAGING-159] Update test and examples
---
 .../common/bytesource/ByteSourceImageTest.java     | 12 +++--
 .../bytesource/ByteSourceInputStreamTest.java      |  8 +--
 .../examples/ApacheImagingSpeedAndMemoryTest.java  |  4 +-
 .../commons/imaging/examples/ImageReadExample.java | 11 ++--
 .../imaging/examples/ImageWriteExample.java        | 15 ++----
 .../commons/imaging/examples/SampleUsage.java      |  9 ++--
 .../tiff/ExampleReadFloatingPointData.java         |  4 +-
 .../examples/tiff/ReadAndRenderFloatingPoint.java  | 11 ++--
 .../imaging/examples/tiff/ReadTagsAndImages.java   |  3 +-
 .../imaging/formats/bmp/BmpImageParserTest.java    |  5 +-
 .../commons/imaging/formats/bmp/BmpReadTest.java   |  4 +-
 .../imaging/formats/bmp/BmpRoundtripTest.java      |  8 +--
 .../commons/imaging/formats/dcx/DcxReadTest.java   |  4 +-
 .../commons/imaging/formats/icns/IcnsReadTest.java |  3 +-
 .../commons/imaging/formats/ico/IcoReadTest.java   |  3 +-
 .../commons/imaging/formats/jpeg/JpegReadTest.java | 10 ++--
 .../jpeg/JpegWithInvalidDhtSegmentTest.java        |  3 +-
 .../formats/jpeg/JpegWithJpegThumbnailTest.java    |  4 +-
 .../imaging/formats/jpeg/exif/AsciiFieldTest.java  |  3 +-
 .../imaging/formats/jpeg/exif/ExifDumpTest.java    |  8 ++-
 .../commons/imaging/formats/jpeg/exif/GpsTest.java |  8 ++-
 .../formats/jpeg/exif/MicrosoftTagTest.java        | 11 ++--
 .../formats/jpeg/exif/SpecificExifTagTest.java     |  8 ++-
 .../imaging/formats/jpeg/iptc/IptcAddTest.java     |  8 ++-
 .../imaging/formats/jpeg/iptc/IptcDumpTest.java    |  8 ++-
 .../imaging/formats/jpeg/iptc/IptcParserTest.java  |  4 +-
 .../imaging/formats/jpeg/iptc/IptcUpdateTest.java  | 20 ++++----
 .../formats/jpeg/segments/NegSizeSegmentTest.java  |  4 +-
 .../imaging/formats/jpeg/xmp/JpegXmpDumpTest.java  |  5 +-
 .../formats/jpeg/xmp/JpegXmpRewriteTest.java       |  5 +-
 .../commons/imaging/formats/pam/PamReadTest.java   |  5 +-
 .../commons/imaging/formats/pcx/PcxReadTest.java   |  6 +--
 .../imaging/formats/png/ConvertPngToGifTest.java   | 16 ++----
 .../formats/png/PngMultipleRoundtripTest.java      | 16 ++----
 .../commons/imaging/formats/png/PngTextTest.java   | 10 ++--
 .../png/PngWithInvalidPngChunkSizeTest.java        | 11 ++--
 .../formats/png/PngWriteForceTrueColorText.java    | 17 ++-----
 .../imaging/formats/png/PngWriteReadTest.java      | 40 +++++----------
 .../imaging/formats/pnm/PnmImageParserTest.java    | 18 +++----
 .../commons/imaging/formats/psd/PsdReadTest.java   |  4 +-
 .../commons/imaging/formats/rgbe/RgbeReadTest.java |  4 +-
 .../formats/tiff/TiffAlphaRoundTripTest.java       | 24 ++++-----
 .../imaging/formats/tiff/TiffCcittTest.java        | 59 ++++++++--------------
 .../formats/tiff/TiffFloatingPointReadTest.java    | 24 ++++-----
 .../tiff/TiffFloatingPointRoundTripTest.java       |  6 +--
 .../commons/imaging/formats/tiff/TiffLzwTest.java  |  4 +-
 .../commons/imaging/formats/tiff/TiffReadTest.java |  2 -
 .../formats/tiff/TiffReadWriteTagsTest.java        |  3 +-
 .../imaging/formats/tiff/TiffRoundtripTest.java    | 11 ++--
 .../imaging/formats/tiff/TiffSubImageTest.java     | 48 ++++++++----------
 .../commons/imaging/formats/wbmp/WbmpReadTest.java |  5 +-
 .../commons/imaging/formats/xbm/XbmReadTest.java   |  5 +-
 .../commons/imaging/formats/xmp/XmpUpdateTest.java | 47 +++++++----------
 .../commons/imaging/formats/xpm/XpmReadTest.java   |  4 +-
 .../roundtrip/NullParametersRoundtripTest.java     |  2 +-
 .../imaging/roundtrip/PixelDensityRoundtrip.java   | 11 ++--
 .../commons/imaging/roundtrip/RoundtripBase.java   | 16 +++---
 57 files changed, 236 insertions(+), 395 deletions(-)

diff --git 
a/src/test/java/org/apache/commons/imaging/common/bytesource/ByteSourceImageTest.java
 
b/src/test/java/org/apache/commons/imaging/common/bytesource/ByteSourceImageTest.java
index 801769c..943435c 100644
--- 
a/src/test/java/org/apache/commons/imaging/common/bytesource/ByteSourceImageTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/common/bytesource/ByteSourceImageTest.java
@@ -31,8 +31,6 @@ import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
-import java.util.HashMap;
-import java.util.Map;
 import java.util.stream.Stream;
 
 import org.apache.commons.imaging.ImageFormat;
@@ -40,7 +38,8 @@ import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.Imaging;
-import org.apache.commons.imaging.ImagingConstants;
+import org.apache.commons.imaging.ImagingParameters;
+import org.apache.commons.imaging.formats.jpeg.JpegImagingParameters;
 import org.apache.commons.imaging.internal.Debug;
 import org.apache.commons.io.FileUtils;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -161,12 +160,15 @@ public class ByteSourceImageTest extends ByteSourceTest {
     public void checkGetImageInfo(final File imageFile, final byte[] 
imageFileBytes)
             throws IOException, ImageReadException, IllegalAccessException,
             IllegalArgumentException, InvocationTargetException {
-        final Map<String, Object> params = new HashMap<>();
+        final ImagingParameters params;
         final boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
         final ImageFormat imageFormat = Imaging.guessFormat(imageFile);
         if (imageFormat.equals(ImageFormats.TIFF)
                 || imageFormat.equals(ImageFormats.JPEG)) {
-            params.put(ImagingConstants.PARAM_KEY_READ_THUMBNAILS, 
Boolean.valueOf(!ignoreImageData));
+            params = new JpegImagingParameters();
+            ((JpegImagingParameters) 
params).setReadThumbnails(Boolean.valueOf(!ignoreImageData));
+        } else {
+            params = new ImagingParameters();
         }
 
         final ImageInfo imageInfoFile = Imaging.getImageInfo(imageFile, 
params);
diff --git 
a/src/test/java/org/apache/commons/imaging/common/bytesource/ByteSourceInputStreamTest.java
 
b/src/test/java/org/apache/commons/imaging/common/bytesource/ByteSourceInputStreamTest.java
index 559bbef..e81bb00 100644
--- 
a/src/test/java/org/apache/commons/imaging/common/bytesource/ByteSourceInputStreamTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/common/bytesource/ByteSourceInputStreamTest.java
@@ -23,12 +23,11 @@ import java.io.BufferedInputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
-import java.util.Collections;
 
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.Imaging;
-import org.apache.commons.imaging.ImagingConstants;
 import org.apache.commons.imaging.ImagingTestConstants;
+import org.apache.commons.imaging.formats.ico.IcoImagingParameters;
 import org.apache.commons.io.FilenameUtils;
 import org.junit.jupiter.api.Test;
 
@@ -45,8 +44,9 @@ class ByteSourceInputStreamTest {
         final File imageFile = new 
File(ImagingTestConstants.TEST_IMAGE_FOLDER, imagePath);
         try(BufferedInputStream imageStream = new BufferedInputStream(new 
FileInputStream(imageFile))) {
          // ByteSourceInputStream is created inside of following method
-            final BufferedImage bufferedImage = 
Imaging.getBufferedImage(imageStream,
-                    
Collections.singletonMap(ImagingConstants.PARAM_KEY_FILENAME, ICO_IMAGE_FILE));
+            IcoImagingParameters params = new IcoImagingParameters();
+            params.setFileName(ICO_IMAGE_FILE);
+            final BufferedImage bufferedImage = 
Imaging.getBufferedImage(imageStream, params);
 
             assertEquals(bufferedImage.getWidth(), ICO_IMAGE_WIDTH);
             assertEquals(bufferedImage.getHeight(), ICO_IMAGE_HEIGHT);
diff --git 
a/src/test/java/org/apache/commons/imaging/examples/ApacheImagingSpeedAndMemoryTest.java
 
b/src/test/java/org/apache/commons/imaging/examples/ApacheImagingSpeedAndMemoryTest.java
index 5dc6b30..d1c4d3e 100644
--- 
a/src/test/java/org/apache/commons/imaging/examples/ApacheImagingSpeedAndMemoryTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/examples/ApacheImagingSpeedAndMemoryTest.java
@@ -157,11 +157,11 @@ import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
 import java.io.PrintStream;
-import java.util.HashMap;
 
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.common.bytesource.ByteSourceFile;
 import org.apache.commons.imaging.formats.tiff.TiffImageParser;
+import org.apache.commons.imaging.formats.tiff.TiffImagingParameters;
 /**
  * A "test stand" for evaluating the speed an memory use of different Apache
  * Imaging operations
@@ -202,7 +202,7 @@ public class ApacheImagingSpeedAndMemoryTest {
                 // new ByteSourceInputStream(bins, target.getName());
                 // ready the parser (you may modify this code block
                 // to use your parser of choice)
-                HashMap<String, Object> params = new HashMap<>();
+                TiffImagingParameters params = new TiffImagingParameters();
                 TiffImageParser tiffImageParser = new TiffImageParser();
                 // load the file and record time needed to do so
                 final long time0Nanos = System.nanoTime();
diff --git 
a/src/test/java/org/apache/commons/imaging/examples/ImageReadExample.java 
b/src/test/java/org/apache/commons/imaging/examples/ImageReadExample.java
index 6090151..3307ca7 100644
--- a/src/test/java/org/apache/commons/imaging/examples/ImageReadExample.java
+++ b/src/test/java/org/apache/commons/imaging/examples/ImageReadExample.java
@@ -23,24 +23,21 @@ import java.awt.Transparency;
 import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
 
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.Imaging;
-import org.apache.commons.imaging.ImagingConstants;
+import org.apache.commons.imaging.ImagingParameters;
 import org.apache.commons.imaging.common.BufferedImageFactory;
 
 public class ImageReadExample {
     public static BufferedImage imageReadExample(final File file)
             throws ImageReadException, IOException {
-        final Map<String, Object> params = new HashMap<>();
+        final ImagingParameters params = new ImagingParameters();
 
         // set optional parameters if you like
-        params.put(ImagingConstants.BUFFERED_IMAGE_FACTORY,
-                new ManagedImageBufferedImageFactory());
+        params.setBufferedImageFactory(new ManagedImageBufferedImageFactory());
 
-        // params.put(ImagingConstants.PARAM_KEY_VERBOSE, Boolean.TRUE);
+        // params.setStrict(Boolean.TRUE);
 
         // read and return the image
         return Imaging.getBufferedImage(file, params);
diff --git 
a/src/test/java/org/apache/commons/imaging/examples/ImageWriteExample.java 
b/src/test/java/org/apache/commons/imaging/examples/ImageWriteExample.java
index e94c75b..aefc017 100644
--- a/src/test/java/org/apache/commons/imaging/examples/ImageWriteExample.java
+++ b/src/test/java/org/apache/commons/imaging/examples/ImageWriteExample.java
@@ -19,15 +19,11 @@ package org.apache.commons.imaging.examples;
 import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
 
-import org.apache.commons.imaging.ImageFormat;
-import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.ImageWriteException;
 import org.apache.commons.imaging.Imaging;
-import org.apache.commons.imaging.ImagingConstants;
+import org.apache.commons.imaging.formats.tiff.TiffImagingParameters;
 import org.apache.commons.imaging.formats.tiff.constants.TiffConstants;
 
 public class ImageWriteExample {
@@ -36,14 +32,11 @@ public class ImageWriteExample {
         // read image
         final BufferedImage image = Imaging.getBufferedImage(file);
 
-        final ImageFormat format = ImageFormats.TIFF;
-        final Map<String, Object> params = new HashMap<>();
-
         // set optional parameters if you like
-        params.put(ImagingConstants.PARAM_KEY_COMPRESSION, Integer.valueOf(
-                TiffConstants.TIFF_COMPRESSION_UNCOMPRESSED));
+        final TiffImagingParameters params = new TiffImagingParameters();
+        params.setCompression(TiffConstants.TIFF_COMPRESSION_UNCOMPRESSED);
 
-        return Imaging.writeImageToBytes(image, format, params);
+        return Imaging.writeImageToBytes(image, params);
     }
 
 }
diff --git a/src/test/java/org/apache/commons/imaging/examples/SampleUsage.java 
b/src/test/java/org/apache/commons/imaging/examples/SampleUsage.java
index 4e7955d..40a43c8 100644
--- a/src/test/java/org/apache/commons/imaging/examples/SampleUsage.java
+++ b/src/test/java/org/apache/commons/imaging/examples/SampleUsage.java
@@ -22,8 +22,6 @@ import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.util.HashMap;
-import java.util.Map;
 
 import org.apache.commons.imaging.FormatCompliance;
 import org.apache.commons.imaging.ImageFormat;
@@ -31,6 +29,7 @@ import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.Imaging;
 import org.apache.commons.imaging.common.ImageMetadata;
+import org.apache.commons.imaging.formats.png.PngImagingParameters;
 
 public class SampleUsage {
 
@@ -67,11 +66,11 @@ public class SampleUsage {
             final BufferedImage image = someImage;
             final File dst = someFile;
             final ImageFormat format = ImageFormats.PNG;
-            final Map<String, Object> optionalParams = new HashMap<>();
-            Imaging.writeImage(image, dst, format, optionalParams);
+            final PngImagingParameters optionalParams = new 
PngImagingParameters();
+            Imaging.writeImage(image, dst, optionalParams);
 
             final OutputStream os = someOutputStream;
-            Imaging.writeImage(image, os, format, optionalParams);
+            Imaging.writeImage(image, os, optionalParams);
 
             // <b>get the image's embedded ICC Profile, if it has one. </b>
             final byte[] iccProfileBytes = 
Imaging.getICCProfileBytes(imageBytes);
diff --git 
a/src/test/java/org/apache/commons/imaging/examples/tiff/ExampleReadFloatingPointData.java
 
b/src/test/java/org/apache/commons/imaging/examples/tiff/ExampleReadFloatingPointData.java
index 0e1aa51..9970a73 100644
--- 
a/src/test/java/org/apache/commons/imaging/examples/tiff/ExampleReadFloatingPointData.java
+++ 
b/src/test/java/org/apache/commons/imaging/examples/tiff/ExampleReadFloatingPointData.java
@@ -21,7 +21,6 @@ import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 
 import javax.imageio.ImageIO;
@@ -30,6 +29,7 @@ import org.apache.commons.imaging.FormatCompliance;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.common.ImageBuilder;
 import org.apache.commons.imaging.common.bytesource.ByteSourceFile;
+import org.apache.commons.imaging.formats.jpeg.JpegImagingParameters;
 import org.apache.commons.imaging.formats.tiff.TiffContents;
 import org.apache.commons.imaging.formats.tiff.TiffDirectory;
 import org.apache.commons.imaging.formats.tiff.TiffRasterData;
@@ -115,7 +115,7 @@ public class ExampleReadFloatingPointData {
         // to specify what section of the data is to be extracted.
         // See the Javadoc for readFloatingPointRasterData for more details.
         final long time0Nanos = System.nanoTime();
-        final HashMap<String, Object> params = new HashMap<>();
+        final JpegImagingParameters params = new JpegImagingParameters();
         final TiffRasterData rasterData
             = directory.getRasterData(params);
         final long time1Nanos = System.nanoTime();
diff --git 
a/src/test/java/org/apache/commons/imaging/examples/tiff/ReadAndRenderFloatingPoint.java
 
b/src/test/java/org/apache/commons/imaging/examples/tiff/ReadAndRenderFloatingPoint.java
index c83200c..68401e3 100644
--- 
a/src/test/java/org/apache/commons/imaging/examples/tiff/ReadAndRenderFloatingPoint.java
+++ 
b/src/test/java/org/apache/commons/imaging/examples/tiff/ReadAndRenderFloatingPoint.java
@@ -19,17 +19,16 @@ package org.apache.commons.imaging.examples.tiff;
 import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
-import java.util.HashMap;
 
 import javax.imageio.ImageIO;
 
 import org.apache.commons.imaging.FormatCompliance;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.common.bytesource.ByteSourceFile;
+import org.apache.commons.imaging.formats.jpeg.JpegImagingParameters;
 import org.apache.commons.imaging.formats.tiff.TiffContents;
 import org.apache.commons.imaging.formats.tiff.TiffDirectory;
 import org.apache.commons.imaging.formats.tiff.TiffReader;
-import org.apache.commons.imaging.formats.tiff.constants.TiffConstants;
 import org.apache.commons.imaging.formats.tiff.constants.TiffTagConstants;
 import 
org.apache.commons.imaging.formats.tiff.photometricinterpreters.floatingpoint.PhotometricInterpreterFloat;
 
@@ -147,8 +146,8 @@ public class ReadAndRenderFloatingPoint {
         //    For this demo, we store the Photometric Interpreter instance
         // as a option-parameter to be passed into the read-image method.
         final PhotometricInterpreterFloat pi = new 
PhotometricInterpreterFloat(0.0f, 1.0f);
-        HashMap<String, Object> params = new HashMap<>();
-        params.put(TiffConstants.PARAM_KEY_CUSTOM_PHOTOMETRIC_INTERPRETER, pi);
+        JpegImagingParameters params = new JpegImagingParameters();
+        params.setCustomPhotometricInterpreter(pi);
         BufferedImage bImage = directory.getTiffImage(params);
 
         final float maxValue = pi.getMaxFound();
@@ -163,8 +162,8 @@ public class ReadAndRenderFloatingPoint {
             // of values found above.
             final PhotometricInterpreterFloat grayScale
                 = new PhotometricInterpreterFloat(minValue, maxValue);
-            params = new HashMap<>();
-            params.put(TiffConstants.PARAM_KEY_CUSTOM_PHOTOMETRIC_INTERPRETER, 
grayScale);
+            params = new JpegImagingParameters();
+            params.setCustomPhotometricInterpreter(grayScale);
             bImage = directory.getTiffImage(params);
             ImageIO.write(bImage, "JPEG", output);
         }
diff --git 
a/src/test/java/org/apache/commons/imaging/examples/tiff/ReadTagsAndImages.java 
b/src/test/java/org/apache/commons/imaging/examples/tiff/ReadTagsAndImages.java
index 200f32a..070bfb5 100644
--- 
a/src/test/java/org/apache/commons/imaging/examples/tiff/ReadTagsAndImages.java
+++ 
b/src/test/java/org/apache/commons/imaging/examples/tiff/ReadTagsAndImages.java
@@ -26,6 +26,7 @@ import javax.imageio.ImageIO;
 import org.apache.commons.imaging.FormatCompliance;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.common.bytesource.ByteSourceFile;
+import org.apache.commons.imaging.formats.jpeg.JpegImagingParameters;
 import org.apache.commons.imaging.formats.tiff.TiffContents;
 import org.apache.commons.imaging.formats.tiff.TiffDirectory;
 import org.apache.commons.imaging.formats.tiff.TiffField;
@@ -81,7 +82,7 @@ public class ReadTagsAndImages {
             = rootName != null && !rootName.isEmpty();
 
         final ByteSourceFile byteSource = new ByteSourceFile(target);
-        final HashMap<String, Object> params = new HashMap<>();
+        final JpegImagingParameters params = new JpegImagingParameters();
 
         // Establish a TiffReader. This is just a simple constructor that
         // does not actually access the file.  So the application cannot
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/bmp/BmpImageParserTest.java 
b/src/test/java/org/apache/commons/imaging/formats/bmp/BmpImageParserTest.java
index 4a371bc..9058afb 100644
--- 
a/src/test/java/org/apache/commons/imaging/formats/bmp/BmpImageParserTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/formats/bmp/BmpImageParserTest.java
@@ -21,7 +21,6 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.io.File;
 import java.io.IOException;
-import java.util.Collections;
 
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageReadException;
@@ -43,7 +42,7 @@ public class BmpImageParserTest {
         final String file = "/images/bmp/IMAGING-264/test-72_6-dpi.bmp";
         final File bmp = new 
File(BmpImageParser.class.getResource(file).getFile());
         final BmpImageParser parser = new BmpImageParser();
-        final ImageInfo imageInfo = parser.getImageInfo(bmp, 
Collections.emptyMap());
+        final ImageInfo imageInfo = parser.getImageInfo(bmp, new 
BmpImagingParameters());
         assertEquals(73, imageInfo.getPhysicalWidthDpi(), "Expected 72.6 
resolution to be rounded to 73");
     }
 
@@ -57,6 +56,6 @@ public class BmpImageParserTest {
         final String file = 
"/images/bmp/IMAGING-279/negative_array_size_exception.bmp";
         final File bmp = new 
File(BmpImageParser.class.getResource(file).getFile());
         final BmpImageParser parser = new BmpImageParser();
-        assertThrows(IOException.class, () -> parser.getImageInfo(bmp, 
Collections.emptyMap()));
+        assertThrows(IOException.class, () -> parser.getImageInfo(bmp, new 
BmpImagingParameters()));
     }
 }
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/bmp/BmpReadTest.java 
b/src/test/java/org/apache/commons/imaging/formats/bmp/BmpReadTest.java
index 8968af2..7126b26 100644
--- a/src/test/java/org/apache/commons/imaging/formats/bmp/BmpReadTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/bmp/BmpReadTest.java
@@ -22,8 +22,6 @@ import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
 import java.util.Collection;
-import java.util.Collections;
-import java.util.Map;
 
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageReadException;
@@ -45,7 +43,7 @@ public class BmpReadTest extends BmpBaseTest {
     @ParameterizedTest
     @MethodSource("data")
     public void testImageInfo(final File imageFile) throws ImageReadException, 
IOException {
-        final Map<String, Object> params = Collections.emptyMap();
+        final BmpImagingParameters params = new BmpImagingParameters();
         final ImageInfo imageInfo = Imaging.getImageInfo(imageFile, params);
         assertNotNull(imageInfo);
         // TODO assert more
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/bmp/BmpRoundtripTest.java 
b/src/test/java/org/apache/commons/imaging/formats/bmp/BmpRoundtripTest.java
index d9d8945..20139e6 100644
--- a/src/test/java/org/apache/commons/imaging/formats/bmp/BmpRoundtripTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/bmp/BmpRoundtripTest.java
@@ -23,11 +23,8 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
 import java.util.Random;
 
-import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.ImageWriteException;
 import org.apache.commons.imaging.Imaging;
@@ -140,14 +137,13 @@ public class BmpRoundtripTest extends BmpBaseTest {
             ImageReadException, ImageWriteException {
         final BufferedImage srcImage = imageDataToBufferedImage(rawData);
 
-        final Map<String, Object> writeParams = new HashMap<>();
+        final BmpImagingParameters writeParams = new BmpImagingParameters();
         // writeParams.put(ImagingConstants.PARAM_KEY_FORMAT,
         // ImageFormat.IMAGE_FORMAT_BMP);
         // writeParams.put(PngConstants.PARAM_KEY_BMP_FORCE_TRUE_COLOR,
         // Boolean.TRUE);
 
-        final byte[] bytes = Imaging.writeImageToBytes(srcImage,
-                ImageFormats.BMP, writeParams);
+        final byte[] bytes = Imaging.writeImageToBytes(srcImage, writeParams);
 
         // Debug.debug("bytes", bytes);
 
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/dcx/DcxReadTest.java 
b/src/test/java/org/apache/commons/imaging/formats/dcx/DcxReadTest.java
index f7d2485..69a9ef5 100644
--- a/src/test/java/org/apache/commons/imaging/formats/dcx/DcxReadTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/dcx/DcxReadTest.java
@@ -21,10 +21,10 @@ import static 
org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.util.Collections;
 import java.util.stream.Stream;
 
 import org.apache.commons.imaging.Imaging;
+import org.apache.commons.imaging.formats.pcx.PcxImagingParameters;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -47,7 +47,7 @@ public class DcxReadTest extends DcxBaseTest {
     @ParameterizedTest
     @MethodSource("data")
     public void testImageInfo(final File imageFile) throws Exception {
-        Imaging.getImageInfo(imageFile, Collections.emptyMap());
+        Imaging.getImageInfo(imageFile, new PcxImagingParameters());
     }
 
     @ParameterizedTest
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/icns/IcnsReadTest.java 
b/src/test/java/org/apache/commons/imaging/formats/icns/IcnsReadTest.java
index 1730cfb..61fc17f 100644
--- a/src/test/java/org/apache/commons/imaging/formats/icns/IcnsReadTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/icns/IcnsReadTest.java
@@ -24,7 +24,6 @@ import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
 import java.util.Arrays;
-import java.util.Collections;
 import java.util.List;
 import java.util.stream.Stream;
 
@@ -70,7 +69,7 @@ public class IcnsReadTest extends IcnsBaseTest {
     @ParameterizedTest
     @MethodSource("data")
     public void testImageInfo(final File imageFile) throws Exception {
-        final ImageInfo imageInfo = Imaging.getImageInfo(imageFile, 
Collections.emptyMap());
+        final ImageInfo imageInfo = Imaging.getImageInfo(imageFile, new 
IcnsImagingParameters());
         assertNotNull(imageInfo);
     }
 
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/ico/IcoReadTest.java 
b/src/test/java/org/apache/commons/imaging/formats/ico/IcoReadTest.java
index a4590ec..ad5339d 100644
--- a/src/test/java/org/apache/commons/imaging/formats/ico/IcoReadTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/ico/IcoReadTest.java
@@ -21,7 +21,6 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.util.Collections;
 import java.util.stream.Stream;
 
 import org.apache.commons.imaging.Imaging;
@@ -47,7 +46,7 @@ public class IcoReadTest extends IcoBaseTest {
     @ParameterizedTest
     @MethodSource("data")
     public void testImageInfo(final File imageFile) {
-        Assertions.assertThrows(UnsupportedOperationException.class, () -> 
Imaging.getImageInfo(imageFile, Collections.emptyMap()));
+        Assertions.assertThrows(UnsupportedOperationException.class, () -> 
Imaging.getImageInfo(imageFile, new IcoImagingParameters()));
     }
 
     @ParameterizedTest
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/JpegReadTest.java 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/JpegReadTest.java
index 20b221e..cf28e78 100644
--- a/src/test/java/org/apache/commons/imaging/formats/jpeg/JpegReadTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/jpeg/JpegReadTest.java
@@ -24,15 +24,11 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
 import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
 import java.util.stream.Stream;
 
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.Imaging;
-import org.apache.commons.imaging.ImagingConstants;
 import org.apache.commons.imaging.common.ImageMetadata;
 import org.apache.commons.imaging.common.bytesource.ByteSourceFile;
 import org.apache.commons.imaging.internal.Debug;
@@ -49,9 +45,9 @@ public class JpegReadTest extends JpegBaseTest {
     @ParameterizedTest
     @MethodSource("data")
     public void test(final File imageFile) throws Exception {
-        final Map<String, Object> params = new HashMap<>();
+        final JpegImagingParameters params = new JpegImagingParameters();
         final boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
-        params.put(ImagingConstants.PARAM_KEY_READ_THUMBNAILS, 
Boolean.valueOf(!ignoreImageData));
+        params.setReadThumbnails(!ignoreImageData);
 
         final ImageMetadata metadata = Imaging.getMetadata(imageFile, params);
         // TODO only run this tests with images that have metadata...
@@ -88,7 +84,7 @@ public class JpegReadTest extends JpegBaseTest {
         final String input = 
"/images/jpeg/oss-fuzz-33458/clusterfuzz-testcase-minimized-ImagingJpegFuzzer-4548690447564800";
         final String file = JpegReadTest.class.getResource(input).getFile();
         final JpegImageParser parser = new JpegImageParser();
-        assertThrows(ImageReadException.class, () -> 
parser.getBufferedImage(new ByteSourceFile(new File(file)), 
Collections.emptyMap()));
+        assertThrows(ImageReadException.class, () -> 
parser.getBufferedImage(new ByteSourceFile(new File(file)), new 
JpegImagingParameters()));
     }
 
 }
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/JpegWithInvalidDhtSegmentTest.java
 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/JpegWithInvalidDhtSegmentTest.java
index b0cd416..a59c7c2 100644
--- 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/JpegWithInvalidDhtSegmentTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/JpegWithInvalidDhtSegmentTest.java
@@ -18,7 +18,6 @@
 package org.apache.commons.imaging.formats.jpeg;
 
 import java.io.File;
-import java.util.Collections;
 
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.Imaging;
@@ -38,6 +37,6 @@ public class JpegWithInvalidDhtSegmentTest {
         final File imageFile = new File(JpegWithInvalidDhtSegmentTest.class
                 
.getResource("/IMAGING-215/ArrayIndexOutOfBoundsException_DhtSegment_79.jpeg")
                 .getFile());
-        Assertions.assertThrows(ImageReadException.class, () -> 
Imaging.getMetadata(imageFile, Collections.emptyMap()));
+        Assertions.assertThrows(ImageReadException.class, () -> 
Imaging.getMetadata(imageFile, new JpegImagingParameters()));
     }
 }
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/JpegWithJpegThumbnailTest.java
 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/JpegWithJpegThumbnailTest.java
index 33339e8..f0ae971 100644
--- 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/JpegWithJpegThumbnailTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/JpegWithJpegThumbnailTest.java
@@ -21,8 +21,6 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
 
 import org.apache.commons.imaging.Imaging;
 import org.apache.commons.imaging.ImagingTest;
@@ -35,7 +33,7 @@ public class JpegWithJpegThumbnailTest extends ImagingTest {
     public void testSingleImage() throws Exception {
         final File imageFile = getTestImageByName("img_F028c_small.jpg");
 
-        final Map<String, Object> params = new HashMap<>();
+        final JpegImagingParameters params = new JpegImagingParameters();
         final ImageMetadata metadata = Imaging.getMetadata(imageFile, params);
         assertNotNull(metadata);
         final JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata;
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/AsciiFieldTest.java
 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/AsciiFieldTest.java
index 6b8f254..40ee945 100644
--- 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/AsciiFieldTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/AsciiFieldTest.java
@@ -29,6 +29,7 @@ import java.util.Map;
 import org.apache.commons.imaging.Imaging;
 import org.apache.commons.imaging.common.ImageMetadata;
 import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata;
+import org.apache.commons.imaging.formats.jpeg.JpegImagingParameters;
 import org.apache.commons.imaging.formats.tiff.TiffField;
 import org.apache.commons.imaging.formats.tiff.TiffImageMetadata;
 import org.apache.commons.imaging.formats.tiff.constants.TiffTagConstants;
@@ -40,7 +41,7 @@ public class AsciiFieldTest extends ExifBaseTest {
     public void testSingleImage() throws Exception {
         final File imageFile = getTestImageByName("Canon Powershot SD750 - 
2007.12.26.n.IMG_3704.JPG");
 
-        final Map<String, Object> params = new HashMap<>();
+        final JpegImagingParameters params = new JpegImagingParameters();
 
         final ImageMetadata metadata = Imaging.getMetadata(imageFile, params);
         assertNotNull(metadata);
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/ExifDumpTest.java 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/ExifDumpTest.java
index fdb4e1e..a01cab6 100644
--- 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/ExifDumpTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/ExifDumpTest.java
@@ -20,15 +20,13 @@ package org.apache.commons.imaging.formats.jpeg.exif;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
 import java.util.stream.Stream;
 
 import org.apache.commons.imaging.Imaging;
-import org.apache.commons.imaging.ImagingConstants;
 import org.apache.commons.imaging.common.bytesource.ByteSource;
 import org.apache.commons.imaging.common.bytesource.ByteSourceFile;
 import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata;
+import org.apache.commons.imaging.formats.jpeg.JpegImagingParameters;
 import org.apache.commons.imaging.formats.jpeg.JpegUtils;
 import org.apache.commons.imaging.internal.Debug;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -52,9 +50,9 @@ public class ExifDumpTest extends ExifBaseTest {
     @ParameterizedTest
     @MethodSource("data")
     public void testMetadata(final File imageFile) throws Exception {
-        final Map<String, Object> params = new HashMap<>();
+        final JpegImagingParameters params = new JpegImagingParameters();
         final boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
-        params.put(ImagingConstants.PARAM_KEY_READ_THUMBNAILS, 
Boolean.valueOf(!ignoreImageData));
+        params.setReadThumbnails(!ignoreImageData);
 
         final JpegImageMetadata metadata = (JpegImageMetadata) 
Imaging.getMetadata(imageFile, params);
         assertNotNull(metadata);
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/GpsTest.java 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/GpsTest.java
index 7cdf91c..51eec61 100644
--- a/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/GpsTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/GpsTest.java
@@ -18,13 +18,11 @@
 package org.apache.commons.imaging.formats.jpeg.exif;
 
 import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
 import java.util.stream.Stream;
 
 import org.apache.commons.imaging.Imaging;
-import org.apache.commons.imaging.ImagingConstants;
 import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata;
+import org.apache.commons.imaging.formats.jpeg.JpegImagingParameters;
 import org.apache.commons.imaging.formats.tiff.TiffImageMetadata;
 import org.apache.commons.imaging.internal.Debug;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -43,9 +41,9 @@ public class GpsTest extends ExifBaseTest {
             return;
         }
 
-        final Map<String, Object> params = new HashMap<>();
+        final JpegImagingParameters params = new JpegImagingParameters();
         final boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
-        params.put(ImagingConstants.PARAM_KEY_READ_THUMBNAILS, 
Boolean.valueOf(!ignoreImageData));
+        params.setReadThumbnails(!ignoreImageData);
 
         final JpegImageMetadata metadata = (JpegImageMetadata) 
Imaging.getMetadata(imageFile, params);
         if (null == metadata) {
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/MicrosoftTagTest.java
 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/MicrosoftTagTest.java
index 93ee728..1859e50 100644
--- 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/MicrosoftTagTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/MicrosoftTagTest.java
@@ -24,20 +24,17 @@ import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
 
-import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.ImageWriteException;
 import org.apache.commons.imaging.Imaging;
-import org.apache.commons.imaging.ImagingConstants;
 import org.apache.commons.imaging.common.ImageMetadata;
 import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata;
 import org.apache.commons.imaging.formats.jpeg.iptc.JpegIptcRewriter;
 import org.apache.commons.imaging.formats.jpeg.xmp.JpegXmpRewriter;
 import org.apache.commons.imaging.formats.tiff.TiffDirectory;
 import org.apache.commons.imaging.formats.tiff.TiffImageMetadata;
+import org.apache.commons.imaging.formats.tiff.TiffImagingParameters;
 import org.apache.commons.imaging.formats.tiff.constants.MicrosoftTagConstants;
 import org.apache.commons.imaging.formats.tiff.constants.TiffTagConstants;
 import org.apache.commons.imaging.formats.tiff.write.TiffOutputDirectory;
@@ -59,9 +56,9 @@ public class MicrosoftTagTest extends ExifBaseTest {
         root.add(MicrosoftTagConstants.EXIF_TAG_XPCOMMENT, COMMENT);
         root.add(MicrosoftTagConstants.EXIF_TAG_XPSUBJECT, SUBJECT);
         root.add(MicrosoftTagConstants.EXIF_TAG_XPTITLE, TITLE);
-        final Map<String, Object> params = new TreeMap<>();
-        params.put(ImagingConstants.PARAM_KEY_EXIF, exifSet);
-        final byte[] bytes = Imaging.writeImageToBytes(image, 
ImageFormats.TIFF, params);
+        final TiffImagingParameters params = new TiffImagingParameters();
+        params.setExif(exifSet);
+        final byte[] bytes = Imaging.writeImageToBytes(image, params);
         checkFields(bytes);
     }
 
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/SpecificExifTagTest.java
 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/SpecificExifTagTest.java
index ac85c19..aee2f84 100644
--- 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/SpecificExifTagTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/exif/SpecificExifTagTest.java
@@ -19,17 +19,15 @@ package org.apache.commons.imaging.formats.jpeg.exif;
 
 import java.io.File;
 import java.io.IOException;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.stream.Stream;
 
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.ImageWriteException;
 import org.apache.commons.imaging.Imaging;
-import org.apache.commons.imaging.ImagingConstants;
 import org.apache.commons.imaging.common.ImageMetadata;
 import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata;
+import org.apache.commons.imaging.formats.jpeg.JpegImagingParameters;
 import org.apache.commons.imaging.formats.tiff.TiffField;
 import org.apache.commons.imaging.formats.tiff.TiffImageMetadata;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -57,9 +55,9 @@ public abstract class SpecificExifTagTest extends 
ExifBaseTest {
             ImageReadException, ImageWriteException {
         // Debug.debug("imageFile", imageFile.getAbsoluteFile());
 
-        final Map<String, Object> params = new HashMap<>();
+        final JpegImagingParameters params = new JpegImagingParameters();
         final boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
-        params.put(ImagingConstants.PARAM_KEY_READ_THUMBNAILS, 
Boolean.valueOf(!ignoreImageData));
+        params.setReadThumbnails(!ignoreImageData);
 
         // note that metadata might be null if no metadata is found.
         final ImageMetadata metadata = Imaging.getMetadata(imageFile, params);
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/iptc/IptcAddTest.java 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/iptc/IptcAddTest.java
index cd9d1bd..06476f2 100644
--- 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/iptc/IptcAddTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/iptc/IptcAddTest.java
@@ -25,15 +25,13 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.OutputStream;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.stream.Stream;
 
-import org.apache.commons.imaging.ImagingConstants;
 import org.apache.commons.imaging.common.bytesource.ByteSource;
 import org.apache.commons.imaging.common.bytesource.ByteSourceFile;
 import org.apache.commons.imaging.formats.jpeg.JpegImageParser;
+import org.apache.commons.imaging.formats.jpeg.JpegImagingParameters;
 import org.apache.commons.imaging.formats.jpeg.JpegPhotoshopMetadata;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.MethodSource;
@@ -53,9 +51,9 @@ public class IptcAddTest extends IptcBaseTest {
     public void testAddIptcData(final File imageFile) throws Exception {
         final ByteSource byteSource = new ByteSourceFile(imageFile);
 
-        final Map<String, Object> params = new HashMap<>();
+        final JpegImagingParameters params = new JpegImagingParameters();
         final boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
-        params.put(ImagingConstants.PARAM_KEY_READ_THUMBNAILS, 
Boolean.valueOf(!ignoreImageData));
+        params.setReadThumbnails(!ignoreImageData);
 
         final JpegPhotoshopMetadata metadata = new 
JpegImageParser().getPhotoshopMetadata(byteSource, params);
         if (metadata == null) {
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/iptc/IptcDumpTest.java 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/iptc/IptcDumpTest.java
index 1ee9e22..0d4656f 100644
--- 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/iptc/IptcDumpTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/iptc/IptcDumpTest.java
@@ -20,14 +20,12 @@ package org.apache.commons.imaging.formats.jpeg.iptc;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.io.File;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.stream.Stream;
 
 import org.apache.commons.imaging.Imaging;
-import org.apache.commons.imaging.ImagingConstants;
 import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata;
+import org.apache.commons.imaging.formats.jpeg.JpegImagingParameters;
 import org.apache.commons.imaging.formats.jpeg.JpegPhotoshopMetadata;
 import org.apache.commons.imaging.internal.Debug;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -42,9 +40,9 @@ public class IptcDumpTest extends IptcBaseTest {
     @ParameterizedTest
     @MethodSource("data")
     public void test(final File imageFile) throws Exception {
-        final Map<String, Object> params = new HashMap<>();
+        final JpegImagingParameters params = new JpegImagingParameters();
         final boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
-        params.put(ImagingConstants.PARAM_KEY_READ_THUMBNAILS, 
Boolean.valueOf(!ignoreImageData));
+        params.setReadThumbnails(!ignoreImageData);
 
         final JpegImageMetadata metadata = (JpegImageMetadata) 
Imaging.getMetadata(imageFile, params);
         assertNotNull(metadata);
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/iptc/IptcParserTest.java
 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/iptc/IptcParserTest.java
index afacb8f..f891190 100644
--- 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/iptc/IptcParserTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/iptc/IptcParserTest.java
@@ -24,7 +24,6 @@ import static org.junit.jupiter.api.Assertions.fail;
 import java.io.File;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
-import java.util.HashMap;
 import java.util.List;
 
 import org.apache.commons.imaging.ImageReadException;
@@ -32,6 +31,7 @@ import 
org.apache.commons.imaging.common.GenericImageMetadata.GenericImageMetada
 import org.apache.commons.imaging.common.bytesource.ByteSourceFile;
 import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata;
 import org.apache.commons.imaging.formats.jpeg.JpegImageParser;
+import org.apache.commons.imaging.formats.jpeg.JpegImagingParameters;
 import org.apache.commons.imaging.formats.jpeg.JpegPhotoshopMetadata;
 import org.junit.jupiter.api.Test;
 
@@ -65,7 +65,7 @@ public class IptcParserTest {
                 .getFile();
         final File imageFile = new File(location);
         final JpegImageMetadata metadata = (JpegImageMetadata) new 
JpegImageParser()
-                .getMetadata(new ByteSourceFile(imageFile), new HashMap<>());
+                .getMetadata(new ByteSourceFile(imageFile), new 
JpegImagingParameters());
         final JpegPhotoshopMetadata photoshopMetadata = 
metadata.getPhotoshop();
         final PhotoshopApp13Data photoshopApp13Data = 
photoshopMetadata.photoshopApp13Data;
         final List<IptcBlock> blocks = photoshopApp13Data.getRawBlocks();
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/iptc/IptcUpdateTest.java
 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/iptc/IptcUpdateTest.java
index 8adb66b..33abc91 100644
--- 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/iptc/IptcUpdateTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/iptc/IptcUpdateTest.java
@@ -27,17 +27,15 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.stream.Stream;
 
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.ImageWriteException;
-import org.apache.commons.imaging.ImagingConstants;
 import org.apache.commons.imaging.common.bytesource.ByteSource;
 import org.apache.commons.imaging.common.bytesource.ByteSourceFile;
 import org.apache.commons.imaging.formats.jpeg.JpegImageParser;
+import org.apache.commons.imaging.formats.jpeg.JpegImagingParameters;
 import org.apache.commons.imaging.formats.jpeg.JpegPhotoshopMetadata;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.MethodSource;
@@ -56,9 +54,9 @@ public class IptcUpdateTest extends IptcBaseTest {
     public void testRemove(final File imageFile) throws Exception {
         final ByteSource byteSource = new ByteSourceFile(imageFile);
 
-        final Map<String, Object> params = new HashMap<>();
+        final JpegImagingParameters params = new JpegImagingParameters();
         final boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
-        params.put(ImagingConstants.PARAM_KEY_READ_THUMBNAILS, 
Boolean.valueOf(!ignoreImageData));
+        params.setReadThumbnails(!ignoreImageData);
 
         final JpegPhotoshopMetadata metadata = new 
JpegImageParser().getPhotoshopMetadata(
                 byteSource, params);
@@ -88,9 +86,9 @@ public class IptcUpdateTest extends IptcBaseTest {
     public void testInsert(final File imageFile) throws Exception {
         final ByteSource byteSource = new ByteSourceFile(imageFile);
 
-        final Map<String, Object> params = new HashMap<>();
+        final JpegImagingParameters params = new JpegImagingParameters();
         final boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
-        params.put(ImagingConstants.PARAM_KEY_READ_THUMBNAILS, 
Boolean.valueOf(!ignoreImageData));
+        params.setReadThumbnails(!ignoreImageData);
 
         final JpegPhotoshopMetadata metadata = new 
JpegImageParser().getPhotoshopMetadata(
                 byteSource, params);
@@ -129,9 +127,9 @@ public class IptcUpdateTest extends IptcBaseTest {
     public void testUpdate(final File imageFile) throws Exception {
         final ByteSource byteSource = new ByteSourceFile(imageFile);
 
-        final Map<String, Object> params = new HashMap<>();
+        final JpegImagingParameters params = new JpegImagingParameters();
         final boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
-        params.put(ImagingConstants.PARAM_KEY_READ_THUMBNAILS, 
Boolean.valueOf(!ignoreImageData));
+        params.setReadThumbnails(!ignoreImageData);
 
         final JpegPhotoshopMetadata metadata = new 
JpegImageParser().getPhotoshopMetadata(byteSource, params);
         assertNotNull(metadata);
@@ -171,9 +169,9 @@ public class IptcUpdateTest extends IptcBaseTest {
     public void testNoChangeUpdate(final File imageFile) throws Exception {
         final ByteSource byteSource = new ByteSourceFile(imageFile);
 
-        final Map<String, Object> params = new HashMap<>();
+        final JpegImagingParameters params = new JpegImagingParameters();
         final boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
-        params.put(ImagingConstants.PARAM_KEY_READ_THUMBNAILS, 
Boolean.valueOf(!ignoreImageData));
+        params.setReadThumbnails(!ignoreImageData);
 
         final JpegPhotoshopMetadata metadata = new 
JpegImageParser().getPhotoshopMetadata(byteSource, params);
         assertNotNull(metadata);
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/segments/NegSizeSegmentTest.java
 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/segments/NegSizeSegmentTest.java
index 16c7132..dfa26b2 100644
--- 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/segments/NegSizeSegmentTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/segments/NegSizeSegmentTest.java
@@ -22,12 +22,12 @@ import static org.junit.jupiter.api.Assertions.fail;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.HashMap;
 
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.common.bytesource.ByteSource;
 import org.apache.commons.imaging.common.bytesource.ByteSourceInputStream;
 import org.apache.commons.imaging.formats.jpeg.JpegImageParser;
+import org.apache.commons.imaging.formats.jpeg.JpegImagingParameters;
 import org.apache.commons.imaging.formats.jpeg.JpegUtils;
 import org.junit.jupiter.api.Test;
 
@@ -49,7 +49,7 @@ public class NegSizeSegmentTest {
             final InputStream inputStream = new ByteArrayInputStream(bytes);
             final ByteSource bs = new ByteSourceInputStream(inputStream, 
"NegSizeSegment");
             final JpegImageParser p = new JpegImageParser();
-            p.getBufferedImage(bs, new HashMap<String, Object>());
+            p.getBufferedImage(bs, new JpegImagingParameters());
             fail("Expecting exception: ImageReadException");
         } catch (final ImageReadException e) {
             assertEquals("Invalid segment size", e.getMessage());
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/xmp/JpegXmpDumpTest.java
 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/xmp/JpegXmpDumpTest.java
index e9f0d0e..001b7b1 100644
--- 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/xmp/JpegXmpDumpTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/xmp/JpegXmpDumpTest.java
@@ -20,13 +20,12 @@ package org.apache.commons.imaging.formats.jpeg.xmp;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
 import java.util.stream.Stream;
 
 import org.apache.commons.imaging.common.bytesource.ByteSource;
 import org.apache.commons.imaging.common.bytesource.ByteSourceFile;
 import org.apache.commons.imaging.formats.jpeg.JpegImageParser;
+import org.apache.commons.imaging.formats.jpeg.JpegImagingParameters;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.MethodSource;
 
@@ -40,7 +39,7 @@ public class JpegXmpDumpTest extends JpegXmpBaseTest {
     @MethodSource("data")
     public void test(final File imageFile) throws Exception {
         final ByteSource byteSource = new ByteSourceFile(imageFile);
-        final Map<String, Object> params = new HashMap<>();
+        final JpegImagingParameters params = new JpegImagingParameters();
         final String xmpXml = new JpegImageParser().getXmpXml(byteSource, 
params);
 
         // TODO assert more
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/xmp/JpegXmpRewriteTest.java
 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/xmp/JpegXmpRewriteTest.java
index b442920..7087e15 100644
--- 
a/src/test/java/org/apache/commons/imaging/formats/jpeg/xmp/JpegXmpRewriteTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/formats/jpeg/xmp/JpegXmpRewriteTest.java
@@ -24,13 +24,12 @@ import java.io.BufferedOutputStream;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.OutputStream;
-import java.util.HashMap;
-import java.util.Map;
 import java.util.stream.Stream;
 
 import org.apache.commons.imaging.common.bytesource.ByteSource;
 import org.apache.commons.imaging.common.bytesource.ByteSourceFile;
 import org.apache.commons.imaging.formats.jpeg.JpegImageParser;
+import org.apache.commons.imaging.formats.jpeg.JpegImagingParameters;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.MethodSource;
@@ -45,7 +44,7 @@ public class JpegXmpRewriteTest extends JpegXmpBaseTest {
     @MethodSource("data")
     public void testRemoveInsertUpdate(final File imageFile) throws Exception {
         final ByteSource byteSource = new ByteSourceFile(imageFile);
-        final Map<String, Object> params = new HashMap<>();
+        final JpegImagingParameters params = new JpegImagingParameters();
         final String xmpXml = new JpegImageParser().getXmpXml(byteSource, 
params);
         assertNotNull(xmpXml);
 
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/pam/PamReadTest.java 
b/src/test/java/org/apache/commons/imaging/formats/pam/PamReadTest.java
index a68bcb0..9519710 100644
--- a/src/test/java/org/apache/commons/imaging/formats/pam/PamReadTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/pam/PamReadTest.java
@@ -21,13 +21,12 @@ import static 
org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.Imaging;
 import org.apache.commons.imaging.common.ImageMetadata;
+import org.apache.commons.imaging.formats.pnm.PnmImagingParameters;
 import org.apache.commons.imaging.internal.Debug;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
@@ -46,7 +45,7 @@ public class PamReadTest extends PamBaseTest {
             final ImageMetadata metadata = Imaging.getMetadata(imageFile);
             Assertions.assertFalse(metadata instanceof File); // Dummy check 
to avoid unused warning (it may be null)
 
-            final Map<String, Object> params = new HashMap<>();
+            final PnmImagingParameters params = new PnmImagingParameters();
             final ImageInfo imageInfo = Imaging.getImageInfo(imageFile, 
params);
             assertNotNull(imageInfo);
 
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/pcx/PcxReadTest.java 
b/src/test/java/org/apache/commons/imaging/formats/pcx/PcxReadTest.java
index a100460..4e22588 100644
--- a/src/test/java/org/apache/commons/imaging/formats/pcx/PcxReadTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/pcx/PcxReadTest.java
@@ -21,9 +21,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.Imaging;
@@ -46,11 +44,11 @@ public class PcxReadTest extends PcxBaseTest {
             final ImageMetadata metadata = Imaging.getMetadata(imageFile);
             Assertions.assertFalse(metadata instanceof File); // Dummy check 
to avoid unused warning (it may be null)
 
-            final Map<String, Object> params = new HashMap<>();
+            final PcxImagingParameters params = new PcxImagingParameters();
             final ImageInfo imageInfo = Imaging.getImageInfo(imageFile, 
params);
             assertNotNull(imageInfo);
 
-            final BufferedImage image = Imaging.getBufferedImage(imageFile);
+            final BufferedImage image = Imaging.getBufferedImage(imageFile, 
params);
             assertNotNull(image);
         }
     }
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/png/ConvertPngToGifTest.java 
b/src/test/java/org/apache/commons/imaging/formats/png/ConvertPngToGifTest.java
index cd754b3..30e8a47 100644
--- 
a/src/test/java/org/apache/commons/imaging/formats/png/ConvertPngToGifTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/formats/png/ConvertPngToGifTest.java
@@ -21,12 +21,10 @@ import static 
org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
-import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.Imaging;
+import org.apache.commons.imaging.formats.gif.GifImagingParameters;
 import org.apache.commons.imaging.internal.Debug;
 import org.junit.jupiter.api.Test;
 
@@ -41,21 +39,17 @@ public class ConvertPngToGifTest extends PngBaseTest {
             if (isInvalidPNGTestFile(imageFile))
              {
                 continue;
-            // Debug.debug("imageFile", imageFile);
-            // Debug.debug();
             }
 
-            final Map<String, Object> params = new HashMap<>();
-            // params.put(ImagingConstants.PARAM_KEY_VERBOSE, Boolean.TRUE);
+            final PngImagingParameters pngParams = new PngImagingParameters();
 
-            final BufferedImage image = Imaging.getBufferedImage(imageFile, 
params);
+            final BufferedImage image = Imaging.getBufferedImage(imageFile, 
pngParams);
             assertNotNull(image);
 
             final File outFile = File.createTempFile(imageFile.getName() + 
".", ".gif");
-            // Debug.debug("outFile", outFile);
 
-            Imaging.writeImage(image, outFile, ImageFormats.GIF,
-                    params);
+            final GifImagingParameters gifParams = new GifImagingParameters();
+            Imaging.writeImage(image, outFile, gifParams);
         }
         Debug.debug("complete.");
     }
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/png/PngMultipleRoundtripTest.java
 
b/src/test/java/org/apache/commons/imaging/formats/png/PngMultipleRoundtripTest.java
index 4c0e930..d224fab 100644
--- 
a/src/test/java/org/apache/commons/imaging/formats/png/PngMultipleRoundtripTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/formats/png/PngMultipleRoundtripTest.java
@@ -22,10 +22,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
 
-import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.Imaging;
 import org.apache.commons.imaging.internal.Debug;
 import org.apache.commons.io.FilenameUtils;
@@ -55,20 +52,17 @@ public class PngMultipleRoundtripTest extends PngBaseTest {
 
             File lastFile = imageFile;
             for (int j = 0; j < 10; j++) {
-                final Map<String, Object> readParams = new HashMap<>();
+                final PngImagingParameters readParams = new 
PngImagingParameters();
                 // readParams.put(ImagingConstants.BUFFERED_IMAGE_FACTORY,
                 // new RgbBufferedImageFactory());
-                final BufferedImage image = Imaging.getBufferedImage(lastFile,
-                        readParams);
+                final BufferedImage image = Imaging.getBufferedImage(lastFile, 
readParams);
                 assertNotNull(image);
 
-                final File tempFile = File.createTempFile(imageFile.getName() 
+ "." + j
-                        + ".", ".png");
+                final File tempFile = File.createTempFile(imageFile.getName() 
+ "." + j + ".", ".png");
                 Debug.debug("tempFile", tempFile);
 
-                final Map<String, Object> writeParams = new HashMap<>();
-                Imaging.writeImage(image, tempFile,
-                        ImageFormats.PNG, writeParams);
+                final PngImagingParameters writeParams = new 
PngImagingParameters();
+                Imaging.writeImage(image, tempFile, writeParams);
 
                 lastFile = tempFile;
             }
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/png/PngTextTest.java 
b/src/test/java/org/apache/commons/imaging/formats/png/PngTextTest.java
index bc4957d..b590dad 100644
--- a/src/test/java/org/apache/commons/imaging/formats/png/PngTextTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/png/PngTextTest.java
@@ -25,11 +25,8 @@ import java.awt.Color;
 import java.awt.image.BufferedImage;
 import java.io.File;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
-import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.Imaging;
 import org.apache.commons.io.FileUtils;
 import org.junit.jupiter.api.Test;
@@ -44,7 +41,7 @@ public class PngTextTest extends PngBaseTest {
                 BufferedImage.TYPE_INT_ARGB);
         srcImage.setRGB(0, 0, Color.red.getRGB());
 
-        final Map<String, Object> writeParams = new HashMap<>();
+        final PngImagingParameters writeParams = new PngImagingParameters();
 
         final List<PngText> writeTexts = new ArrayList<>();
         {
@@ -66,10 +63,9 @@ public class PngTextTest extends PngBaseTest {
                     translatedKeyword));
         }
 
-        writeParams.put(PngConstants.PARAM_KEY_PNG_TEXT_CHUNKS, writeTexts);
+        writeParams.setTextChunks(writeTexts);
 
-        final byte[] bytes = Imaging.writeImageToBytes(srcImage,
-                ImageFormats.PNG, writeParams);
+        final byte[] bytes = Imaging.writeImageToBytes(srcImage, writeParams);
 
         final File tempFile = File.createTempFile("temp", ".png");
         FileUtils.writeByteArrayToFile(tempFile, bytes);
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/png/PngWithInvalidPngChunkSizeTest.java
 
b/src/test/java/org/apache/commons/imaging/formats/png/PngWithInvalidPngChunkSizeTest.java
index f59c478..c631ae3 100644
--- 
a/src/test/java/org/apache/commons/imaging/formats/png/PngWithInvalidPngChunkSizeTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/formats/png/PngWithInvalidPngChunkSizeTest.java
@@ -18,12 +18,9 @@
 package org.apache.commons.imaging.formats.png;
 
 import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
 
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.Imaging;
-import org.apache.commons.imaging.ImagingConstants;
 import 
org.apache.commons.imaging.examples.ImageReadExample.ManagedImageBufferedImageFactory;
 import org.apache.commons.imaging.formats.jpeg.JpegWithInvalidDhtSegmentTest;
 import org.junit.jupiter.api.Assertions;
@@ -42,8 +39,8 @@ public class PngWithInvalidPngChunkSizeTest {
        public void testPngWithInvalidPngChunkSize() {
                final File imageFile = new File(
                                
JpegWithInvalidDhtSegmentTest.class.getResource("/IMAGING-211/testfile_2.png").getFile());
-               final Map<String, Object> params = new HashMap<>();
-               params.put(ImagingConstants.BUFFERED_IMAGE_FACTORY, new 
ManagedImageBufferedImageFactory());
+               final PngImagingParameters params = new PngImagingParameters();
+        params.setBufferedImageFactory(new ManagedImageBufferedImageFactory());
                Assertions.assertThrows(ImageReadException.class, () -> 
Imaging.getBufferedImage(imageFile, params));
        }
 
@@ -55,8 +52,8 @@ public class PngWithInvalidPngChunkSizeTest {
     public void testPngWithInvalidNegativePngChunkSize() {
         final File imageFile = new File(
                 
JpegWithInvalidDhtSegmentTest.class.getResource("/IMAGING-210/testfile.png").getFile());
-        final Map<String, Object> params = new HashMap<>();
-        params.put(ImagingConstants.BUFFERED_IMAGE_FACTORY, new 
ManagedImageBufferedImageFactory());
+        final PngImagingParameters params = new PngImagingParameters();
+        params.setBufferedImageFactory(new ManagedImageBufferedImageFactory());
         Assertions.assertThrows(ImageReadException.class, () -> 
Imaging.getBufferedImage(imageFile, params));
     }
 }
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/png/PngWriteForceTrueColorText.java
 
b/src/test/java/org/apache/commons/imaging/formats/png/PngWriteForceTrueColorText.java
index 41c9d35..609e1be 100644
--- 
a/src/test/java/org/apache/commons/imaging/formats/png/PngWriteForceTrueColorText.java
+++ 
b/src/test/java/org/apache/commons/imaging/formats/png/PngWriteForceTrueColorText.java
@@ -21,11 +21,8 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
-import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.Imaging;
 import org.apache.commons.imaging.internal.Debug;
 import org.junit.jupiter.api.Test;
@@ -49,21 +46,17 @@ public class PngWriteForceTrueColorText extends PngBaseTest 
{
                 // params.put(ImagingConstants.PARAM_KEY_VERBOSE,
                 // Boolean.TRUE);
 
-                final BufferedImage image = Imaging.getBufferedImage(imageFile,
-                        new HashMap<String, Object>());
+                final BufferedImage image = 
Imaging.getBufferedImage(imageFile, new PngImagingParameters());
                 assertNotNull(image);
 
                 final File outFile = File.createTempFile(imageFile.getName() + 
".", ".gif");
                 // Debug.debug("outFile", outFile);
 
-                final Map<String, Object> params = new HashMap<>();
-                params.put(PngConstants.PARAM_KEY_PNG_FORCE_TRUE_COLOR,
-                        Boolean.TRUE);
-                Imaging.writeImage(image, outFile,
-                        ImageFormats.PNG, params);
+                final PngImagingParameters params = new PngImagingParameters();
+                params.setForceTrueColor(Boolean.TRUE);
+                Imaging.writeImage(image, outFile, params);
 
-                final BufferedImage image2 = Imaging.getBufferedImage(outFile,
-                        new HashMap<String, Object>());
+                final BufferedImage image2 = Imaging.getBufferedImage(outFile, 
new PngImagingParameters());
                 assertNotNull(image2);
             } catch (final Exception e) {
                 Debug.debug("imageFile", imageFile);
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/png/PngWriteReadTest.java 
b/src/test/java/org/apache/commons/imaging/formats/png/PngWriteReadTest.java
index e045a6c..51d1695 100644
--- a/src/test/java/org/apache/commons/imaging/formats/png/PngWriteReadTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/png/PngWriteReadTest.java
@@ -25,13 +25,10 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
-import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Map;
 import java.util.Random;
 
-import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.ImageWriteException;
 import org.apache.commons.imaging.Imaging;
@@ -42,10 +39,6 @@ import org.apache.commons.io.FileUtils;
 import org.junit.jupiter.api.Test;
 
 public class PngWriteReadTest extends ImagingTest {
-    // public PngWriteReadTest(String name)
-    // {
-    // super(name);
-    // }
 
     private int[][] getSimpleRawData(final int width, final int height, final 
int value) {
         final int[][] result = new int[height][width];
@@ -113,21 +106,17 @@ public class PngWriteReadTest extends ImagingTest {
     public void testTransparency() throws Exception {
         // Test for https://issues.apache.org/jira/browse/SANSELAN-52
         final int[][] smallAscendingPixels = getAscendingRawData(256, 256);
-        final byte[] pngBytes = Imaging.writeImageToBytes(
-                imageDataToBufferedImage(smallAscendingPixels),
-                ImageFormats.PNG, null);
+        final byte[] pngBytes = 
Imaging.writeImageToBytes(imageDataToBufferedImage(smallAscendingPixels), new 
PngImagingParameters());
         assertTrue(Imaging.getImageInfo(pngBytes).isTransparent());
     }
 
     @Test
     public void testPhysicalScaleMeters() throws Exception {
-        final Map<String, Object> optionalParams = new HashMap<>();
-        optionalParams.put(PngConstants.PARAM_KEY_PHYSICAL_SCALE, 
PhysicalScale.createFromMeters(0.01, 0.02));
+        final PngImagingParameters optionalParams = new PngImagingParameters();
+        optionalParams.setPhysicalScale(PhysicalScale.createFromMeters(0.01, 
0.02));
 
         final int[][] smallAscendingPixels = getAscendingRawData(256, 256);
-        final byte[] pngBytes = Imaging.writeImageToBytes(
-              imageDataToBufferedImage(smallAscendingPixels),
-              ImageFormats.PNG, optionalParams);
+        final byte[] pngBytes = 
Imaging.writeImageToBytes(imageDataToBufferedImage(smallAscendingPixels), 
optionalParams);
         final PngImageInfo imageInfo = (PngImageInfo) 
Imaging.getImageInfo(pngBytes);
         final PhysicalScale physicalScale = imageInfo.getPhysicalScale();
         assertTrue(physicalScale.isInMeters());
@@ -137,13 +126,11 @@ public class PngWriteReadTest extends ImagingTest {
 
     @Test
     public void testPhysicalScaleRadians() throws Exception {
-        final Map<String, Object> optionalParams = new HashMap<>();
-        optionalParams.put(PngConstants.PARAM_KEY_PHYSICAL_SCALE, 
PhysicalScale.createFromRadians(0.01, 0.02));
+        final PngImagingParameters optionalParams = new PngImagingParameters();
+        optionalParams.setPhysicalScale(PhysicalScale.createFromRadians(0.01, 
0.02));
 
         final int[][] smallAscendingPixels = getAscendingRawData(256, 256);
-        final byte[] pngBytes = Imaging.writeImageToBytes(
-              imageDataToBufferedImage(smallAscendingPixels),
-              ImageFormats.PNG, optionalParams);
+        final byte[] pngBytes = 
Imaging.writeImageToBytes(imageDataToBufferedImage(smallAscendingPixels), 
optionalParams);
         final PngImageInfo imageInfo = (PngImageInfo) 
Imaging.getImageInfo(pngBytes);
         final PhysicalScale physicalScale = imageInfo.getPhysicalScale();
         assertTrue(physicalScale.isInRadians());
@@ -181,14 +168,13 @@ public class PngWriteReadTest extends ImagingTest {
             ImageReadException, ImageWriteException {
         final BufferedImage srcImage = imageDataToBufferedImage(rawData);
 
-        final Map<String, Object> writeParams = new HashMap<>();
+        final PngImagingParameters writeParams = new PngImagingParameters();
         // writeParams.put(ImagingConstants.PARAM_KEY_FORMAT,
         // ImageFormat.IMAGE_FORMAT_PNG);
         // writeParams.put(PngConstants.PARAM_KEY_PNG_FORCE_TRUE_COLOR,
         // Boolean.TRUE);
 
-        final byte[] bytes = Imaging.writeImageToBytes(srcImage,
-                ImageFormats.PNG, writeParams);
+        final byte[] bytes = Imaging.writeImageToBytes(srcImage, writeParams);
 
         // Debug.debug("bytes", bytes);
 
@@ -212,12 +198,10 @@ public class PngWriteReadTest extends ImagingTest {
         final List<PngText.Text> textChunks = new LinkedList<>();
         textChunks.add(new PngText.Text("a", "b"));
         textChunks.add(new PngText.Text("c", "d"));
-        final Map<String, Object> writeParams = new HashMap<>();
-        writeParams.put(PngConstants.PARAM_KEY_PNG_TEXT_CHUNKS,
-           textChunks);
+        final PngImagingParameters writeParams = new PngImagingParameters();
+        writeParams.setTextChunks(textChunks);
 
-        final byte[] bytes = Imaging.writeImageToBytes(srcImage,
-           ImageFormats.PNG, writeParams);
+        final byte[] bytes = Imaging.writeImageToBytes(srcImage, writeParams);
 
         // Debug.debug("bytes", bytes);
 
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/pnm/PnmImageParserTest.java 
b/src/test/java/org/apache/commons/imaging/formats/pnm/PnmImageParserTest.java
index 270fa5f..3f73f19 100644
--- 
a/src/test/java/org/apache/commons/imaging/formats/pnm/PnmImageParserTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/formats/pnm/PnmImageParserTest.java
@@ -24,11 +24,7 @@ import java.awt.image.DataBufferInt;
 import java.io.IOException;
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
 
-import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.ImageWriteException;
@@ -43,7 +39,7 @@ public class PnmImageParserTest {
     @Test
     public void testGetImageInfo_happyCase() throws ImageReadException, 
IOException {
         final byte[] bytes = "P1\n3 2\n0 1 0\n1 0 1\n".getBytes(US_ASCII);
-        final Map<String, Object> params = Collections.emptyMap();
+        final PnmImagingParameters params = new PnmImagingParameters();
         final PnmImageParser underTest = new PnmImageParser();
         final ImageInfo results = underTest.getImageInfo(bytes, params);
         assertEquals(results.getBitsPerPixel(), 1);
@@ -56,10 +52,10 @@ public class PnmImageParserTest {
     public void testWriteImageRaw_happyCase() throws ImageWriteException,
                                                      ImageReadException, 
IOException {
         final BufferedImage srcImage = new BufferedImage(10, 10, 
BufferedImage.TYPE_INT_ARGB);
-        final Map<String, Object> params = new HashMap<>();
-        params.put(PnmImageParser.PARAM_KEY_PNM_RAWBITS, 
PnmImageParser.PARAM_VALUE_PNM_RAWBITS_YES);
+        final PnmImagingParameters params = new PnmImagingParameters();
+        params.setRawBits(Boolean.TRUE);
 
-        final byte[] dstBytes = Imaging.writeImageToBytes(srcImage, 
ImageFormats.PNM, params);
+        final byte[] dstBytes = Imaging.writeImageToBytes(srcImage, params);
         final BufferedImage dstImage = Imaging.getBufferedImage(dstBytes);
 
         assertEquals(srcImage.getWidth(), dstImage.getWidth());
@@ -83,7 +79,7 @@ public class PnmImageParserTest {
     @Test
     public void testGetImageInfo_invalidWidth() {
         final byte[] bytes = "P1\na 2\n0 0 0 0 0 0 0 0 0 0 0\n1 1 1 1 1 1 1 1 
1 1 1\n".getBytes(US_ASCII);
-        final Map<String, Object> params = Collections.emptyMap();
+        final PnmImagingParameters params = new PnmImagingParameters();
         final PnmImageParser underTest = new PnmImageParser();
         Assertions.assertThrows(ImageReadException.class, () -> 
underTest.getImageInfo(bytes, params));
     }
@@ -91,7 +87,7 @@ public class PnmImageParserTest {
     @Test
     public void testGetImageInfo_invalidHeight() {
         final byte[] bytes = "P1\n2 a\n0 0\n0 0\n0 0\n0 0\n0 0\n0 1\n1 1\n1 
1\n1 1\n1 1\n1 1\n".getBytes(US_ASCII);
-        final Map<String, Object> params = Collections.emptyMap();
+        final PnmImagingParameters params = new PnmImagingParameters();
         final PnmImageParser underTest = new PnmImageParser();
         Assertions.assertThrows(ImageReadException.class, () -> 
underTest.getImageInfo(bytes, params));
     }
@@ -99,7 +95,7 @@ public class PnmImageParserTest {
     @Test
     public void testGetImageInfo_missingWidthValue() {
         final byte[] bytes = "P7\nWIDTH \n".getBytes(US_ASCII);
-        final Map<String, Object> params = Collections.emptyMap();
+        final PnmImagingParameters params = new PnmImagingParameters();
         final PnmImageParser underTest = new PnmImageParser();
         Assertions.assertThrows(ImageReadException.class, () -> 
underTest.getImageInfo(bytes, params));
     }
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/psd/PsdReadTest.java 
b/src/test/java/org/apache/commons/imaging/formats/psd/PsdReadTest.java
index 37043c4..362ae87 100644
--- a/src/test/java/org/apache/commons/imaging/formats/psd/PsdReadTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/psd/PsdReadTest.java
@@ -20,9 +20,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.Imaging;
@@ -45,7 +43,7 @@ public class PsdReadTest extends PsdBaseTest {
             final ImageMetadata metadata = Imaging.getMetadata(imageFile);
             Assertions.assertFalse(metadata instanceof File); // Dummy check 
to avoid unused warning (it may be null)
 
-            final Map<String, Object> params = new HashMap<>();
+            final PsdImagingParameters params = new PsdImagingParameters();
             final ImageInfo imageInfo = Imaging.getImageInfo(imageFile, 
params);
             assertNotNull(imageInfo);
 
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/rgbe/RgbeReadTest.java 
b/src/test/java/org/apache/commons/imaging/formats/rgbe/RgbeReadTest.java
index cbe05b7..7e4cfdf 100644
--- a/src/test/java/org/apache/commons/imaging/formats/rgbe/RgbeReadTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/rgbe/RgbeReadTest.java
@@ -21,9 +21,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
-import java.util.Collections;
 import java.util.List;
-import java.util.Map;
 
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.ImageReadException;
@@ -67,7 +65,7 @@ public class RgbeReadTest extends RgbeBaseTest {
                 
RgbeReadTest.class.getResource("/IMAGING-219/timeout-9713502c9c371f1654b493650c16ab17c0444369")
                         .getFile());
         final ByteSourceFile byteSourceFile = new ByteSourceFile(inputFile);
-        final Map<String, Object> params = Collections.emptyMap();
+        final RgbeImagingParameters params = new RgbeImagingParameters();
         Assertions.assertThrows(ImageReadException.class, () -> new 
RgbeImageParser().getBufferedImage(byteSourceFile, params));
     }
 }
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffAlphaRoundTripTest.java
 
b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffAlphaRoundTripTest.java
index dfd1170..a51ed31 100644
--- 
a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffAlphaRoundTripTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffAlphaRoundTripTest.java
@@ -16,14 +16,8 @@
  */
 package org.apache.commons.imaging.formats.tiff;
 
-import org.apache.commons.imaging.ImageFormats;
-import org.apache.commons.imaging.Imaging;
-import org.apache.commons.imaging.formats.tiff.constants.TiffTagConstants;
-import org.apache.commons.imaging.formats.tiff.write.TiffImageWriterLossy;
-import org.apache.commons.imaging.formats.tiff.write.TiffOutputDirectory;
-import org.apache.commons.imaging.formats.tiff.write.TiffOutputSet;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.io.TempDir;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.awt.AlphaComposite;
 import java.awt.Color;
@@ -34,10 +28,14 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.nio.ByteOrder;
 import java.nio.file.Path;
-import java.util.HashMap;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.fail;
+import org.apache.commons.imaging.Imaging;
+import org.apache.commons.imaging.formats.tiff.constants.TiffTagConstants;
+import org.apache.commons.imaging.formats.tiff.write.TiffImageWriterLossy;
+import org.apache.commons.imaging.formats.tiff.write.TiffOutputDirectory;
+import org.apache.commons.imaging.formats.tiff.write.TiffOutputSet;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
 
 /**
  * Performs a round-trip that writes an image containing Alpha and then reads 
it
@@ -82,9 +80,7 @@ public class TiffAlphaRoundTripTest {
             //         correctness of a round-trip test.
             final File file = new File(tempDir.toFile(), 
"TiffAlphaRoundTripTest.tif");
             file.delete();
-            final HashMap<String, Object> params = new HashMap<>();
-
-            Imaging.writeImage(image0, file, ImageFormats.TIFF, params);
+            Imaging.writeImage(image0, file, new TiffImagingParameters());
             final BufferedImage image1 = Imaging.getBufferedImage(file);
 
             // Step 2:  create a composite image overlaying a white background
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffCcittTest.java 
b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffCcittTest.java
index 729fb12..567b4d5 100644
--- a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffCcittTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffCcittTest.java
@@ -22,13 +22,10 @@ import static org.junit.jupiter.api.Assertions.fail;
 
 import java.awt.image.BufferedImage;
 import java.io.IOException;
-import java.util.HashMap;
 
-import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.ImageWriteException;
 import org.apache.commons.imaging.Imaging;
-import org.apache.commons.imaging.ImagingConstants;
 import org.apache.commons.imaging.common.itu_t4.T4AndT6Compression;
 import org.apache.commons.imaging.formats.tiff.constants.TiffConstants;
 import org.apache.commons.imaging.internal.Debug;
@@ -160,11 +157,9 @@ public class TiffCcittTest extends TiffBaseTest {
             }
 
             try {
-                final HashMap<String, Object> params = new HashMap<>();
-                params.put(ImagingConstants.PARAM_KEY_COMPRESSION,
-                        TiffConstants.TIFF_COMPRESSION_CCITT_1D);
-                final byte[] compressed = Imaging.writeImageToBytes(image,
-                        ImageFormats.TIFF, params);
+                final TiffImagingParameters params = new 
TiffImagingParameters();
+                params.setCompression(TiffConstants.TIFF_COMPRESSION_CCITT_1D);
+                final byte[] compressed = Imaging.writeImageToBytes(image, 
params);
                 final BufferedImage result = 
Imaging.getBufferedImage(compressed);
                 compareImages(image, result);
             } catch (final ImageWriteException | ImageReadException | 
IOException ex) {
@@ -173,12 +168,10 @@ public class TiffCcittTest extends TiffBaseTest {
             }
 
             try {
-                final HashMap<String, Object> params = new HashMap<>();
-                params.put(ImagingConstants.PARAM_KEY_COMPRESSION,
-                        TiffConstants.TIFF_COMPRESSION_CCITT_GROUP_3);
-                params.put(TiffConstants.PARAM_KEY_T4_OPTIONS, 0);
-                final byte[] compressed = Imaging.writeImageToBytes(image,
-                        ImageFormats.TIFF, params);
+                final TiffImagingParameters params = new 
TiffImagingParameters();
+                
params.setCompression(TiffConstants.TIFF_COMPRESSION_CCITT_GROUP_3);
+                params.setT4Options(0);
+                final byte[] compressed = Imaging.writeImageToBytes(image, 
params);
                 final BufferedImage result = 
Imaging.getBufferedImage(compressed);
                 compareImages(image, result);
             } catch (final ImageWriteException | ImageReadException | 
IOException ex) {
@@ -187,12 +180,10 @@ public class TiffCcittTest extends TiffBaseTest {
             }
 
             try {
-                final HashMap<String, Object> params = new HashMap<>();
-                params.put(ImagingConstants.PARAM_KEY_COMPRESSION,
-                        TiffConstants.TIFF_COMPRESSION_CCITT_GROUP_3);
-                params.put(TiffConstants.PARAM_KEY_T4_OPTIONS, 4);
-                final byte[] compressed = Imaging.writeImageToBytes(image,
-                        ImageFormats.TIFF, params);
+                final TiffImagingParameters params = new 
TiffImagingParameters();
+                
params.setCompression(TiffConstants.TIFF_COMPRESSION_CCITT_GROUP_3);
+                params.setT4Options(4);
+                final byte[] compressed = Imaging.writeImageToBytes(image, 
params);
                 final BufferedImage result = 
Imaging.getBufferedImage(compressed);
                 compareImages(image, result);
             } catch (final ImageWriteException | ImageReadException | 
IOException ex) {
@@ -201,12 +192,10 @@ public class TiffCcittTest extends TiffBaseTest {
             }
 
             try {
-                final HashMap<String, Object> params = new HashMap<>();
-                params.put(ImagingConstants.PARAM_KEY_COMPRESSION,
-                        TiffConstants.TIFF_COMPRESSION_CCITT_GROUP_3);
-                params.put(TiffConstants.PARAM_KEY_T4_OPTIONS, 1);
-                final byte[] compressed = Imaging.writeImageToBytes(image,
-                        ImageFormats.TIFF, params);
+                final TiffImagingParameters params = new 
TiffImagingParameters();
+                
params.setCompression(TiffConstants.TIFF_COMPRESSION_CCITT_GROUP_3);
+                params.setT4Options(1);
+                final byte[] compressed = Imaging.writeImageToBytes(image, 
params);
                 final BufferedImage result = 
Imaging.getBufferedImage(compressed);
                 compareImages(image, result);
             } catch (final ImageWriteException | ImageReadException | 
IOException ex) {
@@ -215,12 +204,10 @@ public class TiffCcittTest extends TiffBaseTest {
             }
 
             try {
-                final HashMap<String, Object> params = new HashMap<>();
-                params.put(ImagingConstants.PARAM_KEY_COMPRESSION,
-                        TiffConstants.TIFF_COMPRESSION_CCITT_GROUP_3);
-                params.put(TiffConstants.PARAM_KEY_T4_OPTIONS, 5);
-                final byte[] compressed = Imaging.writeImageToBytes(image,
-                        ImageFormats.TIFF, params);
+                final TiffImagingParameters params = new 
TiffImagingParameters();
+                
params.setCompression(TiffConstants.TIFF_COMPRESSION_CCITT_GROUP_3);
+                params.setT4Options(5);
+                final byte[] compressed = Imaging.writeImageToBytes(image, 
params);
                 final BufferedImage result = 
Imaging.getBufferedImage(compressed);
                 compareImages(image, result);
             } catch (final ImageWriteException | ImageReadException | 
IOException ex) {
@@ -229,11 +216,9 @@ public class TiffCcittTest extends TiffBaseTest {
             }
 
             try {
-                final HashMap<String, Object> params = new HashMap<>();
-                params.put(ImagingConstants.PARAM_KEY_COMPRESSION,
-                        TiffConstants.TIFF_COMPRESSION_CCITT_GROUP_4);
-                final byte[] compressed = Imaging.writeImageToBytes(image,
-                        ImageFormats.TIFF, params);
+                final TiffImagingParameters params = new 
TiffImagingParameters();
+                
params.setCompression(TiffConstants.TIFF_COMPRESSION_CCITT_GROUP_4);
+                final byte[] compressed = Imaging.writeImageToBytes(image, 
params);
                 final BufferedImage result = 
Imaging.getBufferedImage(compressed);
                 compareImages(image, result);
             } catch (final ImageWriteException | ImageReadException | 
IOException ex) {
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffFloatingPointReadTest.java
 
b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffFloatingPointReadTest.java
index b9aebb6..2fbf933 100644
--- 
a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffFloatingPointReadTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffFloatingPointReadTest.java
@@ -26,15 +26,12 @@ import java.io.File;
 import java.io.IOException;
 import java.nio.ByteOrder;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import org.apache.commons.imaging.FormatCompliance;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.ImagingTestConstants;
 import org.apache.commons.imaging.common.bytesource.ByteSourceFile;
-import org.apache.commons.imaging.formats.tiff.constants.TiffConstants;
 import 
org.apache.commons.imaging.formats.tiff.photometricinterpreters.floatingpoint.PaletteEntry;
 import 
org.apache.commons.imaging.formats.tiff.photometricinterpreters.floatingpoint.PaletteEntryForRange;
 import 
org.apache.commons.imaging.formats.tiff.photometricinterpreters.floatingpoint.PaletteEntryForValue;
@@ -92,8 +89,8 @@ public class TiffFloatingPointReadTest {
         pList.add(new PaletteEntryForValue(fNot, Color.red));
         pList.add(new PaletteEntryForRange(f0, f1, Color.black, Color.white));
         final PhotometricInterpreterFloat pInterp = new 
PhotometricInterpreterFloat(pList);
-        final HashMap<String, Object> params = new HashMap<>();
-        params.put(TiffConstants.PARAM_KEY_CUSTOM_PHOTOMETRIC_INTERPRETER, 
pInterp);
+        final TiffImagingParameters params = new TiffImagingParameters();
+        params.setCustomPhotometricInterpreter(pInterp);
         final BufferedImage bImage = directory.getTiffImage(byteOrder, params);
         if (bImage == null) {
             return null;
@@ -112,7 +109,7 @@ public class TiffFloatingPointReadTest {
      * @throws IOException in the event of an I/O error
      */
     private TiffRasterData readRasterFromTIFF(
-        final File target, final Map<String, Object> params)
+        final File target, final TiffImagingParameters params)
         throws ImageReadException, IOException {
         final ByteSourceFile byteSource = new ByteSourceFile(target);
         final TiffReader tiffReader = new TiffReader(true);
@@ -126,7 +123,6 @@ public class TiffFloatingPointReadTest {
 
     @Test
     public void test() {
-        final Map<String, Object> params = new HashMap<>();
         // These TIFF sample data includes files that contain known
         // floating-point values in various formats.  We know the range
         // of values from inspection using separate utilies. This
@@ -155,7 +151,7 @@ public class TiffFloatingPointReadTest {
             // that the source file is organized using strips of 2 rows each.
             // The source file is of dimensions 451x337.
             // The dimensions of the sub-image are arbitrary
-            TiffRasterData fullRaster = readRasterFromTIFF(target, null);
+            TiffRasterData fullRaster = readRasterFromTIFF(target, new 
TiffImagingParameters());
             int height = fullRaster.getHeight();
             int width  = fullRaster.getWidth();
             // checks based on the 2-rows per strip model
@@ -196,7 +192,7 @@ public class TiffFloatingPointReadTest {
             assertTrue(testCondition, "Min,Max values not in range -2 to 62: " 
+ minVal + ", " + maxVal);
             assertTrue(minVal <= maxVal, "Min Value not <= maxVal: " + minVal 
+ ", " + maxVal);
 
-            fullRaster = readRasterFromTIFF(target, null);
+            fullRaster = readRasterFromTIFF(target, new 
TiffImagingParameters());
             // The tile size for this file is 128-by-128. The following tests
             // read subsections starting right before the tile transition and 
right after it.
             height = fullRaster.getHeight();
@@ -226,11 +222,11 @@ public class TiffFloatingPointReadTest {
 
     private void checkSubImage(final File target, final TiffRasterData 
fullRaster, final int x0, final int y0, final int width, final int height){
         try{
-            final Map<String, Object> params = new HashMap<>();
-            params.put(TiffConstants.PARAM_KEY_SUBIMAGE_X, x0);
-            params.put(TiffConstants.PARAM_KEY_SUBIMAGE_Y, y0);
-            params.put(TiffConstants.PARAM_KEY_SUBIMAGE_WIDTH, width);
-            params.put(TiffConstants.PARAM_KEY_SUBIMAGE_HEIGHT, height);
+            final TiffImagingParameters params = new TiffImagingParameters();
+            params.setSubImageX(x0);
+            params.setSubImageY(y0);
+            params.setSubImageWidth(width);
+            params.setSubImageHeight(height);
             final TiffRasterData partRaster = readRasterFromTIFF(target, 
params);
             assertEquals(width, partRaster.getWidth(), "Invalid width in 
partial for " + target.getName());
             assertEquals(height, partRaster.getHeight(), "Invalid height in 
partial for " + target.getName());
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffFloatingPointRoundTripTest.java
 
b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffFloatingPointRoundTripTest.java
index 87c4333..681d7de 100644
--- 
a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffFloatingPointRoundTripTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffFloatingPointRoundTripTest.java
@@ -27,14 +27,12 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.nio.ByteOrder;
 import java.nio.file.Path;
-import java.util.HashMap;
 
 import org.apache.commons.imaging.FormatCompliance;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.ImageWriteException;
 import org.apache.commons.imaging.common.ImageBuilder;
 import org.apache.commons.imaging.common.bytesource.ByteSourceFile;
-import org.apache.commons.imaging.formats.tiff.constants.TiffConstants;
 import org.apache.commons.imaging.formats.tiff.constants.TiffTagConstants;
 import 
org.apache.commons.imaging.formats.tiff.photometricinterpreters.floatingpoint.PhotometricInterpreterFloat;
 import org.apache.commons.imaging.formats.tiff.write.TiffImageWriterLossy;
@@ -134,8 +132,8 @@ public class TiffFloatingPointRoundTripTest extends 
TiffBaseTest {
                 FormatCompliance.getDefault());
             final TiffDirectory directory = contents.directories.get(0);
             final PhotometricInterpreterFloat pi = getPhotometricInterpreter();
-            final HashMap<String, Object> params = new HashMap<>();
-            params.put(TiffConstants.PARAM_KEY_CUSTOM_PHOTOMETRIC_INTERPRETER, 
pi);
+            final TiffImagingParameters params = new TiffImagingParameters();
+            params.setCustomPhotometricInterpreter(pi);
             final ByteOrder byteOrder = tiffReader.getByteOrder();
             final BufferedImage bImage = directory.getTiffImage(byteOrder, 
params);
             assertNotNull(bImage, "Failed to get image from " + name);
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffLzwTest.java 
b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffLzwTest.java
index d6b5ad8..2f7ded4 100644
--- a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffLzwTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffLzwTest.java
@@ -25,7 +25,6 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.nio.ByteOrder;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 
 import org.apache.commons.imaging.ImageReadException;
@@ -67,8 +66,7 @@ public class TiffLzwTest extends TiffBaseTest {
             Debug.debug("imageFile", image);
 
             final ByteSource byteSource = new ByteSourceFile(image);
-            final List<byte[]> data = new 
TiffImageParser().collectRawImageData(byteSource,
-                    Collections.emptyMap());
+            final List<byte[]> data = new 
TiffImageParser().collectRawImageData(byteSource, new TiffImagingParameters());
 
             for (final byte[] bytes : data) {
                 decompressRoundtripAndValidate(bytes);
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffReadTest.java 
b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffReadTest.java
index 87a5eba..93082a9 100644
--- a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffReadTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffReadTest.java
@@ -21,7 +21,6 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.util.HashMap;
 import java.util.List;
 
 import org.apache.commons.imaging.FormatCompliance;
@@ -67,7 +66,6 @@ public class TiffReadTest extends TiffBaseTest {
                 continue;
             }
             final ByteSourceFile byteSource = new ByteSourceFile(imageFile);
-            final HashMap<String, Object> params = new HashMap<>();
             final TiffReader tiffReader = new TiffReader(true);
             final TiffContents contents = tiffReader.readDirectories(
                 byteSource,
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffReadWriteTagsTest.java
 
b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffReadWriteTagsTest.java
index 0213afa..2249f69 100644
--- 
a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffReadWriteTagsTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffReadWriteTagsTest.java
@@ -26,11 +26,10 @@ import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.ImageWriteException;
 import org.apache.commons.imaging.common.RationalNumber;
 import org.apache.commons.imaging.common.bytesource.ByteSourceArray;
+import org.apache.commons.imaging.formats.tiff.constants.ExifTagConstants;
 import org.apache.commons.imaging.formats.tiff.constants.GeoTiffTagConstants;
 import org.apache.commons.imaging.formats.tiff.constants.GpsTagConstants;
 import 
org.apache.commons.imaging.formats.tiff.constants.MicrosoftHdPhotoTagConstants;
-import org.apache.commons.imaging.formats.tiff.constants.ExifTagConstants;
-import org.apache.commons.imaging.formats.tiff.constants.GpsTagConstants;
 import org.apache.commons.imaging.formats.tiff.constants.TiffTagConstants;
 import org.apache.commons.imaging.formats.tiff.write.TiffImageWriterLossy;
 import org.apache.commons.imaging.formats.tiff.write.TiffOutputDirectory;
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffRoundtripTest.java 
b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffRoundtripTest.java
index f368c61..0e585c8 100644
--- 
a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffRoundtripTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffRoundtripTest.java
@@ -21,14 +21,10 @@ import static 
org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
-import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.Imaging;
-import org.apache.commons.imaging.ImagingConstants;
 import org.apache.commons.imaging.common.ImageMetadata;
 import org.apache.commons.imaging.formats.tiff.constants.TiffConstants;
 import org.apache.commons.imaging.internal.Debug;
@@ -60,10 +56,9 @@ public class TiffRoundtripTest extends TiffBaseTest {
             };
             for (final int compression : compressions) {
                 final File tempFile = File.createTempFile(imageFile.getName() 
+ "-" + compression + ".", ".tif");
-                final Map<String, Object> params = new HashMap<>();
-                params.put(ImagingConstants.PARAM_KEY_COMPRESSION, 
compression);
-                Imaging.writeImage(image, tempFile, ImageFormats.TIFF,
-                        params);
+                final TiffImagingParameters params = new 
TiffImagingParameters();
+                params.setCompression(compression);
+                Imaging.writeImage(image, tempFile, params);
                 final BufferedImage image2 = 
Imaging.getBufferedImage(tempFile);
                 assertNotNull(image2);
             }
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffSubImageTest.java 
b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffSubImageTest.java
index c6001d8..5b7e8af 100644
--- 
a/src/test/java/org/apache/commons/imaging/formats/tiff/TiffSubImageTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/formats/tiff/TiffSubImageTest.java
@@ -22,16 +22,11 @@ import static org.junit.jupiter.api.Assertions.fail;
 import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
 
-import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.ImageWriteException;
 import org.apache.commons.imaging.Imaging;
-import org.apache.commons.imaging.formats.tiff.constants.TiffConstants;
 import org.junit.jupiter.api.Test;
 
 public class TiffSubImageTest extends TiffBaseTest {
@@ -44,13 +39,12 @@ public class TiffSubImageTest extends TiffBaseTest {
     @Test
     public void testSubImage() throws ImageReadException, ImageWriteException, 
IOException {
         final BufferedImage src = new BufferedImage(10, 10, 
BufferedImage.TYPE_INT_RGB);
-        final byte[] imageBytes = Imaging.writeImageToBytes(src, 
ImageFormats.TIFF, null);
-
-        final Map<String, Object> params = new TreeMap<>();
-        params.put(TiffConstants.PARAM_KEY_SUBIMAGE_X, 0);
-        params.put(TiffConstants.PARAM_KEY_SUBIMAGE_Y, 0);
-        params.put(TiffConstants.PARAM_KEY_SUBIMAGE_WIDTH, 2);
-        params.put(TiffConstants.PARAM_KEY_SUBIMAGE_HEIGHT, 3);
+        final TiffImagingParameters params = new TiffImagingParameters();
+        final byte[] imageBytes = Imaging.writeImageToBytes(src, params);
+        params.setSubImageX(0);
+        params.setSubImageY(0);
+        params.setSubImageWidth(2);
+        params.setSubImageHeight(3);
         final BufferedImage image = Imaging.getBufferedImage(imageBytes, 
params);
         assertEquals(image.getWidth(), 2);
         assertEquals(image.getHeight(), 3);
@@ -63,11 +57,11 @@ public class TiffSubImageTest extends TiffBaseTest {
         final int width = referenceImage.getWidth();
         final int height = referenceImage.getHeight();
 
-        final Map<String, Object> params = new HashMap<>();
-        params.put(TiffConstants.PARAM_KEY_SUBIMAGE_X, 0);
-        params.put(TiffConstants.PARAM_KEY_SUBIMAGE_Y, 0);
-        params.put(TiffConstants.PARAM_KEY_SUBIMAGE_WIDTH, width);
-        params.put(TiffConstants.PARAM_KEY_SUBIMAGE_HEIGHT, height);
+        final TiffImagingParameters params = new TiffImagingParameters();
+        params.setSubImageX(0);
+        params.setSubImageY(0);
+        params.setSubImageWidth(width);
+        params.setSubImageHeight(height);
 
         final BufferedImage image = Imaging.getBufferedImage(target, params);
         assertEquals(image.getWidth(), width, "Improper width when sub-imaging 
entire image");
@@ -83,11 +77,11 @@ public class TiffSubImageTest extends TiffBaseTest {
 
     private void processBadParams(final File target, final int x, final int y, 
final int width, final int height, final String comment) throws IOException{
         try{
-            final Map<String, Object> params = new HashMap<>();
-            params.put(TiffConstants.PARAM_KEY_SUBIMAGE_X, x);
-            params.put(TiffConstants.PARAM_KEY_SUBIMAGE_Y, y);
-            params.put(TiffConstants.PARAM_KEY_SUBIMAGE_WIDTH, width);
-            params.put(TiffConstants.PARAM_KEY_SUBIMAGE_HEIGHT, height);
+            final TiffImagingParameters params = new TiffImagingParameters();
+            params.setSubImageX(x);
+            params.setSubImageY(y);
+            params.setSubImageWidth(width);
+            params.setSubImageHeight(height);
             final BufferedImage image = Imaging.getBufferedImage(target, 
params);
             fail("Reading TIFF sub-image failed to detect bad parameter: 
"+comment);
         }catch(final ImageReadException ire){
@@ -106,11 +100,11 @@ public class TiffSubImageTest extends TiffBaseTest {
             }
             final int []rArgb = new int[rW*rH];
             referenceImage.getRGB(0, 0, rW, rH, rArgb, 0, rW);
-            final Map<String, Object> params = new HashMap<>();
-            params.put(TiffConstants.PARAM_KEY_SUBIMAGE_X, 1);
-            params.put(TiffConstants.PARAM_KEY_SUBIMAGE_Y, 1);
-            params.put(TiffConstants.PARAM_KEY_SUBIMAGE_WIDTH, rW-2);
-            params.put(TiffConstants.PARAM_KEY_SUBIMAGE_HEIGHT, rH-2);
+            final TiffImagingParameters params = new TiffImagingParameters();
+            params.setSubImageX(1);
+            params.setSubImageY(1);
+            params.setSubImageWidth(rW - 2);
+            params.setSubImageHeight(rH - 2);
             final BufferedImage image = Imaging.getBufferedImage(target, 
params);
             final int iW = image.getWidth();
             final int iH = image.getHeight();
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/wbmp/WbmpReadTest.java 
b/src/test/java/org/apache/commons/imaging/formats/wbmp/WbmpReadTest.java
index dd0c370..da61423 100644
--- a/src/test/java/org/apache/commons/imaging/formats/wbmp/WbmpReadTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/wbmp/WbmpReadTest.java
@@ -18,9 +18,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.Imaging;
@@ -43,8 +41,7 @@ public class WbmpReadTest extends WbmpBaseTest {
             final ImageMetadata metadata = Imaging.getMetadata(imageFile);
             Assertions.assertFalse(metadata instanceof File); // Dummy check 
to avoid unused warning (it may be null)
 
-            final Map<String, Object> params = new HashMap<>();
-            final ImageInfo imageInfo = Imaging.getImageInfo(imageFile, 
params);
+            final ImageInfo imageInfo = Imaging.getImageInfo(imageFile, new 
WbmpImagingParameters());
             assertNotNull(imageInfo);
 
             final BufferedImage image = Imaging.getBufferedImage(imageFile);
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/xbm/XbmReadTest.java 
b/src/test/java/org/apache/commons/imaging/formats/xbm/XbmReadTest.java
index 436c633..32d3f10 100644
--- a/src/test/java/org/apache/commons/imaging/formats/xbm/XbmReadTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/xbm/XbmReadTest.java
@@ -18,9 +18,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.Imaging;
@@ -43,8 +41,7 @@ public class XbmReadTest extends XbmBaseTest {
             final ImageMetadata metadata = Imaging.getMetadata(imageFile);
             Assertions.assertFalse(metadata instanceof File); // Dummy check 
to avoid unused warning (it may be null)
 
-            final Map<String, Object> params = new HashMap<>();
-            final ImageInfo imageInfo = Imaging.getImageInfo(imageFile, 
params);
+            final ImageInfo imageInfo = Imaging.getImageInfo(imageFile, new 
XbmImagingParameters());
             assertNotNull(imageInfo);
 
             final BufferedImage image = Imaging.getBufferedImage(imageFile);
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/xmp/XmpUpdateTest.java 
b/src/test/java/org/apache/commons/imaging/formats/xmp/XmpUpdateTest.java
index 1acb3e3..db12db0 100644
--- a/src/test/java/org/apache/commons/imaging/formats/xmp/XmpUpdateTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/xmp/XmpUpdateTest.java
@@ -21,15 +21,16 @@ import static 
org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.Imaging;
-import org.apache.commons.imaging.ImagingConstants;
 import org.apache.commons.imaging.ImagingTest;
+import org.apache.commons.imaging.common.XmpImagingParameters;
+import org.apache.commons.imaging.formats.gif.GifImagingParameters;
+import org.apache.commons.imaging.formats.png.PngImagingParameters;
+import org.apache.commons.imaging.formats.tiff.TiffImagingParameters;
 import org.apache.commons.imaging.internal.Debug;
 import org.junit.jupiter.api.Test;
 
@@ -49,8 +50,18 @@ public class XmpUpdateTest extends ImagingTest {
             Debug.debug();
 
             final ImageFormat imageFormat = Imaging.guessFormat(imageFile);
+            XmpImagingParameters params = null;
+            if (imageFormat.equals(ImageFormats.PNG)) {
+                params = new PngImagingParameters();
+            } else if (imageFormat.equals(ImageFormats.TIFF)) {
+                params = new TiffImagingParameters();
+            } else if (imageFormat.equals(ImageFormats.GIF)) {
+                params = new GifImagingParameters();
+            } else {
+                continue;
+            }
 
-            String xmpXml = Imaging.getXmpXml(imageFile);
+            String xmpXml = Imaging.getXmpXml(imageFile, params);
             if (null == xmpXml
                     && imageFormat.equals(ImageFormats.GIF)) {
                 xmpXml = "temporary test until I can locate a GIF with XMP in 
the wild.";
@@ -59,43 +70,19 @@ public class XmpUpdateTest extends ImagingTest {
                 continue;
             }
 
-            assertNotNull(xmpXml);
-
-            if (imageFormat.equals(ImageFormats.PNG)) { /*
-                                                                     * do
-                                                                     * nothing
-                                                                     */
-            } else if (imageFormat.equals(ImageFormats.TIFF)) { /*
-                                                                             * 
do
-                                                                             * 
nothing
-                                                                             */
-            } else if (imageFormat.equals(ImageFormats.GIF)) { /*
-                                                                            * 
do
-                                                                            * 
nothing
-                                                                            */
-            } else {
-                continue;
-            }
-
             final File tempFile = File.createTempFile(imageFile.getName() + 
".", "."
                     + imageFormat.getExtension());
             final BufferedImage image = Imaging.getBufferedImage(imageFile);
 
             // ----
 
-            final Map<String, Object> params = new HashMap<>();
-            params.put(ImagingConstants.PARAM_KEY_XMP_XML, xmpXml);
-            Imaging.writeImage(image, tempFile, imageFormat, params);
+            params.setXmpXml(xmpXml);
+            Imaging.writeImage(image, tempFile, params);
 
             final String xmpXmlOut = Imaging.getXmpXml(tempFile);
 
             assertNotNull(xmpXmlOut);
-
             assertEquals(xmpXmlOut, xmpXml);
-
-            // Debug.debug("xmpXmlOut", xmpXmlOut.length());
-            // Debug.debug("xmpXml", xmpXml);
-            // Debug.debug();
         }
     }
 }
diff --git 
a/src/test/java/org/apache/commons/imaging/formats/xpm/XpmReadTest.java 
b/src/test/java/org/apache/commons/imaging/formats/xpm/XpmReadTest.java
index b9d4d38..ad133de 100644
--- a/src/test/java/org/apache/commons/imaging/formats/xpm/XpmReadTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/xpm/XpmReadTest.java
@@ -18,9 +18,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.Imaging;
@@ -43,7 +41,7 @@ public class XpmReadTest extends XpmBaseTest {
             final ImageMetadata metadata = Imaging.getMetadata(imageFile);
             Assertions.assertFalse(metadata instanceof File); // Dummy check 
to avoid unused warning (it may be null)
 
-            final Map<String, Object> params = new HashMap<>();
+            final XpmImagingParameters params = new XpmImagingParameters();
             final ImageInfo imageInfo = Imaging.getImageInfo(imageFile, 
params);
             assertNotNull(imageInfo);
 
diff --git 
a/src/test/java/org/apache/commons/imaging/roundtrip/NullParametersRoundtripTest.java
 
b/src/test/java/org/apache/commons/imaging/roundtrip/NullParametersRoundtripTest.java
index ed90eee..c5c4a0c 100644
--- 
a/src/test/java/org/apache/commons/imaging/roundtrip/NullParametersRoundtripTest.java
+++ 
b/src/test/java/org/apache/commons/imaging/roundtrip/NullParametersRoundtripTest.java
@@ -38,7 +38,7 @@ public class NullParametersRoundtripTest extends 
RoundtripBase {
     public void testNullParametersRoundtrip(final FormatInfo formatInfo) 
throws Exception {
         final BufferedImage testImage = TestImages.createFullColorImage(1, 1);
         final File temp1 = File.createTempFile("nullParameters.", "." + 
formatInfo.format.getExtension());
-        Imaging.writeImage(testImage, temp1, formatInfo.format, null);
+        Imaging.writeImage(testImage, temp1, null);
         Imaging.getImageInfo(temp1, null);
         Imaging.getImageSize(temp1, null);
         Imaging.getMetadata(temp1, null);
diff --git 
a/src/test/java/org/apache/commons/imaging/roundtrip/PixelDensityRoundtrip.java 
b/src/test/java/org/apache/commons/imaging/roundtrip/PixelDensityRoundtrip.java
index 9d2c6e5..dd1b102 100644
--- 
a/src/test/java/org/apache/commons/imaging/roundtrip/PixelDensityRoundtrip.java
+++ 
b/src/test/java/org/apache/commons/imaging/roundtrip/PixelDensityRoundtrip.java
@@ -21,13 +21,11 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
 import java.util.stream.Stream;
 
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.Imaging;
-import org.apache.commons.imaging.ImagingConstants;
+import org.apache.commons.imaging.ImagingParameters;
 import org.apache.commons.imaging.PixelDensity;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.MethodSource;
@@ -46,10 +44,11 @@ public class PixelDensityRoundtrip extends RoundtripBase {
         final File temp1 = File.createTempFile("pixeldensity.", "."
                 + formatInfo.format.getExtension());
 
-        final Map<String, Object> params = new HashMap<>();
+        final ImagingParameters params = new ImagingParameters();
+        params.setImageFormat(formatInfo.format);
         final PixelDensity pixelDensity = 
PixelDensity.createFromPixelsPerInch(75, 150);
-        params.put(ImagingConstants.PARAM_KEY_PIXEL_DENSITY, pixelDensity);
-        Imaging.writeImage(testImage, temp1, formatInfo.format, params);
+        params.setPixelDensity(pixelDensity);
+        Imaging.writeImage(testImage, temp1, params);
 
         final ImageInfo imageInfo = Imaging.getImageInfo(temp1);
         if (imageInfo != null) {
diff --git 
a/src/test/java/org/apache/commons/imaging/roundtrip/RoundtripBase.java 
b/src/test/java/org/apache/commons/imaging/roundtrip/RoundtripBase.java
index 62b98d3..bff21f3 100644
--- a/src/test/java/org/apache/commons/imaging/roundtrip/RoundtripBase.java
+++ b/src/test/java/org/apache/commons/imaging/roundtrip/RoundtripBase.java
@@ -21,14 +21,12 @@ import static 
org.junit.jupiter.api.Assertions.assertNotNull;
 import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
 import java.util.stream.Stream;
 
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.ImageWriteException;
 import org.apache.commons.imaging.Imaging;
-import org.apache.commons.imaging.ImagingConstants;
+import org.apache.commons.imaging.ImagingParameters;
 import org.apache.commons.imaging.common.RgbBufferedImageFactory;
 import org.apache.commons.imaging.internal.Debug;
 import org.junit.jupiter.params.provider.Arguments;
@@ -42,12 +40,12 @@ public class RoundtripBase {
                 + formatInfo.format.getExtension());
         Debug.debug("tempFile: " + temp1.getName());
 
-        final Map<String, Object> params = new HashMap<>();
-        Imaging.writeImage(testImage, temp1, formatInfo.format, params);
+        final ImagingParameters params = new ImagingParameters();
+        params.setImageFormat(formatInfo.format);
+        Imaging.writeImage(testImage, temp1, params);
 
-        final Map<String, Object> readParams = new HashMap<>();
-        readParams.put(ImagingConstants.BUFFERED_IMAGE_FACTORY,
-                new RgbBufferedImageFactory());
+        final ImagingParameters readParams = new ImagingParameters();
+        readParams.setBufferedImageFactory(new RgbBufferedImageFactory());
         final BufferedImage image2 = Imaging.getBufferedImage(temp1, 
readParams);
         assertNotNull(image2);
 
@@ -61,7 +59,7 @@ public class RoundtripBase {
             final File temp2 = File.createTempFile(tempPrefix + ".", "."
                     + formatInfo.format.getExtension());
             // Debug.debug("tempFile: " + tempFile.getName());
-            Imaging.writeImage(image2, temp2, formatInfo.format, params);
+            Imaging.writeImage(image2, temp2, params);
 
             ImageAsserts.assertEquals(temp1, temp2);
         }

Reply via email to