You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2011/12/26 15:40:57 UTC

svn commit: r1224733 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDPixelMap.java

Author: lehmi
Date: Mon Dec 26 14:40:57 2011
New Revision: 1224733

URL: http://svn.apache.org/viewvc?rev=1224733&view=rev
Log:
PDFBOX-1185: use the correct bpc when creating the base color space of an index color space based on an idea of Antoni Mylka

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDPixelMap.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDPixelMap.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDPixelMap.java?rev=1224733&r1=1224732&r2=1224733&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDPixelMap.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDPixelMap.java Mon Dec 26 14:40:57 2011
@@ -157,7 +157,9 @@ public class PDPixelMap extends PDXObjec
             if (colorspace instanceof PDIndexed)
             {
                 PDIndexed csIndexed = (PDIndexed)colorspace;
-                ColorModel baseColorModel = csIndexed.getBaseColorSpace().createColorModel(bpc);
+                // the base color space uses 8 bit per component, as the indexed color values
+                // of an indexed color space are always in a range from 0 to 255
+                ColorModel baseColorModel = csIndexed.getBaseColorSpace().createColorModel(8);
                 // number of possible color values in the target color space
                 int numberOfColorValues = 1 << bpc;
                 // number of indexed color values
@@ -172,36 +174,30 @@ public class PDPixelMap extends PDXObjec
                 {
                     throw new IOException( "Not implemented" );
                 }
-                byte[] r = new byte[size+1];
-                byte[] g = new byte[size+1];
-                byte[] b = new byte[size+1];
-                byte[] a = hasAlpha ? new byte[size+1] : null;
+                int numberOfComponents = baseColorModel.getNumComponents() + (hasAlpha ? 1 : 0);
+                int buffersize = (size+1) * numberOfComponents;
+                byte[] colorValues = new byte[buffersize];
                 byte[] inData = new byte[baseColorModel.getNumComponents()];
+                int bufferIndex = 0;
                 for( int i = 0; i <= size; i++ )
                 {
                     System.arraycopy(index, i * inData.length, inData, 0, inData.length);
-                    r[i] = (byte)baseColorModel.getRed(inData);
-                    g[i] = (byte)baseColorModel.getGreen(inData);
-                    b[i] = (byte)baseColorModel.getBlue(inData);
+                    colorValues[bufferIndex] = (byte)baseColorModel.getRed(inData);
+                    colorValues[bufferIndex+1] = (byte)baseColorModel.getGreen(inData);
+                    colorValues[bufferIndex+2] = (byte)baseColorModel.getBlue(inData);
                     if( hasAlpha )
                     {
-                        a[i] = (byte)baseColorModel.getAlpha(inData);
+                        colorValues[bufferIndex+3] = (byte)baseColorModel.getAlpha(inData);
                     }
+                    bufferIndex += numberOfComponents;
                 }
-                if (hasAlpha)
+                if (maskArray != null)
                 {
-                    cm = new IndexColorModel(bpc, size+1, r, g, b, a);
+                    cm = new IndexColorModel(bpc, size+1, colorValues, 0, hasAlpha, maskArray.getInt(0));
                 }
                 else
                 {
-                    if (maskArray != null)
-                    {
-                        cm = new IndexColorModel(bpc, size+1, r, g, b, maskArray.getInt(0));
-                    }
-                    else
-                    {
-                        cm = new IndexColorModel(bpc, size+1, r, g, b);
-                    }
+                    cm = new IndexColorModel(bpc, size+1, colorValues, 0, hasAlpha);
                 }
             }
             else if (colorspace instanceof PDSeparation)