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 2014/02/01 16:07:05 UTC

svn commit: r1563426 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType0.java

Author: lehmi
Date: Sat Feb  1 15:07:05 2014
New Revision: 1563426

URL: http://svn.apache.org/r1563426
Log:
PDFBOX-1870: fixed sample reader as proposed by Tilman Hausherr

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType0.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType0.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType0.java?rev=1563426&r1=1563425&r2=1563426&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType0.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/function/PDFunctionType0.java Sat Feb  1 15:07:05 2014
@@ -126,18 +126,14 @@ public class PDFunctionType0 extends PDF
                 // Successive values are adjacent in the bit stream; 
                 // there is no padding at byte boundaries.
                 ImageInputStream mciis = new MemoryCacheImageInputStream(getPDStream().createInputStream());
-                for (int i = 0; i < numberOfInputValues; i++)
+                for (int i = 0; i < arraySize; i++)
                 {
-                    int sizeInputValues = sizes.getInt(i);
-                    for (int j = 0; j < sizeInputValues; j++)
+                    for (int k = 0; k < numberOfOutputValues; k++)
                     {
-                        for (int k = 0; k < numberOfOutputValues; k++)
-                        {
-                            // TODO will this cast work properly for 32 bitsPerSample or should be use long[]?
-                            samples[index][k] = (int) mciis.readBits(bitsPerSample); 
-                        }
-                        index++;
+                        // TODO will this cast work properly for 32 bitsPerSample or should we use long[]?
+                        samples[index][k] = (int) mciis.readBits(bitsPerSample); 
                     }
+                    index++;
                 }
                 mciis.close();
             }
@@ -388,12 +384,10 @@ public class PDFunctionType0 extends PDF
                     }
                     return resultSample;
                 }
-                int[] coord1 = coord.clone();
-                int[] coord2 = coord.clone();
-                coord1[step] = inPrev[step];
-                coord2[step] = inNext[step];
-                int[] sample1 = getSamples()[calcSampleIndex(coord1)];
-                int[] sample2 = getSamples()[calcSampleIndex(coord2)];
+                coord[step] = inPrev[step];
+                int[] sample1 = getSamples()[calcSampleIndex(coord)];
+                coord[step] = inNext[step];
+                int[] sample2 = getSamples()[calcSampleIndex(coord)];
                 for (int i = 0; i < numberOfOutputValues; ++i)
                 {
                     resultSample[i] = interpolate(in[step], inPrev[step], inNext[step], sample1[i], sample2[i]);
@@ -409,12 +403,10 @@ public class PDFunctionType0 extends PDF
                     coord[step] = inPrev[step];
                     return rinterpol(coord, step + 1);
                 }
-                int[] coord1 = coord.clone();
-                int[] coord2 = coord.clone();
-                coord1[step] = inPrev[step];
-                coord2[step] = inNext[step];
-                float[] sample1 = rinterpol(coord1, step + 1);
-                float[] sample2 = rinterpol(coord2, step + 1);
+                coord[step] = inPrev[step];
+                float[] sample1 = rinterpol(coord, step + 1);
+                coord[step] = inNext[step];
+                float[] sample2 = rinterpol(coord, step + 1);
                 for (int i = 0; i < numberOfOutputValues; ++i)
                 {
                     resultSample[i] = interpolate(in[step], inPrev[step], inNext[step], sample1[i], sample2[i]);
@@ -439,7 +431,6 @@ public class PDFunctionType0 extends PDF
         int numberOfInputValues = input.length;
         int numberOfOutputValues = getNumberOfOutputParameters();
 
-        float[] outputValues = new float[numberOfOutputValues];
         int[] inputPrev = new int[numberOfInputValues];
         int[] inputNext = new int[numberOfInputValues];
 
@@ -505,7 +496,7 @@ public class PDFunctionType0 extends PDF
 //            }
 //        }
 //        
-        outputValues = new Rinterpol(input, inputPrev, inputNext).rinterpolate();
+        float[] outputValues = new Rinterpol(input, inputPrev, inputNext).rinterpolate();
 
         for (int i = 0; i < numberOfOutputValues; i++)
         {