Author: lehmi
Date: Mon Apr  5 17:22:14 2010
New Revision: 930910

URL: http://svn.apache.org/viewvc?rev=930910&view=rev
Log:
PDFBOX-672: take the decode array of an XObjectImage into amount when 
calculating "BlackIs1" value of a tiff, some more COSName constants.

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java?rev=930910&r1=930909&r2=930910&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java 
(original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSName.java Mon 
Apr  5 17:22:14 2010
@@ -131,7 +131,12 @@ public final class COSName extends COSBa
     /**
      * A common COSName value.
      */
+    public static final COSName BLACK_IS_1 = new COSName( "BlackIs1" );
+    /**
+     * A common COSName value.
+     */
     public static final COSName BLACK_POINT = new COSName( "BlackPoint" );
+        
     /**
      * A common COSName value.
      */
@@ -205,6 +210,10 @@ public final class COSName extends COSBa
      */
     public static final COSName COLORSPACE = new COSName( "ColorSpace" );
     /**
+     * A common COSName value.
+     */
+    public static final COSName COLUMNS = new COSName( "Columns" );
+    /**
     * A common COSName value.
     */
     public static final COSName CONTENTS = new COSName( "Contents" );
@@ -678,6 +687,10 @@ public final class COSName extends COSBa
      */
     public static final COSName ROTATE = new COSName(  "Rotate" );
     /**
+     * A common COSName value.
+     */
+    public static final COSName ROWS = new COSName(  "Rows" );
+    /**
     * A common COSName value.
     */
     public static final COSName RUN_LENGTH_DECODE = new COSName( 
"RunLengthDecode" );

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java?rev=930910&r1=930909&r2=930910&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDCcitt.java
 Mon Apr  5 17:22:14 2010
@@ -53,7 +53,7 @@ public class PDCcitt extends PDXObjectIm
      */
     private static final Log log = LogFactory.getLog(PDCcitt.class);
 
-    private static final List FAX_FILTERS = new ArrayList();
+    private static final List<String> FAX_FILTERS = new ArrayList<String>();
 
     static
     {
@@ -94,12 +94,12 @@ public class PDCcitt extends PDXObjectIm
         dic.setItem( COSName.FILTER, COSName.CCITTFAX_DECODE);
         dic.setItem( COSName.SUBTYPE, COSName.IMAGE);
         dic.setItem( COSName.TYPE, COSName.XOBJECT );
-        dic.setItem( "DecodeParms", decodeParms);
+        dic.setItem( COSName.DECODE_PARMS, decodeParms);
 
         setBitsPerComponent( 1 );
         setColorSpace( new PDDeviceGray() );
-        setWidth( decodeParms.getInt("Columns") );
-        setHeight( decodeParms.getInt("Rows") );
+        setWidth( decodeParms.getInt(COSName.COLUMNS) );
+        setHeight( decodeParms.getInt(COSName.ROWS) );
 
     }
 
@@ -238,12 +238,12 @@ public class PDCcitt extends PDXObjectIm
                 {
                     case 256:
                     {
-                        parms.setInt("Columns",val);
+                        parms.setInt(COSName.COLUMNS,val);
                         break;
                     }
                     case 257:
                     {
-                        parms.setInt("Rows",val);
+                        parms.setInt(COSName.ROWS,val);
                         break;
                     }
                     case 259:
@@ -262,7 +262,7 @@ public class PDCcitt extends PDXObjectIm
                     {
                         if (val == 1)
                         {
-                            parms.setBoolean("BlackIs1", true);
+                            parms.setBoolean(COSName.BLACK_IS_1, true);
                         }
                         break;
                     }
@@ -322,7 +322,7 @@ public class PDCcitt extends PDXObjectIm
                 throw new IOException("First image in tiff is not a single 
tile/strip");
             }
 
-            parms.setInt("K",k);
+            parms.setInt(COSName.K,k);
 
             raf.seek(dataoffset);
 
@@ -513,7 +513,14 @@ public class PDCcitt extends PDXObjectIm
             short comptype = 3; // T4 compression
             long t4options = 0; // Will set if 1d or 2d T4
 
-            COSBase dicOrArrayParms = 
options.getDictionaryObject("DecodeParms");
+            COSArray decode = getDecode();
+            // we have to invert the b/w-values, 
+            // if the Decode array exists and consists of (1,0)
+            if (decode != null && decode.getInt(0) == 1)
+            {
+                blackis1 = 1;
+            }
+            COSBase dicOrArrayParms = 
options.getDictionaryObject(COSName.DECODE_PARMS);
             COSDictionary decodeParms = null;
             if( dicOrArrayParms instanceof COSDictionary )
             {
@@ -533,8 +540,8 @@ public class PDCcitt extends PDXObjectIm
                     {
                         COSDictionary dic = 
(COSDictionary)parmsArray.getObject( i );
                         if (dic != null && 
-                ( dic.getDictionaryObject( "Columns" ) != null ||
-                            dic.getDictionaryObject( "Rows" ) != null))
+                                ( dic.getDictionaryObject(COSName.COLUMNS) != 
null ||
+                                        dic.getDictionaryObject(COSName.ROWS) 
!= null))
                         {
                             decodeParms = dic;
                         }
@@ -544,13 +551,13 @@ public class PDCcitt extends PDXObjectIm
 
             if (decodeParms != null)
             {
-                cols = (short) decodeParms.getInt("Columns", cols);
-                rows = (short) decodeParms.getInt("Rows", rows);
-                if (decodeParms.getBoolean("BlackIs1", false))
+                cols = (short) decodeParms.getInt(COSName.COLUMNS, cols);
+                rows = (short) decodeParms.getInt(COSName.ROWS, rows);
+                if (decodeParms.getBoolean(COSName.BLACK_IS_1, false))
                 {
                     blackis1 = 1;
                 }
-                int k = decodeParms.getInt("K");  // Mandatory parm
+                int k = decodeParms.getInt(COSName.K);  // Mandatory parm
                 if (k < 0)
                 {
                     //T6
@@ -568,7 +575,7 @@ public class PDCcitt extends PDXObjectIm
             // If we couldn't get the number of rows, use the main item from 
XObject
             if (rows == 0)
             {
-                rows = (short) options.getInt("Height", rows);
+                rows = (short) options.getInt(COSName.HEIGHT, rows);
             }
 
             // Now put the tags into the tiffheader
@@ -580,7 +587,7 @@ public class PDCcitt extends PDXObjectIm
             addTag(259, comptype);    // T6
             addTag(262, blackis1); // Photometric Interpretation
             addTag(273, tiffheader.length); // Offset to start of image data - 
updated below
-            addTag(279, options.getInt("Length")); // Length of image data
+            addTag(279, options.getInt(COSName.LENGTH)); // Length of image 
data
             addTag(282, 300, 1); // X Resolution 300 (default unit Inches) 
This is arbitary
             addTag(283, 300, 1); // Y Resolution 300 (default unit Inches) 
This is arbitary
             if (comptype == 3)


Reply via email to