[poppler] Testing color management functionality
Leonard Rosenthol
lrosenth at adobe.com
Mon May 18 03:33:09 PDT 2009
Or most likely, create the various intents on the fly and cache them. Recreating each time you encounter them will have performance penalties (since creation of a transform is fairly heavyweight).
Leonard
-----Original Message-----
From: poppler-bounces at lists.freedesktop.org [mailto:poppler-bounces at lists.freedesktop.org] On Behalf Of Koji Otani
Sent: Monday, May 18, 2009 5:12 AM
To: hvengel at astound.net
Cc: poppler at lists.freedesktop.org
Subject: Re: [poppler] Testing color management functionality
From: "Hal V. Engel" <hvengel at astound.net>
Subject: Re: [poppler] Testing color management functionality
Date: Fri, 15 May 2009 18:11:33 -0700
Message-ID: <200905151811.33985.hvengel at astound.net>
hvengel> >
hvengel> > Poppler doesn't support overprinting, so #27 and #28 fail.
hvengel> > I'm not sure poppler support spot color.
hvengel>
hvengel> It appears that it does not.
hvengel>
hvengel> >
hvengel> > Colors of vector regions are same as those of pixel regions in #34-#38.
hvengel>
hvengel> I am sorry I got this wrong. When looking more closely at the documentation
hvengel> on the altona site it appears that the differences I am seeing in #34 are not
hvengel> vector vs. pixel but rather DeviceCMYK vs. ECI-RGB. The altona documentation
hvengel> says:
hvengel>
hvengel> "Under no circumstances shall a distinct color difference be visible per color
hvengel> mode between vector and pixel elements. A subtle color difference between
hvengel> the elements of different color modes is acceptable. As a consequence, along
hvengel> the virtual line between ECI-RGB and DeviceCMYK (from upper left to lower
hvengel> right corner), a subtle color difference may be visible. Color differences
hvengel> between elements – vector versus pixel – within the same color mode indicate
hvengel> that vector and pixel elements are treated differently"
hvengel>
hvengel> The difference I am seeing is very pronounced and not at all subtle and is
hvengel> along the virtual line between ECI-RGB and DeviceCMYK. I do not see any
hvengel> difference between the vector and pixel elements in the same color mode. So
hvengel> this indicates a problem with how DeviceCMYK is handled and perhaps other
hvengel> Device* color spaces.
hvengel>
hvengel> Looking at the PDF specification I see that it is possible for the the
hvengel> dictionary for a Device* object to have a default color space specified. I
hvengel> don't know if the altona document has this but looking at the code it is clear
hvengel> that no attempt is made to get or use the default color space for the Device*
hvengel> objects. If it is in the document it should be used any time the Device*
hvengel> color space is not a match with the output device color space.
hvengel>
I see. Color management code which I added doesn't touch Device* color
spaces.
hvengel> #35 I can see a slight difference between the CIELab and ECI_RGB sections.
hvengel> Looking at the code it was not doing the white point correction to the XYZ
hvengel> values after the calll to getXYZ() in GfxLabColorSpace::getRGB. Fixing that
hvengel> corrected the problem. While looking at this I discovered that in
hvengel> GfxLabColorSpace::getGray() it had the same problem. I will create a patch
hvengel> with this set if fixes.
hvengel>
hvengel> #36, #37 and #38 do not show any of the difference from changes to rendering
hvengel> intent that should be there.
hvengel>
hvengel> Looking at the code it is always using INTENT_RELATIVE_COLORIMETRIC and there
hvengel> is no attempt to get the Intent from the dictionary in
hvengel> GfxICCBasedColorSpace::parse(). So the code is not parsing out the intent and
hvengel> using that to create the transforms. I had a look at the code but I was not
hvengel> able to get the Intent from the dictionary since I am not at all familiar with
hvengel> the code base. Perhaps someone who understands how the dictionary stuff
hvengel> works could take a look at adding this to GfxICCBasedColorSpace::parse().
hvengel>
As Leonard said INTENT can come from several places, it's not so
simple to handle INTENT correctly. We have to check if current INTENT
is changed and recreate transform if needed.
This is why I didn't support INTENT this time.
_______________________________________________
poppler mailing list
poppler at lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/poppler
More information about the poppler
mailing list