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/06/08 10:25:42 UTC

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

Author: lehmi
Date: Wed Jun  8 08:25:42 2011
New Revision: 1133281

URL: http://svn.apache.org/viewvc?rev=1133281&view=rev
Log:
PDFBOX-1010: fixed the creation of the colormodel for indexed colorspaces

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=1133281&r1=1133280&r2=1133281&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 Wed Jun  8 08:25:42 2011
@@ -145,14 +145,52 @@ public class PDPixelMap extends PDXObjec
             }
             
             ColorModel cm = null;
-            if (bpc == 1)
+            if (colorspace instanceof PDIndexed)
             {
-                byte[] map = null;
-                if (colorspace instanceof PDIndexed) 
+                PDIndexed csIndexed = (PDIndexed)colorspace;
+                ColorModel baseColorModel = csIndexed.getBaseColorSpace().createColorModel(bpc);
+                int size = csIndexed.getHighValue();
+                byte[] index = csIndexed.getLookupData();
+                boolean hasAlpha = baseColorModel.hasAlpha();
+                COSArray maskArray = getMask();
+                if( baseColorModel.getTransferType() != DataBuffer.TYPE_BYTE )
+                {
+                    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;
+                byte[] inData = new byte[baseColorModel.getNumComponents()];
+                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);
+                    if( hasAlpha )
+                    {
+                        a[i] = (byte)baseColorModel.getAlpha(inData);
+                    }
+                }
+                if (hasAlpha)
                 {
-                    // extract the base colorspace
-                    colorspace = ((PDIndexed)colorspace).getBaseColorSpace(); 
+                    cm = new IndexColorModel(bpc, size+1, r, g, b, a);
                 }
+                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);
+                    }
+                }
+            }
+            else if (bpc == 1)
+            {
+                byte[] map = null;
                 if (colorspace instanceof PDDeviceGray)
                 {
                     COSArray decode = getDecode();
@@ -196,49 +234,6 @@ public class PDPixelMap extends PDXObjec
                     else
                         cm = colorspace.createColorModel( bpc );
                 }
-                else if (colorspace instanceof PDIndexed)
-                {
-                    PDIndexed csIndexed = (PDIndexed)colorspace;
-                    ColorModel baseColorModel = csIndexed.getBaseColorSpace().createColorModel(bpc);
-                    int size = csIndexed.getHighValue();
-                    byte[] index = csIndexed.getLookupData();
-                    boolean hasAlpha = baseColorModel.hasAlpha();
-                    COSArray maskArray = getMask();
-                    if( baseColorModel.getTransferType() != DataBuffer.TYPE_BYTE )
-                    {
-                        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;
-                    byte[] inData = new byte[baseColorModel.getNumComponents()];
-                    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);
-                        if( hasAlpha )
-                        {
-                            a[i] = (byte)baseColorModel.getAlpha(inData);
-                        }
-                    }
-                    if (hasAlpha)
-                    {
-                        cm = new IndexColorModel(bpc, size+1, r, g, b, a);
-                    }
-                    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);
-                        }
-                    }
-                }
                 else
                     cm = colorspace.createColorModel( bpc );
             }