Author: jahewson
Date: Sun Feb 23 21:42:49 2014
New Revision: 1571099

URL: http://svn.apache.org/r1571099
Log:
Fixed image indexed color space for PDFBOX-1934

Modified:
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDIndexed.java
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/SampledImageReader.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java?rev=1571099&r1=1571098&r2=1571099&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceN.java
 Sun Feb 23 21:42:49 2014
@@ -302,10 +302,10 @@ public class PDDeviceN extends PDSpecial
                 int[] intSrc = new int[numSrcComponents];
                 raster.getPixel(x, y, intSrc);
 
-                // subtractive -> additive & scale to 0..1
+                // scale to 0..1
                 for (int s = 0; s < numSrcComponents; s++)
                 {
-                    src[s] =  /*1 -*/ (src[s] / 255);
+                    src[s] = src[s] / 255;
                 }
 
                 // convert to alternate color space via tint transform

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDIndexed.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDIndexed.java?rev=1571099&r1=1571098&r2=1571099&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDIndexed.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDIndexed.java
 Sun Feb 23 21:42:49 2014
@@ -172,13 +172,18 @@ public final class PDIndexed extends PDS
         BufferedImage rgbImage = new BufferedImage(width, height, 
BufferedImage.TYPE_INT_RGB);
         WritableRaster rgbRaster = rgbImage.getRaster();
 
-        int[] src = new int[1];
+        float[] src = new float[1];
         for (int y = 0; y < height; y++)
         {
             for (int x = 0; x < width; x++)
             {
                 raster.getPixel(x, y, src);
-                int index = Math.min(src[0], actualMaxIndex);
+
+                // scale to 0..1
+                src[0] = src[0] / 255;
+
+                // scale to 0..hival and lookup
+                int index = Math.min(Math.round(src[0] * actualMaxIndex), 
actualMaxIndex);
                 rgbRaster.setPixel(x, y, rgbColorTable[index]);
             }
         }

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java?rev=1571099&r1=1571098&r2=1571099&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java
 Sun Feb 23 21:42:49 2014
@@ -261,12 +261,22 @@ public final class PDImageXObject extend
      */
     public PDImageXObject getMask() throws IOException
     {
-        COSStream cosStream = 
(COSStream)getCOSStream().getDictionaryObject(COSName.MASK);
-        if (cosStream != null)
+        COSBase mask = getCOSStream().getDictionaryObject(COSName.MASK);
+        if (mask instanceof COSArray)
         {
-            return new PDImageXObject(new PDStream(cosStream), null); // 
always DeviceGray
+            // ...
+            System.out.println("color key");
+            return null;
+        }
+        else
+        {
+            COSStream cosStream = 
(COSStream)getCOSStream().getDictionaryObject(COSName.MASK);
+            if (cosStream != null)
+            {
+                return new PDImageXObject(new PDStream(cosStream), null); // 
always DeviceGray
+            }
+            return null;
         }
-        return null;
     }
 
     /**

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/SampledImageReader.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/SampledImageReader.java?rev=1571099&r1=1571098&r2=1571099&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/SampledImageReader.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/SampledImageReader.java
 Sun Feb 23 21:42:49 2014
@@ -108,12 +108,12 @@ final class SampledImageReader
             throw new IOException("Image stream is empty");
         }
 
-        // get parameters
+        // get parameters, they must be valid or have been repaired
         final PDColorSpace colorSpace = pdImage.getColorSpace();
         final int numComponents = colorSpace.getNumberOfComponents();
-        final int width = pdImage.getWidth();                         // todo: 
what if -1?
-        final int height = pdImage.getHeight();                       // todo: 
what if -1?
-        final int bitsPerComponent = pdImage.getBitsPerComponent();   // todo: 
what if -1?
+        final int width = pdImage.getWidth();
+        final int height = pdImage.getHeight();
+        final int bitsPerComponent = pdImage.getBitsPerComponent();
         final float[] decode = getDecodeArray(pdImage);
 
         /*


Reply via email to