[
https://issues.apache.org/jira/browse/PDFBOX-2881?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Tilman Hausherr updated PDFBOX-2881:
------------------------------------
Labels: shading (was: )
> Radial and Axial shading steps are calculated incorrectly
> ---------------------------------------------------------
>
> Key: PDFBOX-2881
> URL: https://issues.apache.org/jira/browse/PDFBOX-2881
> Project: PDFBox
> Issue Type: Bug
> Components: Rendering
> Affects Versions: 2.0.0
> Reporter: John Hewson
> Assignee: John Hewson
> Labels: shading
> Fix For: 2.0.0
>
>
> I found a shading bug while writing some code to dump all shadings in a PDF.
> I don't know if this affects PDF rendering within PageDrawer or not.
> RadialShadingContext and AxialShadingContext use the following code in their
> constructors to calculate the number of steps (pixels) in the shading and
> build a lookup table for each step:
> {code}
> // 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();
> {code}
> The variable "factor" is the number of steps and "matrix" is the parent
> stream's matrix + the pattern matrix, so this code is taking the current
> scale and assuming that that is equal to the number of pixels. This works
> when a pattern is painted onto a 0...1 scaled surface, but otherwise it
> produces incorrect results.
> There's no way to calculate the number of pixels in the device from its
> scale, or its matrix. Paint#createContext() provides the device bounds
> Rectangle, which is what we should be using. Indeed, this is handled
> correctly in the other shading contexts.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]