Thread: [Lcms-user] Re: Reading ICC profil
An ICC-based CMM for color management
Brought to you by:
mm2
From: <ma...@li...> - 2002-02-07 16:51:12
|
Hi, I'm taking the freedom to submit your letter to mailing list, since it seems an interesting subject. Forgive me if this is not ok to you. > I examined the source code Delphi of the project > " Chromaticity.dpr ", and I could use the functions > of reading of the ficiers of profile ICC with the DLL " lcms.dll ". > However I did not find the possibility of reading the values gamma > attached to each primary and white point. > If exist such functions in the DLL in this case can you indicate the protopypes, > if not if exist a DLL more complete can you send me it ? The overall idea behind lcms is to operate at high level. This means that lcms is hidden all complexity of profile internals to you. Also, you don't see profiles as containers of curves, chromaticities, etc but a black box holding a colorspace representation. This has evident benefits over low-level appproach. Just an example: you want to extract TRC curves from profile, but not all profiles are implemented as matrix-shaper. Profiles using 3D CLUT does not store such tables. Transfer functions are embedded into grid LUT. Otherwise, what are you trying to do is perfectly reasonable, and there IS a clean way to do this, in a form ALL profiles will work. I'm assuming you want to plot the gamma curves on a particular colorspace represented by a profile. First, you need a reference space. A good choice would be XYZ. It has gamma 1.0 and Y comes separated from chroma. So, you may create a transform between your profile -> XYZ and then feed the transform with intended r, g and b, obtaining Y and chroma component XZ. For reverse curves, all is same but the transform comes XYZ -> RGB. There are big implications of gamut here. Code would be some like: In := cmsOpenProfileFromFile('theprofile.icm','r); Out := cmsCreateXYZProfile(); cmsCreateTransform(In, TYPE_RGB_8, Out, TYPE_XYZ_16, INTENT_PERCEPTUAL, 0) ... cmsDoTransform(@YourRGB, @ObtainedEncodedXYZ, 1) cmsXYZEncoded2Float(@ObtainedEncodedXYZ, @FloatXYZ); ... Note also that examining gamma at, for example (r, 0, 0), that is, form (0, 0, 0) to (255, 0, 0) is taking curve *at gamut boundaries*, so, probably this will give false curves in all but syntetic spaces like thos of matrix-shaper profiles. The concept of 3 independent gamma curves is only a subset of possible color spaces. Hope this helps Martí Maria The little cms project http://www.littlecms.com ma...@li... ----- Original Message ----- From: Color ID To: in...@li... Sent: Thursday, February 07, 2002 12:58 PM Subject: Reading ICC profil Hello, I examined the source code Delphi of the project " Chromaticity.dpr ", and I could use the functions of reading of the ficiers of profile ICC with the DLL " lcms.dll ". However I did not find the possibility of reading the values gamma attached to each primary and white point. If exist such functions in the DLL in this case can you indicate the protopypes, if not if exist a DLL more complete can you send me it ? Thank you to inform me on this subject. Cordially __________________________ Jean-Pierre Guillemin Color i.d. BP 2216 51081 Reims Cedex tel 03 26 79 83 42 fax 03 26 79 83 43 mobile 06 08 73 34 52 e-mail jp...@co... _________________________ |