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/01/29 19:19:25 UTC

svn commit: r1822562 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics: blend/BlendMode.java state/PDExtendedGraphicsState.java

Author: tilman
Date: Mon Jan 29 19:19:25 2018
New Revision: 1822562

URL: http://svn.apache.org/viewvc?rev=1822562&view=rev
Log:
PDFBOX-3353: make it possible to set BlendMode without using getCOSObject()

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/blend/BlendMode.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDExtendedGraphicsState.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/blend/BlendMode.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/blend/BlendMode.java?rev=1822562&r1=1822561&r2=1822562&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/blend/BlendMode.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/blend/BlendMode.java Mon Jan 29 19:19:25 2018
@@ -62,6 +62,17 @@ public abstract class BlendMode
         }
         return BlendMode.COMPATIBLE;
     }
+    
+    /**
+     * Determines the blend mode name from the BM object.
+     *
+     * @param bm Blend mode.
+     * @return name of blend mode.
+     */
+    public static COSName getCOSName(BlendMode bm)
+    {
+        return BLEND_MODE_NAMES.get(bm);
+    }
 
     public static final SeparableBlendMode NORMAL = new SeparableBlendMode()
     {
@@ -184,8 +195,9 @@ public abstract class BlendMode
         }
     };
 
-    // this map *must* come after the declarations above, otherwise its values will be null
+    // these maps *must* come after the declarations above, otherwise its values will be null
     private static final Map<COSName, BlendMode> BLEND_MODES = createBlendModeMap();
+    private static final Map<BlendMode, COSName> BLEND_MODE_NAMES = createBlendModeNamesMap();
 
     private static Map<COSName, BlendMode> createBlendModeMap()
     {
@@ -208,6 +220,26 @@ public abstract class BlendMode
         return map;
     }
 
+    private static Map<BlendMode, COSName> createBlendModeNamesMap()
+    {
+        Map<BlendMode, COSName> map = new HashMap<>(13);
+        map.put(BlendMode.NORMAL, COSName.NORMAL);
+        map.put(BlendMode.COMPATIBLE, COSName.COMPATIBLE);
+        map.put(BlendMode.MULTIPLY, COSName.MULTIPLY);
+        map.put(BlendMode.SCREEN, COSName.SCREEN);
+        map.put(BlendMode.OVERLAY, COSName.OVERLAY);
+        map.put(BlendMode.DARKEN, COSName.DARKEN);
+        map.put(BlendMode.LIGHTEN, COSName.LIGHTEN);
+        map.put(BlendMode.COLOR_DODGE, COSName.COLOR_DODGE);
+        map.put(BlendMode.COLOR_BURN, COSName.COLOR_BURN);
+        map.put(BlendMode.HARD_LIGHT, COSName.HARD_LIGHT);
+        map.put(BlendMode.SOFT_LIGHT, COSName.SOFT_LIGHT);
+        map.put(BlendMode.DIFFERENCE, COSName.DIFFERENCE);
+        map.put(BlendMode.EXCLUSION, COSName.EXCLUSION);
+        // TODO - non-separable blending modes
+        return map;
+    }
+
     BlendMode()
     {
     }

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDExtendedGraphicsState.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDExtendedGraphicsState.java?rev=1822562&r1=1822561&r2=1822562&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDExtendedGraphicsState.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDExtendedGraphicsState.java Mon Jan 29 19:19:25 2018
@@ -545,6 +545,16 @@ public class PDExtendedGraphicsState imp
     {
         return BlendMode.getInstance(dict.getDictionaryObject(COSName.BM));
     }
+    
+    /**
+     * Set the blending mode.
+     * 
+     * @param bm 
+     */
+    public void setBlendMode(BlendMode bm)
+    {
+        dict.setItem(COSName.BM, BlendMode.getCOSName(bm));
+    }
 
     /**
      * Returns the soft mask stored in the COS dictionary