PS: A lot of the reaction of course also depend on how you handle the image 
data once loaded – and obviously what your expected unit test results are.

I’ve tried to implement a full “image handling” library a while ago (a layer up 
from libpng, tiff, …) , when I found that most higher level open source library 
don’t do a very good job with color management in my opinion, at least not the 
ones I’ve tested. Unfortunately I didn’t have the time yet to finish it or get 
it to a point where it is really useful for others, especially the “build 
system” is more than clunky (I wanted to create cmake environment, so that it 
is easy to use it cross platform … ) and the unit tests are more manual test 
entry points than real unit tests at this time. Again haven’t got a lot of time 
to work on that as it’s a private project and I’m currently loaded with 
job-work, but if I remember correctly, the PNG READ handling should be OK to 
some extent. If I also remember correctly, the code to write PNG files is not 
checked in as I haven’t validated it’s correctness for all color formats and 
bit depths.

The library Itself doesn’t do a lot “upstream” with the image files, although I 
think the (more manual …) test code had some color space conversion examples, 
especially like “convert everything to sRGB” if I remember correctly.

https://github.com/freudi74/mfimage

Hope that helps more than adding more confusion…

Marco


Von: Marco Freudenberger
Gesendet: Dienstag, 21. Februar 2017 14:51
An: 'Aaron Boxer'
Cc: Noel Carboni; lcms-user@lists.sourceforge.net
Betreff: AW: [Lcms-user] Apply profile with PCS = cmsSigXYZData, Color Space = 
cmsSigGrayData

Well, if you set BOTH gammas to 2.2, it should work.

What test cases do you have and what are the expected results?

Von: Aaron Boxer [mailto:boxe...@gmail.com]
Gesendet: Dienstag, 21. Februar 2017 12:58
An: Marco Freudenberger
Cc: Noel Carboni; lcms-user@lists.sourceforge.net
Betreff: Re: [Lcms-user] Apply profile with PCS = cmsSigXYZData, Color Space = 
cmsSigGrayData



On Tue, Feb 21, 2017 at 1:15 PM, Marco Freudenberger 
<marco.freudenber...@entrustdatacard.com<mailto:marco.freudenber...@entrustdatacard.com>>
 wrote:
No. I’m actually talking about images that do not have an ICC profile embedded. 
Well – maybe all, actually.

Lines 187-191:

if( !png_get_gAMA(png, info, &gamma))



            gamma = 1.0;






/* we're not displaying but converting, screen gamma == 1.0 */


png_set_gamma(png, 1.0, gamma);





-          You try to read the file gamma. If none found, you set it to 1.0. 
That I think is the first mistake…

-          Then you set the screen gamma to 1.0. This is PROBABLY the next 
mistake, as the typical screen gamma is ~ 2.2. Linear gamma is unusual. The two 
“mistakes” might eliminate each other for images with NO gAMA chunk (because no 
correction is done for the screen).

-          I think png_set_gamma actually makes sure that the RGB (or gray …) 
values you are getting from the file are adjusted by (file gamma) / (screen 
gamma) – so you are not reading the values originally encoded in the file... I 
might be wrong, I didn’t check the documentation.

So …

-          If the file has an embedded gamma of 2.2, you would modify the 
values because the “screen gamma” is set to 1.0

Thanks. I tried using 2.2 and it broke a lot of my unit tests.  I guess 
allowing the user to set the gamma would be best - can blame the user if 
something goes wrong :)



Another big problem is, that this seems to be applied EVEN THOUGH an ICC 
profile might be embedded in the file, which already does any file color space 
-> screen color space for you. So if you have a file gamma AND an ICC profile, 
you might change values (especially “light intensity” of colors) while actually 
the ICC profile does all of that.
IF you want to use the file gamma to correct images when displaying them (or 
converting to another ICC profile), you should rather generate an “on the fly” 
icc profile based on the file gamma (and given (cHRM chunk) or assumed 
chromatic primaries rather than having libpng modifying the values you read for 
you. This is often an area of confusion with libpng ... I hope I expressed that 
all in a way that it can be understood… I’m not a English is not my mothers 
tongue and I tend to make technical descriptions extremely complicated …

Thanks, your writing is crystal clear - just a lot of detail to think over. I 
have changed my code so that gamma is only applied if there is no ICC.

Best,
Aaron
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Lcms-user mailing list
Lcms-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lcms-user

Reply via email to