You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ja...@apache.org on 2015/07/14 23:54:15 UTC
svn commit: r1691093 - in
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading:
AxialShadingContext.java AxialShadingPaint.java RadialShadingContext.java
RadialShadingPaint.java
Author: jahewson
Date: Tue Jul 14 21:54:14 2015
New Revision: 1691093
URL: http://svn.apache.org/r1691093
Log:
PDFBOX-2881: Calculate the number of steps using the device bounds
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingPaint.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingPaint.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java?rev=1691093&r1=1691092&r2=1691093&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java Tue Jul 14 21:54:14 2015
@@ -17,9 +17,9 @@
package org.apache.pdfbox.pdmodel.graphics.shading;
import java.awt.PaintContext;
+import java.awt.Rectangle;
import java.awt.geom.AffineTransform;
import java.awt.geom.NoninvertibleTransformException;
-import java.awt.geom.Point2D;
import java.awt.image.ColorModel;
import java.awt.image.Raster;
import java.awt.image.WritableRaster;
@@ -50,7 +50,7 @@ public class AxialShadingContext extends
private final double x1x0;
private final double y1y0;
private final float d1d0;
- private double denom;
+ private final double denom;
private final int factor;
private final int[] colorTable;
@@ -64,10 +64,11 @@ public class AxialShadingContext extends
* @param colorModel the color model to be used
* @param xform transformation for user to device space
* @param matrix the pattern matrix concatenated with that of the parent content stream
- * @throws java.io.IOException if there is an error getting the color space or doing color conversion.
+ * @param deviceBounds the bounds of the area to paint, in device units
+ * @throws IOException if there is an error getting the color space or doing color conversion.
*/
public AxialShadingContext(PDShadingType2 shading, ColorModel colorModel, AffineTransform xform,
- Matrix matrix) throws IOException
+ Matrix matrix, Rectangle deviceBounds) throws IOException
{
super(shading, colorModel, xform, matrix);
this.axialShadingType = shading;
@@ -101,7 +102,6 @@ public class AxialShadingContext extends
y1y0 = coords[3] - coords[1];
d1d0 = domain[1] - domain[0];
denom = Math.pow(x1x0, 2) + Math.pow(y1y0, 2);
- double longestDistance = Math.sqrt(denom);
try
{
@@ -115,12 +115,11 @@ public class AxialShadingContext extends
LOG.error(ex, ex);
}
- // transform the distance to actual pixel space
- // use transform, because xform.getScaleX() does not return correct scaling on 90° rotated matrix
- Point2D point = new Point2D.Double(longestDistance, longestDistance);
- matrix.transform(point);
- xform.transform(point, point);
- factor = (int) Math.max(Math.abs(point.getX()), Math.abs(point.getY()));
+ // get the number of steps
+ factor = (int) Math.max(Math.abs(deviceBounds.getWidth()),
+ Math.abs(deviceBounds.getHeight()));
+
+ // build the color table for the given number of steps
colorTable = calcColorTable();
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingPaint.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingPaint.java?rev=1691093&r1=1691092&r2=1691093&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingPaint.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingPaint.java Tue Jul 14 21:54:14 2015
@@ -64,7 +64,7 @@ public class AxialShadingPaint implement
{
try
{
- return new AxialShadingContext(shading, cm, xform, matrix);
+ return new AxialShadingContext(shading, cm, xform, matrix, deviceBounds);
}
catch (IOException e)
{
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java?rev=1691093&r1=1691092&r2=1691093&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java Tue Jul 14 21:54:14 2015
@@ -17,9 +17,9 @@
package org.apache.pdfbox.pdmodel.graphics.shading;
import java.awt.PaintContext;
+import java.awt.Rectangle;
import java.awt.geom.AffineTransform;
import java.awt.geom.NoninvertibleTransformException;
-import java.awt.geom.Point2D;
import java.awt.image.ColorModel;
import java.awt.image.Raster;
import java.awt.image.WritableRaster;
@@ -50,8 +50,6 @@ public class RadialShadingContext extend
private final double x1x0;
private final double y1y0;
private final double r1r0;
- private final double x1x0pow2;
- private final double y1y0pow2;
private final double r0pow2;
private final float d1d0;
private final double denom;
@@ -68,10 +66,11 @@ public class RadialShadingContext extend
* @param colorModel the color model to be used
* @param xform transformation for user to device space
* @param matrix the pattern matrix concatenated with that of the parent content stream
- * @throws java.io.IOException if there is an error getting the color space or doing color conversion.
+ * @param deviceBounds the bounds of the area to paint, in device units
+ * @throws IOException if there is an error getting the color space or doing color conversion.
*/
public RadialShadingContext(PDShadingType3 shading, ColorModel colorModel,
- AffineTransform xform, Matrix matrix)
+ AffineTransform xform, Matrix matrix, Rectangle deviceBounds)
throws IOException
{
super(shading, colorModel, xform, matrix);
@@ -106,12 +105,9 @@ public class RadialShadingContext extend
x1x0 = coords[3] - coords[0];
y1y0 = coords[4] - coords[1];
r1r0 = coords[5] - coords[2];
- x1x0pow2 = Math.pow(x1x0, 2);
- y1y0pow2 = Math.pow(y1y0, 2);
r0pow2 = Math.pow(coords[2], 2);
- denom = x1x0pow2 + y1y0pow2 - Math.pow(r1r0, 2);
+ denom = Math.pow(x1x0, 2) + Math.pow(y1y0, 2) - Math.pow(r1r0, 2);
d1d0 = domain[1] - domain[0];
- double longestDistance = getLongestDistance();
try
{
@@ -125,38 +121,12 @@ public class RadialShadingContext extend
LOG.error(ex, ex);
}
- // transform the distance to actual pixel space
- // use transform, because xform.getScaleX() does not return correct scaling on 90° rotated matrix
- Point2D point = new Point2D.Double(longestDistance, longestDistance);
- matrix.transform(point);
- xform.transform(point, point);
- factor = (int) Math.max(Math.abs(point.getX()), Math.abs(point.getY()));
- colorTable = calcColorTable();
- }
+ // get the number of steps
+ factor = (int) Math.max(Math.abs(deviceBounds.getWidth()),
+ Math.abs(deviceBounds.getHeight()));
- // get the longest distance of two points which are located on these two circles
- private double getLongestDistance()
- {
- double centerToCenter = Math.sqrt(x1x0pow2 + y1y0pow2);
- double rmin, rmax;
- if (coords[2] < coords[5])
- {
- rmin = coords[2];
- rmax = coords[5];
- }
- else
- {
- rmin = coords[5];
- rmax = coords[2];
- }
- if (centerToCenter + rmin <= rmax)
- {
- return 2 * rmax;
- }
- else
- {
- return rmin + centerToCenter + coords[5];
- }
+ // build the color table for the given number of steps
+ colorTable = calcColorTable();
}
/**
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingPaint.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingPaint.java?rev=1691093&r1=1691092&r2=1691093&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingPaint.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingPaint.java Tue Jul 14 21:54:14 2015
@@ -65,7 +65,7 @@ public class RadialShadingPaint implemen
{
try
{
- return new RadialShadingContext(shading, cm, xform, matrix);
+ return new RadialShadingContext(shading, cm, xform, matrix, deviceBounds);
}
catch (IOException e)
{