You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2018/03/12 06:44:16 UTC

svn commit: r1826504 - in /pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color: PDColorSpace.java PDIndexed.java

Author: tilman
Date: Mon Mar 12 06:44:16 2018
New Revision: 1826504

URL: http://svn.apache.org/viewvc?rev=1826504&view=rev
Log:
PDFBOX-4149: use cache when creating base colorspace in indexed colorspace

Modified:
    pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java
    pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDIndexed.java

Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java?rev=1826504&r1=1826503&r2=1826504&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java Mon Mar 12 06:44:16 2018
@@ -32,6 +32,7 @@ import java.awt.image.WritableRaster;
 import java.io.IOException;
 import java.awt.color.ColorSpace;
 import java.awt.image.ColorModel;
+import org.apache.pdfbox.pdmodel.ResourceCache;
 
 /**
  * A color space specifies how the colours of graphics objects will be painted on the page.
@@ -88,7 +89,7 @@ public abstract class PDColorSpace imple
     {
         if (colorSpace instanceof COSObject)
         {
-            return create(((COSObject) colorSpace).getObject(), resources);
+            return createFromCOSObject((COSObject) colorSpace, resources);
         }
         else if (colorSpace instanceof COSName)
         {
@@ -223,6 +224,28 @@ public abstract class PDColorSpace imple
         }
     }
 
+    private static PDColorSpace createFromCOSObject(COSObject colorSpace, PDResources resources)
+            throws IOException
+    {
+        PDColorSpace cs;
+        if (resources != null && resources.getResourceCache() != null)
+        {
+            ResourceCache resourceCache = resources.getResourceCache();
+            cs = resourceCache.getColorSpace(colorSpace);
+            if (cs != null)
+            {
+                return cs;
+            }
+        }
+        cs = create(colorSpace.getObject(), resources);
+        if (resources != null && resources.getResourceCache() != null && cs != null)
+        {
+            ResourceCache resourceCache = resources.getResourceCache();
+            resourceCache.put(colorSpace, cs);
+        }
+        return cs;
+    }
+
     // array for the given parameters
     protected COSArray array;
 

Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDIndexed.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDIndexed.java?rev=1826504&r1=1826503&r2=1826504&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDIndexed.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDIndexed.java Mon Mar 12 06:44:16 2018
@@ -30,6 +30,7 @@ import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSNumber;
 import org.apache.pdfbox.cos.COSStream;
 import org.apache.pdfbox.cos.COSString;
+import org.apache.pdfbox.pdmodel.PDResources;
 import org.apache.pdfbox.pdmodel.common.PDStream;
 
 /**
@@ -65,13 +66,27 @@ public final class PDIndexed extends PDS
     }
 
     /**
-     * Creates a new Indexed color space from the given PDF array.
+     * Creates a new indexed color space from the given PDF array.
      * @param indexedArray the array containing the indexed parameters
+     * @throws java.io.IOException
      */
     public PDIndexed(COSArray indexedArray) throws IOException
     {
+        this(indexedArray, null);
+    }
+
+    /**
+     * Creates a new indexed color space from the given PDF array.
+     * @param indexedArray the array containing the indexed parameters
+     * @param resources the resources, can be null. Allows to use its cache for the colorspace.
+     * @throws java.io.IOException
+     */
+    public PDIndexed(COSArray indexedArray, PDResources resources) throws IOException
+    {
         array = indexedArray;
-        baseColorSpace = PDColorSpace.create(array.getObject(1));
+        // don't call getObject(1), we want to pass a reference if possible
+        // to profit of caching (PDFBOX-4149)
+        baseColorSpace = PDColorSpace.create(array.get(1), resources);
         readColorTable();
         initRgbColorTable();
     }