Hi, That's just math. If you have anything coming in 16 bits, the range is 0..0xffff, then we want to convert to the range 0..1.0, so we have to multiply by the new range and then divide by the old range
1.0 x * -------- 65535 Since lcms uses fixed point to encode values, 1.0 is represented as 0x10000, which is 65536, and the factor comes: 65536 x * ----- 65535 This can be optimized as (x + x7fff) / xffff Whithout this ajust, results are not accurate. Regards Marti Original Message: ----------------- From: Will Cook w7c...@gmail.com Date: Mon, 20 Dec 2010 07:33:32 -0600 To: lcms-user@lists.sourceforge.net Subject: [Lcms-user] cmsToFixedDomain I've been using LCMS for a while now. I think its great! I have a question: Why does it call "_cmsToFixedDomain" at every stage in the BToA pipeline? To my thinking, this messes up the values, because the results of one transform are modified slightly before they go through the next translation. This makes it difficult, if not impossible, to align the interpolations in even boundaries, so that creating accurate profiles is very difficult. Here is what I see as the typical Curve/LUT/Curve translation, using the BtoA table as an example, with LAB PCS. 1. start with lab [0..100 -128..0..127 -128.0.127 ] 2. convert lab to uint16 encoding [L* a* b*]: [ 0..65280 0..32768..65280 0..32768..65280 ] [ 0..xFF00 0..x8000..xFF00 0..x8000..xFF00 ] 3. first curve: 3a. convert to "fixed domain" a -> a + ((a + x7fff) / xffff); 3b. look up in table to get N 4. LUT 4a. convert N to fixed domain N -> N + ((N + x7fff) / xffff); 4b. look up in LUT to get M 5. second curve 5a. convert M to fixed domain M -> M + ((M + x7fff) / xffff); 5b. look up in table to get Result The fact that (X + x7fff) / xffff gets added in at each stage is very annoying.. is there a good way to think about this that makes sense? Note that the ICC spec says this: "If the input is the XYZ PCS, 1+(32767/32768) shall be mapped to the value 1,0. If the output is the XYZ PCS, the value 1,0 shall be mapped to 1+(32767/32768)." But this only happens when using XYZ. Whe does LCMS do it with Lab? Will ---------------------------------------------------------------------------- -- Learn how Oracle Real Application Clusters (RAC) One Node allows customers to consolidate database storage, standardize their database environment, and, should the need arise, upgrade to a full multi-node Oracle RAC database without downtime or disruption http://p.sf.net/sfu/oracle-sfdevnl _______________________________________________ Lcms-user mailing list Lcms-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lcms-user -------------------------------------------------------------------- mail2web.com – Enhanced email for the mobile individual based on Microsoft® Exchange - http://link.mail2web.com/Personal/EnhancedEmail ------------------------------------------------------------------------------ Learn how Oracle Real Application Clusters (RAC) One Node allows customers to consolidate database storage, standardize their database environment, and, should the need arise, upgrade to a full multi-node Oracle RAC database without downtime or disruption http://p.sf.net/sfu/oracle-sfdevnl _______________________________________________ Lcms-user mailing list Lcms-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lcms-user