Recently I have come to realize that Screen rendering may not always be perfect. Our tests have begun to show changes in their baseline even if run under identical conditions with identical code with no other obvious cause for the changes.
I should explain the basics of how the tests function. We use the Fest library to mimic user interaction with our viewer examples. Whilst Fest is doing this we take screenshots of the component that should be showing some behavior and compare this to a baseline of images that are known to show the correct output. This comparison is done by comparing the pixel colors between the generated output and the baseline.
A little while ago I moved my tests to a new test machine and upon setting up them up I found a slight problem. The tests are failing but the output appears correct when compared to our baseline. The reason the tests are failing is because it is detecting some pixels have changed although the difference in the RGB values can be anything as little as 1 on a single channel to up to 12 (and very rarely higher than this) on multiple channels. The most irritating thing about this is I can run the same code through the tests multiple times and get different sets of results.
In order to find what was wrong I activated some code that will alter the pixel color of any pixel that was of a different color such as Cyan or magenta as these are known not to appear within the output and are very easy to pick out. After running through the tests several times I found that although the output changed it was consistently appearing in the similar positions. The changes always appeared on images found on the PDF page and always at points where two different colors shared an edge. A further problem is that different images show the changes at different times, this means the tests are consistently showing change as when the baseline is updated with the changes to an image, the next time the tests are run these changes are no longer present or only present in certain images.
Unfortunately I have to leave this without a satisfying conclusion as I do not have any hard evidence as to what is causing this issue. Considering the fact that is only appears within images and not text, shapes or any other object within the PDF and that it only happens when the PDF is displayed on screen and not when it is rendered directly to an image I am leaning toward one possibility. It appears that screen rendering may be coming up with slightly different color values when an image is scaled and pixels are merged.
If anyone has ever experienced anything like this or wishes to know more feel free to leave a comment, I would be nice to hear from you.
IDRsolutions develop a Java PDF library, a PDF forms to HTML5 converter, a PDF to HTML5 or SVG converter and a Java Image Library that doubles as an ImageIO replacement. On the blog our team post about anything interesting they learn about.