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 2014/07/23 20:19:06 UTC

svn commit: r1612907 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImage.java

Author: tilman
Date: Wed Jul 23 18:19:06 2014
New Revision: 1612907

URL: http://svn.apache.org/r1612907
Log:
PDFBOX-2237: handle empty filter array for inline images; code cleanup

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImage.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImage.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImage.java?rev=1612907&r1=1612906&r2=1612907&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImage.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImage.java Wed Jul 23 18:19:06 2014
@@ -38,8 +38,8 @@ import org.apache.pdfbox.pdmodel.graphic
 import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray;
 
 /**
- * An inline image object which uses a special syntax to express the data for
- * a small image directly within the content stream.
+ * An inline image object which uses a special syntax to express the data for a
+ * small image directly within the content stream.
  *
  * @author Ben Litchfield
  * @author John Hewson
@@ -47,34 +47,35 @@ import org.apache.pdfbox.pdmodel.graphic
 public final class PDInlineImage implements PDImage
 {
     // image parameters
-    private COSDictionary parameters;
+    private final COSDictionary parameters;
 
     // color spaces in current resource dictionary
-    private Map<String, PDColorSpace> colorSpaces;
+    private final Map<String, PDColorSpace> colorSpaces;
 
     // image data
-    private PDStream stream;
+    private final PDStream stream;
 
     /**
      * Creates an inline image from the given parameters and data.
+     *
      * @param parameters the image parameters
      * @param data the image data
      * @param colorSpaces the color spaces in the current resources parameters
      */
     public PDInlineImage(COSDictionary parameters, byte[] data,
-                         Map<String, PDColorSpace> colorSpaces) throws IOException
+            Map<String, PDColorSpace> colorSpaces) throws IOException
     {
         this.parameters = parameters;
         this.colorSpaces = colorSpaces;
 
         DecodeResult decodeResult = null;
-        if (getFilters() == null)
+        List<String> filters = getFilters();
+        if (filters == null || filters.isEmpty())
         {
             this.stream = new PDMemoryStream(data);
         }
         else
         {
-            List<String> filters = getFilters();
             ByteArrayInputStream in = new ByteArrayInputStream(data);
             ByteArrayOutputStream out = new ByteArrayOutputStream(data.length);
             for (int i = 0; i < filters.size(); i++)
@@ -96,11 +97,13 @@ public final class PDInlineImage impleme
         }
     }
 
+    @Override
     public COSBase getCOSObject()
     {
         return parameters;
     }
 
+    @Override
     public int getBitsPerComponent()
     {
         if (isStencil())
@@ -113,11 +116,13 @@ public final class PDInlineImage impleme
         }
     }
 
+    @Override
     public void setBitsPerComponent(int bitsPerComponent)
     {
         parameters.setInt(COSName.BPC, bitsPerComponent);
     }
 
+    @Override
     public PDColorSpace getColorSpace() throws IOException
     {
         COSBase cs = parameters.getDictionaryObject(COSName.CS);
@@ -143,6 +148,7 @@ public final class PDInlineImage impleme
         }
     }
 
+    @Override
     public void setColorSpace(PDColorSpace colorSpace)
     {
         COSBase base = null;
@@ -153,28 +159,34 @@ public final class PDInlineImage impleme
         parameters.setItem(COSName.CS, base);
     }
 
+    @Override
     public int getHeight()
     {
         return parameters.getInt(COSName.H, COSName.HEIGHT, -1);
     }
 
+    @Override
     public void setHeight(int height)
     {
         parameters.setInt(COSName.H, height);
     }
 
+    @Override
     public int getWidth()
     {
         return parameters.getInt(COSName.W, COSName.WIDTH, -1);
     }
 
+    @Override
     public void setWidth(int width)
     {
         parameters.setInt(COSName.W, width);
     }
 
     /**
-     * Returns a list of filters applied to this stream, or null if there are none.
+     * Returns a list of filters applied to this stream, or null if there are
+     * none.
+     *
      * @return a list of filters applied to this stream
      */
     // TODO return an empty list if there are none?
@@ -196,6 +208,7 @@ public final class PDInlineImage impleme
 
     /**
      * Sets which filters are applied to this stream.
+     *
      * @param filters the filters to apply to this stream.
      */
     public void setFilters(List<String> filters)
@@ -204,36 +217,43 @@ public final class PDInlineImage impleme
         parameters.setItem(COSName.F, obj);
     }
 
+    @Override
     public void setDecode(COSArray decode)
     {
         parameters.setItem(COSName.D, decode);
     }
 
+    @Override
     public COSArray getDecode()
     {
         return (COSArray) parameters.getDictionaryObject(COSName.D, COSName.DECODE);
     }
 
+    @Override
     public boolean isStencil()
     {
         return parameters.getBoolean(COSName.IM, COSName.IMAGE_MASK, false);
     }
 
+    @Override
     public void setStencil(boolean isStencil)
     {
         parameters.setBoolean(COSName.IM, isStencil);
     }
 
+    @Override
     public PDStream getStream() throws IOException
     {
         return stream;
     }
 
+    @Override
     public BufferedImage getImage() throws IOException
     {
         return SampledImageReader.getRGBImage(this, getColorKeyMask());
     }
 
+    @Override
     public BufferedImage getStencilImage(Paint paint) throws IOException
     {
         if (!isStencil())
@@ -244,7 +264,9 @@ public final class PDInlineImage impleme
     }
 
     /**
-     * Returns the color key mask array associated with this image, or null if there is none.
+     * Returns the color key mask array associated with this image, or null if
+     * there is none.
+     *
      * @return Mask Image XObject
      */
     public COSArray getColorKeyMask()
@@ -252,13 +274,14 @@ public final class PDInlineImage impleme
         COSBase mask = parameters.getDictionaryObject(COSName.IM, COSName.MASK);
         if (mask instanceof COSArray)
         {
-            return (COSArray)mask;
+            return (COSArray) mask;
         }
         return null;
     }
 
     /**
      * Returns the suffix for this image type, e.g. jpg/png.
+     *
      * @return The image suffix.
      */
     public String getSuffix()