You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@pdfbox.apache.org by "John Hewson (JIRA)" <ji...@apache.org> on 2015/07/15 22:49:04 UTC

[jira] [Comment Edited] (PDFBOX-2881) Radial and Axial shading steps are calculated incorrectly

    [ https://issues.apache.org/jira/browse/PDFBOX-2881?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14628701#comment-14628701 ] 

John Hewson edited comment on PDFBOX-2881 at 7/15/15 8:48 PM:
--------------------------------------------------------------

Note that the calculation of the radial factor is different from the old technique because the color table is calculated "on the line that connects two circles' centers", so I don't see why the old code was trying to take the radius into account, given that the color table doesn't use that. There might be an underlying problem here.

Also, the deviceRect is now not being taken into account (instead the user -> device) transform is used. That's not ideal, because we should be clamping the calculation to the device bounds to avoid wasted work, but the current implementation of the color table does not permit that.


was (Author: jahewson):
Note that the calculation of the radial factor is different from the old technique because the color table is calculated "on the line that connects two circles' centers", so I don't see why the old code was trying to take the radius into account, given that the color table doesn't use that. There might be an underlying problem here.

> 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: dev-unsubscribe@pdfbox.apache.org
For additional commands, e-mail: dev-help@pdfbox.apache.org