]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
bugzilla #54196: configure big / little endian support for TIFF images; patch 29628...
authorLuis Bernardo <lbernardo@apache.org>
Sun, 25 Nov 2012 23:24:41 +0000 (23:24 +0000)
committerLuis Bernardo <lbernardo@apache.org>
Sun, 25 Nov 2012 23:24:41 +0000 (23:24 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1413442 13f79535-47bb-0310-9956-ffa450edef68

lib/xmlgraphics-commons-svn-trunk.jar
src/documentation/content/xdocs/trunk/output.xml
src/java/org/apache/fop/render/bitmap/TIFFDocumentHandler.java
src/java/org/apache/fop/render/bitmap/TIFFRendererConfig.java
src/java/org/apache/fop/render/bitmap/TIFFRendererConfigurator.java
test/java/org/apache/fop/apps/TIFFRendererConfBuilder.java
test/java/org/apache/fop/render/bitmap/TIFFRendererConfigParserTestCase.java
test/java/org/apache/fop/render/bitmap/TIFFRendererConfiguratorTestCase.java

index bca45d57834dfbe7925ea4d54f621dca14edbc69..91648b9fff9cd834021c7aab3fd61d19ea4c2ed4 100644 (file)
Binary files a/lib/xmlgraphics-commons-svn-trunk.jar and b/lib/xmlgraphics-commons-svn-trunk.jar differ
index 5de820c180f3460eaed0e8914e393f2b25798776..96792cd4c12ffa802bbfeb06f8b30e8f2894fe73 100644 (file)
@@ -1271,6 +1271,7 @@ Note that the value of the encoding attribute in the example is the double-byte
   <transparent-page-background>true</transparent-page-background>
   <compression>CCITT T.6</compression>
   <single-strip>true</single-strip>
+  <endianness>default</endianness>
   <fonts><!-- described elsewhere --></fonts>
 </renderer>]]></source>
       <p>
@@ -1308,6 +1309,11 @@ Note that the value of the encoding attribute in the example is the double-byte
           The default value for the <code>"single-strip"</code> is <code>"false"</code> resulting in the RowsPerStrip Tiff Tag equal to the number of rows.
           If set to <code>true</code> RowsPerStrip is set to 1.
       </p>
+      <p>
+          The default value for <code>"endianness"</code> is <code>"default"</code>, which results in the
+          default endianness for the output format being generated. Note that not all image formats allow
+          specifying the endianness.
+      </p>
     </section>
     <section id="bitmap-rendering-options">
       <title>Runtime Rendering Options</title>
index 0de02c766c423bd60e0798f558b0f001904e597c..48e79520fec8b574bc6935a9dc5b04d03c53f77a 100644 (file)
@@ -19,8 +19,6 @@
 
 package org.apache.fop.render.bitmap;
 
-import org.apache.xmlgraphics.image.writer.ResolutionUnit;
-
 import org.apache.fop.apps.MimeConstants;
 import org.apache.fop.render.bitmap.TIFFRendererConfig.TIFFRendererConfigParser;
 import org.apache.fop.render.intermediate.IFContext;
