Bug 692223 - LCMS 2.x Black preserving Rendering Intents
Summary: LCMS 2.x Black preserving Rendering Intents
Status: NOTIFIED FIXED
Alias: None
Product: Ghostscript
Classification: Unclassified
Component: Color (show other bugs)
Version: master
Hardware: All All
: P4 enhancement
Assignee: Michael Vrhel
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-05-23 08:12 UTC by Thomas
Modified: 2012-10-30 19:45 UTC (History)
1 user (show)

See Also:
Customer: 582
Word Size: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Thomas 2011-05-23 08:12:10 UTC
As I have seen, there is a lot of color work in progress.
So it would be a great enhancement, to consider the Black preserving
Rendering intents from LCMS 2.x.
Comment 1 Michael Vrhel 2011-05-25 05:13:14 UTC
I agree I will add this in over the next few weeks as I finish up the rendering intent changes.
Comment 2 Michael Vrhel 2012-01-25 01:01:28 UTC
Thomas,

Now that we have moved over to lcms 2.x I was going to add this in.  I see Marti has two options.  One that he calls INTENT_PRESERVE_K_PLANE and one that he calls
INTENT_PRESERVE_K_ONLY.   I have not dug into how these differ and it was not clear to me in the documentation.    Any thoughts on these?
Comment 3 Thomas 2012-01-25 11:16:31 UTC
Michael,

this is great news!

In the moment I looked into the Documentation and did some quick Tests with it.

INTENT_PRESERVE_K_ONLY_RELATIVE_COLORIMETRIC:
"Just" preserves Black, if in the Source Color CMYK a value is only in the K Channel. So pure Black.
With my Test Profiles it has the following behaviour:
C10, M0, Y0, K50 -->> C45, M35, Y29, K7
C10, M20, Y0, K50 -->> C45, M48, Y29, K10
C0, M0, Y0, K50 -->> C0, M0, Y0, K53

INTENT_PRESERVE_K_PLANE_RELATIVE_COLORIMETRIC:
Tries to preserve the whole Black Channel, even if there are some values in more or all CMYK values.
With my Test Profiles it has the following behaviour:
C10, M0, Y0, K50 -->> C11, M1, Y0, K53
C10, M20, Y0, K50 -->> C15, M23, Y2, K53
C0, M0, Y0, K50 -->> C0, M0, Y0, K53

I have 2 quick questions:
- Will "-sProofProfile=" get also a Parameter for the Intent, or is there the "-sRenderIntent=" Parameter used?
- "-sDeviceLinkProfile=" and "-sNamedProfile=" crash everytime in the current Head. So I think it is not finished yet. Am I right here?
Comment 4 Michael Vrhel 2012-01-25 19:33:03 UTC
Thomas,

-sDeviceLinkProfile should work at this time.  I will check to see if there is an issue.

-sNamedProfile requires customized development work.  There is currently an example that is described in the documentation, and can be readily enable.  In particular, it was set up to actually make use of non-ICC data bases for dealing with spot colors.  How do you see yourself making use of specialized spot color (and DeviceN) color handling?

So with the black intent do you think you would want both options, the K_ONLY and K_PLANE options?
Comment 5 Thomas 2012-01-26 09:30:42 UTC
Michael,

-sDeviceLinkProfile should work at this time.  I will check to see if there is
an issue.
-
I rechecked in the moment and it crashes gs.


-sNamedProfile requires customized development work.  There is currently an
example that is described in the documentation, and can be readily enable.  In
particular, it was set up to actually make use of non-ICC data bases for
dealing with spot colors.  How do you see yourself making use of specialized
spot color (and DeviceN) color handling?
-
I played around with -sNamedProfile at a very early stage last year and it worked, but I don´t know wich gs device it was. I readed also the "GS9_Color_Management.pdf" and the Remarks in "gsicc_cache.c" but did not find a device where the example files from "./toolbin/color/named_color" are working with current head. I think it is a very nice option, to remap SpotColors to other LAB values. For example giving a Color based on a Corporate Identity, a better look on a printer. Or putting together different SpotColors like "HKS 12 K" and "HKS 12 N" to the same LAB Values.


So with the black intent do you think you would want both options, the K_ONLY
and K_PLANE options?
-
I think it would make sense, if both options K_ONLY and K_PLANE would be available. K_PLANE has also the side effect, that the ink overall coverage would be lower while keeping dE low.
Comment 6 Michael Vrhel 2012-01-31 18:12:38 UTC
Thomas,

Yes there was an issue with the DeviceLink stuff.  I have fixed it.  Could you please give it a try with the head and let me know.   I will work on adding in the black preserving intents in the next couple weeks.

I will get the named color example cleaned up a bit to make it clearer what one needs to do.
Comment 7 Thomas 2012-01-31 20:02:54 UTC
Michael,

I checked the "-sDeviceLinkProfile" in the moment. It does not crash with current head. But the data runs just through the Devicelinkprofile when "-sDefaultCMYKProfile" and "-sOutputICCProfile" are different.

For example, this does no DeviceLinking:
-sDefaultCMYKProfile=myCMYK_A.icc
-sOutputICCProfile=myCMYK_A.icc
-sDeviceLinkProfile=myCMYK2CMYKLink.icc

For example, this does DeviceLinking:
-sDefaultCMYKProfile=myCMYK_A.icc
-sOutputICCProfile=myCMYK_B.icc
-sDeviceLinkProfile=myCMYK2CMYKLink.icc
Comment 8 Michael Vrhel 2012-01-31 20:37:39 UTC
Thomas,

Ah.  Good catch.  I know what the issue is with this one.  I *might* be able to get a fix for this into the 9.05 release.    

Thanks
Comment 9 Michael Vrhel 2012-01-31 23:43:03 UTC
Hi Thomas,

So I fixed the issue with the Device Link profile.  It is in the head and will be in the up coming 9.05 release.
Comment 10 Thomas 2012-02-01 17:16:50 UTC
Hi Michael,

both, proofing profile and device link profile, work with current head.

I tested several combinations today and I think, this is very hot stuff and will bring tons of new ideas around Ghostscript! So, thanks for this great work!
Comment 11 Michael Vrhel 2012-09-27 16:11:02 UTC
Black point compensation control was added with 

http://git.ghostscript.com/?p=ghostpdl.git;a=commit;h=408cbb83103ba9cf6996eeebaa02995cd9f535ad

Currently we have an on/off option for black point compensation since most CMM's offer only that approach.  However, the code was written in a way that always easy customization for additional black generation modes.   lcms2.x appears to have only one option to me.   

This above commit provides the ability to set black point compensation on/off based upon object type (graphic, image, and text)
Comment 12 Thomas 2012-09-27 16:28:40 UTC
Michael,

your Comment 11 implements "Black point compensation control".

But this enhancement was about implementing the "Black preserving Rendering Intents" "INTENT_PRESERVE_K_PLANE" and "INTENT_PRESERVE_K_ONLY" from Comment 2.

Are you sure, Comment 11 is in the right Report?
Comment 13 Michael Vrhel 2012-09-27 17:23:00 UTC
Hi Thomas,

Ah a misunderstanding.  These should be easy to add.   I will try to get that next week.