[poppler] Pixel tracer
Volker Grabsch
v at njh.eu
Tue Nov 18 03:52:34 PST 2014
Dear Poppler developers,
I have the task to render PDF documents and to trace back each output
pixel to the object(s) that were rendered at this place. To achieve
this, Poppler is a great help, so I'd like to contribute something
back. Attached is the second smallest patch (see below) I came up
with.
Do you think it makes sense to include this feature in Poppler?
Usage:
A. Use the private poppler API to render a PDF onto a custom OutputDev.
B. Derive that custom OutputDev from SplashOutputDev.
C. Set your tracePixel() callback, which is called for each rendered
pixel. It may be part of the same custom OutputDev class.
D. Keep track of which object is rendered right now (overwriting
drawImage(), etc.), and use that information within tracePixel().
To get the discussion started, these are the things I think I could
have done differently:
1. Currently, tracePixel() is called in addition to the "pipe run".
However, it could also be called instead of the "pipe run". This
would result in an even smaller patch, but it would suppress the
PDF output while the tracer is run, which could possibly cause side
effects on anti aliasing and other things. Also, since I need the
rendered image as well, I would have to run the renderer twice -
with and without pixel tracer.
2. The tracePixel() callback only gets the pixel coordinates (x, y),
which is sufficient for my task. However, one could also think
of providing the actual pixel value to that callback. The drawback
is the additional complexity of handling different types of pixels.
(RGB, Mono, etc.)
3. I could have used a more C++-like interface, using templates,
std::function and other nice stuff. However, that would not fit
well in the current coding style of Poppler, thus requiring a lot
more changes. On the positive side, this would allow for a
completely transparent tracing mechanism, where e.g. the compiler
is able to optimize an empty tracer function completely away.
Also, that could restructure the current "pipe" mechanism in a way
that is as flexible as now, but would enable the compiler to inline
the complete "pipe run" code without any function call.
4. I could have added the whole code for the object tracing to
Poppler, rather than just the ability to add custom callbacks.
However, this would be less flexible, and it is probably not a good
idea to overload the Poppler project with too much specialized code
that is useful for just one or two applications.
Regards,
Volker
--
Volker Grabsch
---<<(())>>---
-------------- next part --------------
A non-text attachment was scrubbed...
Name: poppler-pixel-tracer.patch
Type: text/x-diff
Size: 4162 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/poppler/attachments/20141118/0a4420fa/attachment.patch>
More information about the poppler
mailing list