@@ -34,7 +32,6 @@ public class TIFFDocumentHandler extends AbstractBitmapDocumentHandler {
 
     TIFFDocumentHandler(IFContext context) {
         super(context);
-        getSettings().getWriterParams().setResolutionUnit(ResolutionUnit.CENTIMETER);
     }
 
     /** {@inheritDoc} */
index 1e44397f648f0b1ac7393669c657d24ec2b797a0..f2535d4569775542929b45eaf605bc352ee13a5b 100644 (file)
@@ -23,6 +23,8 @@ import java.util.EnumMap;
 
 import org.apache.avalon.framework.configuration.Configuration;
 
+import org.apache.xmlgraphics.image.writer.Endianness;
+
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.apps.MimeConstants;
@@ -40,7 +42,9 @@ public final class TIFFRendererConfig extends BitmapRendererConfig {
     public enum TIFFRendererOption implements RendererConfigOption {
         COMPRESSION("compression", PACKBITS),
         /** option to encode one row per strip or a all rows in a single strip*/
-        SINGLE_STRIP("single-strip", Boolean.FALSE);
+        SINGLE_STRIP("single-strip", Boolean.FALSE),
+        /** option to determine whether to use little or big endian encoding */
+        ENDIANNESS("endianness", Endianness.DEFAULT);
 
         private final String name;
         private final Object defaultValue;
@@ -78,6 +82,13 @@ public final class TIFFRendererConfig extends BitmapRendererConfig {
         return (Boolean) params.get(TIFFRendererOption.SINGLE_STRIP);
     }
 
+    /**
+     * @return returns an object to determine whether little or big endian encoding is used
+     */
+    public Endianness getEndianness() {
+        return (Endianness) params.get(TIFFRendererOption.ENDIANNESS);
+    }
+
     /**
      * The TIFF renderer configuration parser.
      */
@@ -107,6 +118,8 @@ public final class TIFFRendererConfig extends BitmapRendererConfig {
                         TIFFCompressionValue.getType(getValue(cfg, TIFFRendererOption.COMPRESSION)));
                 setParam(TIFFRendererOption.SINGLE_STRIP, Boolean.valueOf(getValue(cfg,
                                 TIFFRendererOption.SINGLE_STRIP)));
+                setParam(TIFFRendererOption.ENDIANNESS,
+                        Endianness.getEndianType(getValue(cfg, TIFFRendererOption.ENDIANNESS)));
             }
             return config;
         }
index 19abb8131cb13ef47af788b313f05d5100e1bbfe..fb24fa7bf8b824fe17119b9c4568af3d58101602 100644 (file)
@@ -22,6 +22,8 @@ package org.apache.fop.render.bitmap;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import org.apache.xmlgraphics.image.writer.Endianness;
+
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.render.Renderer;
@@ -81,6 +83,11 @@ public class TIFFRendererConfigurator extends BitmapRendererConfigurator {
         return singleRowPerStrip == null ? false : singleRowPerStrip;
     }
 
+    private Endianness getEndianness(TIFFRendererConfig config) {
+        Endianness endianMode = config.getEndianness();
+        return endianMode == null ? Endianness.DEFAULT : endianMode;
+    }
+
     @Override
     public void configure(IFDocumentHandler documentHandler) throws FOPException {
         final TIFFRendererConfig config = (TIFFRendererConfig) getRendererConfig(documentHandler);
@@ -90,6 +97,7 @@ public class TIFFRendererConfigurator extends BitmapRendererConfigurator {
             configure(documentHandler, settings, new TIFFRendererConfigParser());
             setCompressionMethod(config.getCompressionType(), settings);
             settings.getWriterParams().setSingleStrip(isSingleStrip(config));
+            settings.getWriterParams().setEndianness(getEndianness(config));
         }
     }
 
index f39df29888b49c23dda7f0dfbb7fb882de18d3f5..e2262017ff2e35c848a933451d4a8f6d1fac9fe3 100644 (file)
@@ -20,6 +20,7 @@
 package org.apache.fop.apps;
 
 import static org.apache.fop.render.bitmap.TIFFRendererConfig.TIFFRendererOption.COMPRESSION;
+import static org.apache.fop.render.bitmap.TIFFRendererConfig.TIFFRendererOption.ENDIANNESS;
 import static org.apache.fop.render.bitmap.TIFFRendererConfig.TIFFRendererOption.SINGLE_STRIP;
 public class TIFFRendererConfBuilder extends BitmapRendererConfBuilder {
 
@@ -36,4 +37,9 @@ public class TIFFRendererConfBuilder extends BitmapRendererConfBuilder {
         createTextElement(SINGLE_STRIP, String.valueOf(single));
         return this;
     }
+
+    public TIFFRendererConfBuilder setEndianness(String endianness) {
+        createTextElement(ENDIANNESS, endianness);
+        return this;
+    }
 }
index 69326559e66d7a7cd404de70cf1cda5cb31ccfb6..d33076983e70cf28d41c3abb19826112a4a1bcb4 100644 (file)
@@ -21,6 +21,8 @@ package org.apache.fop.render.bitmap;
 
 import org.junit.Test;
 
+import org.apache.xmlgraphics.image.writer.Endianness;
+
 import org.apache.fop.apps.FopConfBuilder;
 import org.apache.fop.apps.TIFFRendererConfBuilder;
 import org.apache.fop.render.bitmap.TIFFRendererConfig.TIFFRendererConfigParser;
@@ -62,4 +64,12 @@ extends AbstractBitmapRendererConfigParserTester {
         parseConfig(createRenderer().setSingleStrip(false));
         assertFalse(getConfig().isSingleStrip());
     }
+
+    @Test
+    public void testEndianness() throws Exception {
+        for (Endianness value : Endianness.values()) {
+            parseConfig(createRenderer().setEndianness(value.toString()));
+            assertEquals(value, getConfig().getEndianness());
+        }
+    }
 }
index 3e6c951a653d268d9802a1992d8869e704bf5a4e..b5e6318ce98bf0db3867315b15a564b6c50d6f98 100644 (file)
@@ -23,6 +23,7 @@ import java.awt.image.BufferedImage;
 
 import org.junit.Test;
 
+import org.apache.xmlgraphics.image.writer.Endianness;
 
 import org.apache.fop.apps.FopConfBuilder;
 import org.apache.fop.apps.MimeConstants;
@@ -72,4 +73,12 @@ public class TIFFRendererConfiguratorTestCase extends AbstractBitmapRendererConf
         assertFalse(settings.getWriterParams().isSingleStrip());
     }
 
+    @Test
+    public void testEndianness() throws Exception {
+        for (Endianness value : Endianness.values()) {
+            parseConfig(createBuilder().setEndianness(value.toString()));
+            assertEquals(value, settings.getWriterParams().getEndianness());
+        }
+    }
+
 }