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/02/08 18:58:28 UTC

svn commit: r1823593 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/blend/BlendMode.java

Author: tilman
Date: Thu Feb  8 18:58:28 2018
New Revision: 1823593

URL: http://svn.apache.org/viewvc?rev=1823593&view=rev
Log:
PDFBOX-3000: use the revised PDF 2.0 equations for the blend modes ColorDodge and ColorBurn as suggested by Jani Pehkonen

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/blend/BlendMode.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=1823593&r1=1823592&r2=1823593&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 Thu Feb  8 18:58:28 2018
@@ -136,7 +136,16 @@ public abstract class BlendMode
         @Override
         public float blendChannel(float srcValue, float dstValue)
         {
-            return (srcValue < 1) ? Math.min(1, dstValue / (1 - srcValue)) : 1;
+            // See PDF 2.0 specification
+            if (dstValue == 0)
+            {
+                return 0;
+            }
+            if (dstValue >= 1 - srcValue)
+            {
+                return 1;
+            }
+            return dstValue / (1 - srcValue);
         }
     };
 
@@ -145,7 +154,16 @@ public abstract class BlendMode
         @Override
         public float blendChannel(float srcValue, float dstValue)
         {
-            return (srcValue > 0) ? 1 - Math.min(1, (1 - dstValue) / srcValue) : 0;
+            // See PDF 2.0 specification
+            if (dstValue == 1)
+            {
+                return 1;
+            }
+            if (1 - dstValue >= srcValue)
+            {
+                return 0;
+            }
+            return 1 - (1 - dstValue) / srcValue;
         }
     };