Repository: commons-imaging
Updated Branches:
  refs/heads/master b4374368a -> a009a9a92


IMAGING-209: Fix issue where PnmImageParser would throw ImageWriteException
when writing if PnmImageParser.PARAM_KEY_PNM_RAWBITS is provided.

This closes #33


Project: http://git-wip-us.apache.org/repos/asf/commons-imaging/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-imaging/commit/fb0be4a4
Tree: http://git-wip-us.apache.org/repos/asf/commons-imaging/tree/fb0be4a4
Diff: http://git-wip-us.apache.org/repos/asf/commons-imaging/diff/fb0be4a4

Branch: refs/heads/master
Commit: fb0be4a4b561ddc3aa942f2929f734b0bdd9a035
Parents: b437436
Author: Isak W <isak.wertw...@gmail.com>
Authored: Mon Dec 4 15:38:24 2017 +0100
Committer: Bruno P. Kinoshita <brunodepau...@yahoo.com.br>
Committed: Sat Dec 23 23:53:27 2017 +1300

----------------------------------------------------------------------
 .../imaging/formats/pnm/PnmImageParser.java     |  5 +++
 .../imaging/formats/pnm/PnmImageParserTest.java | 32 ++++++++++++++++++++
 2 files changed, 37 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-imaging/blob/fb0be4a4/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java 
b/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java
index c55e797..5528d84 100644
--- a/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java
@@ -364,6 +364,11 @@ public class PnmImageParser extends ImageParser {
         if (params.containsKey(PARAM_KEY_FORMAT)) {
             params.remove(PARAM_KEY_FORMAT);
         }
+
+        // clear rawbits key.
+        if (params.containsKey(PARAM_KEY_PNM_RAWBITS)) {
+            params.remove(PARAM_KEY_PNM_RAWBITS);
+        }
         
         if (!params.isEmpty()) {
             final Object firstKey = params.keySet().iterator().next();

http://git-wip-us.apache.org/repos/asf/commons-imaging/blob/fb0be4a4/src/test/java/org/apache/commons/imaging/formats/pnm/PnmImageParserTest.java
----------------------------------------------------------------------
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 693be92..16fb996 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
@@ -16,17 +16,25 @@
  */
 package org.apache.commons.imaging.formats.pnm;
 
+import java.awt.image.BufferedImage;
+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;
+import org.apache.commons.imaging.Imaging;
 import org.junit.Test;
 
+import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 public class PnmImageParserTest {
 
@@ -44,6 +52,30 @@ public class PnmImageParserTest {
         assertEquals(results.getNumberOfImages(), 1);
     }
 
+    @Test
+    public void testWriteImageRaw_happyCase() throws ImageWriteException,
+                                                     ImageReadException, 
IOException {
+        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 byte[] dstBytes = Imaging.writeImageToBytes(srcImage, 
ImageFormats.PNM, params);
+        final BufferedImage dstImage = Imaging.getBufferedImage(dstBytes);
+
+        assertTrue(srcImage.getWidth() == dstImage.getWidth());
+        assertTrue(srcImage.getHeight() == dstImage.getHeight());
+
+        DataBufferInt srcData = (DataBufferInt) 
srcImage.getRaster().getDataBuffer();
+        DataBufferInt dstData = (DataBufferInt) 
dstImage.getRaster().getDataBuffer();
+
+        for (int bank = 0; bank < srcData.getNumBanks(); bank++) {
+            int[] actual = srcData.getData(bank);
+            int[] expected = dstData.getData(bank);
+
+            assertArrayEquals(actual, expected);
+        }
+    }
+
     /**
      * If an invalid width is specified, should throw {@link 
ImageReadException} rather than
      * {@link NumberFormatException}.

Reply via email to