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); /*