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}.