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)