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 2020/06/17 15:37:26 UTC

svn commit: r1878930 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java

Author: tilman
Date: Wed Jun 17 15:37:26 2020
New Revision: 1878930

URL: http://svn.apache.org/viewvc?rev=1878930&view=rev
Log:
PDFBOX-4863: refactor, use classic method when w or h < 1, combine scale values

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java?rev=1878930&r1=1878929&r2=1878930&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java Wed Jun 17 15:37:26 2020
@@ -1157,43 +1157,32 @@ public class PageDrawer extends PDFGraph
             // will trigger the workaround. Because of the slowness we only do it if the user
             // expects quality rendering and interpolation.
             Matrix imageTransformMatrix = new Matrix(imageTransform);
-            float imageScaleX = Math.abs(imageTransformMatrix.getScalingFactorX());
-            float imageScaleY = Math.abs(imageTransformMatrix.getScalingFactorY());
             AffineTransform graphicsTransformA = graphics.getTransform();
-            Matrix graphicsTransformM = new Matrix(graphicsTransformA);    
-            float graphicsScaleX = Math.abs(graphicsTransformM.getScalingFactorX());
-            float graphicsScaleY = Math.abs(graphicsTransformM.getScalingFactorY());
-            Image imageToDraw = image;
+            Matrix graphicsTransformMatrix = new Matrix(graphicsTransformA);    
+            float scaleX = Math.abs(imageTransformMatrix.getScalingFactorX() * graphicsTransformMatrix.getScalingFactorX());
+            float scaleY = Math.abs(imageTransformMatrix.getScalingFactorY() * graphicsTransformMatrix.getScalingFactorY());
 
-            if ((imageScaleX * graphicsScaleX < 0.5 || imageScaleY * graphicsScaleY < 0.5) &&
+            if ((scaleX < 0.5 || scaleY < 0.5) &&
                 RenderingHints.VALUE_RENDER_QUALITY.equals(graphics.getRenderingHint(RenderingHints.KEY_RENDERING)) &&
                 RenderingHints.VALUE_INTERPOLATION_BICUBIC.equals(graphics.getRenderingHint(RenderingHints.KEY_INTERPOLATION)))
             {
-                int w = Math.round(image.getWidth() * imageScaleX * graphicsScaleX);
-                int h = Math.round(image.getHeight() * imageScaleY * graphicsScaleY);
-                if (w < 1)
+                int w = Math.round(image.getWidth() * scaleX);
+                int h = Math.round(image.getHeight() * scaleY);
+                if (w < 1 || h < 1)
                 {
-                    w = 1;
+                    graphics.drawImage(image, imageTransform, null);
+                    return;
                 }
-                if (h < 1)
-                {
-                    h = 1;
-                }
-                imageToDraw = image.getScaledInstance(
-                        w,
-                        h,
-                        Image.SCALE_SMOOTH);
-
-                imageTransform.scale(1 / imageScaleX, 1 / imageScaleY); // remove the scale
+                Image imageToDraw = image.getScaledInstance(w, h, Image.SCALE_SMOOTH);
+                imageTransform.scale(1 / scaleX, 1 / scaleY); // remove the scale
                 imageTransform.preConcatenate(graphicsTransformA);
-                imageTransform.scale(1 / graphicsScaleX, 1 / graphicsScaleY);
                 graphics.setTransform(new AffineTransform());
                 graphics.drawImage(imageToDraw, imageTransform, null);
                 graphics.setTransform(graphicsTransformA);
             }
             else
             {
-                graphics.drawImage(imageToDraw, imageTransform, null);
+                graphics.drawImage(image, imageTransform, null);
             }
         }
     }