You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@pdfbox.apache.org by "Tilman Hausherr (JIRA)" <ji...@apache.org> on 2014/01/31 07:22:09 UTC

[jira] [Comment Edited] (PDFBOX-1870) PDFunctionType0 incorrect

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

Tilman Hausherr edited comment on PDFBOX-1870 at 1/31/14 6:21 AM:
------------------------------------------------------------------

patch that includes interpolation in any dimension.

Its probably not the fastest method, a better one is here but has the "wrong" license:
https://svn.atlassian.com/svn/public/atlassian/vendor/pdf-renderer/trunk/src/main/java/com/sun/pdfview/function/FunctionType0.java
Their method is explained here:
https://web.archive.org/web/20050223195150/http://osl.iu.edu/~tveldhui/papers/MAScThesis/node33.html


was (Author: tilman):
"nightly" class that includes interpolation in any dimension. Will do some refactoring tomorrow and then post a patch instead.

Its probably not the fastest method, a better one is here but has the "wrong" license:
https://svn.atlassian.com/svn/public/atlassian/vendor/pdf-renderer/trunk/src/main/java/com/sun/pdfview/function/FunctionType0.java

> PDFunctionType0 incorrect
> -------------------------
>
>                 Key: PDFBOX-1870
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-1870
>             Project: PDFBox
>          Issue Type: Sub-task
>          Components: PDModel
>    Affects Versions: 2.0.0
>            Reporter: Tilman Hausherr
>            Priority: Minor
>         Attachments: PDFunctionType0.patch
>
>
> Type 0 (Sampled) Functions are described in 3.9.1 of the pdf spec and bascially, its cheating: there's an n-dimensional grid of values ("samples") and the function shall return these values or something in-between.
> PDFunctionType0 has two bugs:
> 1) it does not do any interpolation. The function interpolate() is called several times, but only adjust values between ranges etc, not to calculate the color between 2^n samples - that part is "outputValues[i] = (outputValuesPrevious[i] + outputValuesNext[i]) / 2". The spec does not tell much, only that "Interpolation is used to determine output values from the nearest surrounding values in the sample table". I have done a linear/bilinear interpolation implementation for 1D/2D inputs. I did not do an interpolation implementation for 3D and higher, because its unclear whether this is actually used. Instead, I return random (!) values.
> 2) the sample bits are not collected correctly, the current code ignores the leftover bits when a row is done. The spec tells us "Successive values are adjacent in the bit stream; there is no padding at byte boundaries". Luckily, that one is easy to correct, three lines must be moved up. Alternatively, one might use the bit-io lib I mention in PDFBOX-615.



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)