diff options
author | Marti Maria <info@littlecms.com> | 2012-07-02 17:58:16 +0200 |
---|---|---|
committer | Marti Maria <info@littlecms.com> | 2012-07-02 17:58:16 +0200 |
commit | dfd9a95708640ad1033e2ae3422e8412728d8223 (patch) | |
tree | e781584b89db636af293991d4148296415da3141 /src/cmspcs.c | |
parent | 88af283a5fe8051c7a6ae5328a80b15cb78cda41 (diff) | |
download | lcms2-dfd9a95708640ad1033e2ae3422e8412728d8223.tar.gz |
Trimmed files
Diffstat (limited to 'src/cmspcs.c')
-rw-r--r-- | src/cmspcs.c | 190 |
1 files changed, 95 insertions, 95 deletions
diff --git a/src/cmspcs.c b/src/cmspcs.c index 4aa7868..3279d71 100644 --- a/src/cmspcs.c +++ b/src/cmspcs.c @@ -3,22 +3,22 @@ // Little Color Management System // Copyright (c) 1998-2010 Marti Maria Saguer // -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the "Software"), -// to deal in the Software without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the Software +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // -// The above copyright notice and this permission notice shall be included in +// The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO -// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- @@ -114,7 +114,7 @@ cmsFloat64Number f(cmsFloat64Number t) if (t <= Limit) return (841.0/108.0) * t + (16.0/116.0); else - return pow(t, 1.0/3.0); + return pow(t, 1.0/3.0); } static @@ -135,7 +135,7 @@ void CMSEXPORT cmsXYZ2Lab(const cmsCIEXYZ* WhitePoint, cmsCIELab* Lab, const cms { cmsFloat64Number fx, fy, fz; - if (WhitePoint == NULL) + if (WhitePoint == NULL) WhitePoint = cmsD50_XYZ(); fx = f(xyz->X / WhitePoint->X); @@ -153,7 +153,7 @@ void CMSEXPORT cmsLab2XYZ(const cmsCIEXYZ* WhitePoint, cmsCIEXYZ* xyz, const cm { cmsFloat64Number x, y, z; - if (WhitePoint == NULL) + if (WhitePoint == NULL) WhitePoint = cmsD50_XYZ(); y = (Lab-> L + 16.0) / 116.0; @@ -175,7 +175,7 @@ cmsFloat64Number L2float2(cmsUInt16Number v) // the a/b part static cmsFloat64Number ab2float2(cmsUInt16Number v) -{ +{ return ((cmsFloat64Number) v / 256.0) - 128.0; } @@ -249,7 +249,7 @@ void CMSEXPORT cmsFloat2LabEncodedV2(cmsUInt16Number wLab[3], const cmsCIELab* f Lab.L = Clamp_L_doubleV2(fLab ->L); Lab.a = Clamp_ab_doubleV2(fLab ->a); Lab.b = Clamp_ab_doubleV2(fLab ->b); - + wLab[0] = L2Fix2(Lab.L); wLab[1] = ab2Fix2(Lab.a); wLab[2] = ab2Fix2(Lab.b); @@ -274,7 +274,7 @@ cmsFloat64Number Clamp_ab_doubleV4(cmsFloat64Number ab) return ab; } -static +static cmsUInt16Number L2Fix4(cmsFloat64Number L) { return _cmsQuickSaturateWord(L * 655.35); @@ -289,11 +289,11 @@ cmsUInt16Number ab2Fix4(cmsFloat64Number ab) void CMSEXPORT cmsFloat2LabEncoded(cmsUInt16Number wLab[3], const cmsCIELab* fLab) { cmsCIELab Lab; - + Lab.L = Clamp_L_doubleV4(fLab ->L); Lab.a = Clamp_ab_doubleV4(fLab ->a); Lab.b = Clamp_ab_doubleV4(fLab ->b); - + wLab[0] = L2Fix4(Lab.L); wLab[1] = ab2Fix4(Lab.a); wLab[2] = ab2Fix4(Lab.b); @@ -317,15 +317,15 @@ cmsFloat64Number atan2deg(cmsFloat64Number a, cmsFloat64Number b) h = 0; else h = atan2(a, b); - + h *= (180. / M_PI); - - while (h > 360.) + + while (h > 360.) h -= 360.; - + while ( h < 0) h += 360.; - + return h; } @@ -334,7 +334,7 @@ cmsFloat64Number atan2deg(cmsFloat64Number a, cmsFloat64Number b) static cmsFloat64Number Sqr(cmsFloat64Number v) { - return v * v; + return v * v; } // From cylindrical coordinates. No check is performed, then negative values are allowed void CMSEXPORT cmsLab2LCh(cmsCIELCh* LCh, const cmsCIELab* Lab) @@ -352,13 +352,13 @@ void CMSEXPORT cmsLCh2Lab(cmsCIELab* Lab, const cmsCIELCh* LCh) Lab -> L = LCh -> L; Lab -> a = LCh -> C * cos(h); - Lab -> b = LCh -> C * sin(h); + Lab -> b = LCh -> C * sin(h); } // In XYZ All 3 components are encoded using 1.15 fixed point static cmsUInt16Number XYZ2Fix(cmsFloat64Number d) -{ +{ return _cmsQuickSaturateWord(d * 32768.0); } @@ -370,7 +370,7 @@ void CMSEXPORT cmsFloat2XYZEncoded(cmsUInt16Number XYZ[3], const cmsCIEXYZ* fXYZ xyz.Y = fXYZ -> Y; xyz.Z = fXYZ -> Z; - // Clamp to encodeable values. + // Clamp to encodeable values. if (xyz.Y <= 0) { xyz.X = 0; @@ -378,19 +378,19 @@ void CMSEXPORT cmsFloat2XYZEncoded(cmsUInt16Number XYZ[3], const cmsCIEXYZ* fXYZ xyz.Z = 0; } - if (xyz.X > MAX_ENCODEABLE_XYZ) + if (xyz.X > MAX_ENCODEABLE_XYZ) xyz.X = MAX_ENCODEABLE_XYZ; if (xyz.X < 0) xyz.X = 0; - if (xyz.Y > MAX_ENCODEABLE_XYZ) + if (xyz.Y > MAX_ENCODEABLE_XYZ) xyz.Y = MAX_ENCODEABLE_XYZ; if (xyz.Y < 0) xyz.Y = 0; - if (xyz.Z > MAX_ENCODEABLE_XYZ) + if (xyz.Z > MAX_ENCODEABLE_XYZ) xyz.Z = MAX_ENCODEABLE_XYZ; if (xyz.Z < 0) @@ -399,7 +399,7 @@ void CMSEXPORT cmsFloat2XYZEncoded(cmsUInt16Number XYZ[3], const cmsCIEXYZ* fXYZ XYZ[0] = XYZ2Fix(xyz.X); XYZ[1] = XYZ2Fix(xyz.Y); - XYZ[2] = XYZ2Fix(xyz.Z); + XYZ[2] = XYZ2Fix(xyz.Z); } @@ -422,7 +422,7 @@ void CMSEXPORT cmsXYZEncoded2Float(cmsCIEXYZ* fXYZ, const cmsUInt16Number XYZ[3] fXYZ -> X = XYZ2float(XYZ[0]); fXYZ -> Y = XYZ2float(XYZ[1]); fXYZ -> Z = XYZ2float(XYZ[2]); -} +} // Returns dE on two Lab values @@ -438,7 +438,7 @@ cmsFloat64Number CMSEXPORT cmsDeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab } -// Return the CIE94 Delta E +// Return the CIE94 Delta E cmsFloat64Number CMSEXPORT cmsCIE94DeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2) { cmsCIELCh LCh1, LCh2; @@ -452,7 +452,7 @@ cmsFloat64Number CMSEXPORT cmsCIE94DeltaE(const cmsCIELab* Lab1, const cmsCIELab dC = fabs(LCh1.C - LCh2.C); dE = cmsDeltaE(Lab1, Lab2); - + dhsq = Sqr(dE) - Sqr(dL) - Sqr(dC); if (dhsq < 0) dh = 0; @@ -463,7 +463,7 @@ cmsFloat64Number CMSEXPORT cmsCIE94DeltaE(const cmsCIELab* Lab1, const cmsCIELab sc = 1.0 + (0.048 * c12); sh = 1.0 + (0.014 * c12); - + return sqrt(Sqr(dL) + Sqr(dC) / Sqr(sc) + Sqr(dh) / Sqr(sh)); } @@ -513,7 +513,7 @@ cmsFloat64Number CMSEXPORT cmsBFDdeltaE(const cmsCIELab* Lab1, const cmsCIELab* dc = 0.035 * AveC / (1 + 0.00365 * AveC)+0.521; g = sqrt(Sqr(Sqr(AveC))/(Sqr(Sqr(AveC))+14000)); - t = 0.627+(0.055*cos((Aveh-254)/(180/M_PI))- + t = 0.627+(0.055*cos((Aveh-254)/(180/M_PI))- 0.040*cos((2*Aveh-136)/(180/M_PI))+ 0.070*cos((3*Aveh-31)/(180/M_PI))+ 0.049*cos((4*Aveh+114)/(180/M_PI))- @@ -546,27 +546,27 @@ cmsFloat64Number CMSEXPORT cmsCMCdeltaE(const cmsCIELab* Lab1, const cmsCIELab* cmsLab2LCh(&LCh1, Lab1); cmsLab2LCh(&LCh2, Lab2); - + dL = Lab2->L-Lab1->L; dC = LCh2.C-LCh1.C; dE = cmsDeltaE(Lab1, Lab2); - if (Sqr(dE)>(Sqr(dL)+Sqr(dC))) + if (Sqr(dE)>(Sqr(dL)+Sqr(dC))) dh = sqrt(Sqr(dE)-Sqr(dL)-Sqr(dC)); else dh =0; - if ((LCh1.h > 164) && (LCh1.h < 345)) + if ((LCh1.h > 164) && (LCh1.h < 345)) t = 0.56 + fabs(0.2 * cos(((LCh1.h + 168)/(180/M_PI)))); - else + else t = 0.36 + fabs(0.4 * cos(((LCh1.h + 35 )/(180/M_PI)))); sc = 0.0638 * LCh1.C / (1 + 0.0131 * LCh1.C) + 0.638; sl = 0.040975 * Lab1->L /(1 + 0.01765 * Lab1->L); - + if (Lab1->L<16) - sl = 0.511; + sl = 0.511; f = sqrt((LCh1.C * LCh1.C * LCh1.C * LCh1.C)/((LCh1.C * LCh1.C * LCh1.C * LCh1.C)+1900)); sh = sc*(t*f+1-f); @@ -575,7 +575,7 @@ cmsFloat64Number CMSEXPORT cmsCMCdeltaE(const cmsCIELab* Lab1, const cmsCIELab* return cmc; } -// dE2000 The weightings KL, KC and KH can be modified to reflect the relative +// dE2000 The weightings KL, KC and KH can be modified to reflect the relative // importance of lightness, chroma and hue in different industrial applications cmsFloat64Number CMSEXPORT cmsCIE2000DeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2, cmsFloat64Number Kl, cmsFloat64Number Kc, cmsFloat64Number Kh) @@ -595,25 +595,25 @@ cmsFloat64Number CMSEXPORT cmsCIE2000DeltaE(const cmsCIELab* Lab1, const cmsCIEL cmsFloat64Number a_p = (1 + G ) * a1; cmsFloat64Number b_p = b1; cmsFloat64Number C_p = sqrt( Sqr(a_p) + Sqr(b_p)); - cmsFloat64Number h_p = atan2deg(b_p, a_p); - + cmsFloat64Number h_p = atan2deg(b_p, a_p); + cmsFloat64Number a_ps = (1 + G) * as; cmsFloat64Number b_ps = bs; cmsFloat64Number C_ps = sqrt(Sqr(a_ps) + Sqr(b_ps)); cmsFloat64Number h_ps = atan2deg(b_ps, a_ps); - + cmsFloat64Number meanC_p =(C_p + C_ps) / 2; cmsFloat64Number hps_plus_hp = h_ps + h_p; cmsFloat64Number hps_minus_hp = h_ps - h_p; - cmsFloat64Number meanh_p = fabs(hps_minus_hp) <= 180.000001 ? (hps_plus_hp)/2 : - (hps_plus_hp) < 360 ? (hps_plus_hp + 360)/2 : + cmsFloat64Number meanh_p = fabs(hps_minus_hp) <= 180.000001 ? (hps_plus_hp)/2 : + (hps_plus_hp) < 360 ? (hps_plus_hp + 360)/2 : (hps_plus_hp - 360)/2; cmsFloat64Number delta_h = (hps_minus_hp) <= -180.000001 ? (hps_minus_hp + 360) : - (hps_minus_hp) > 180 ? (hps_minus_hp - 360) : + (hps_minus_hp) > 180 ? (hps_minus_hp - 360) : (hps_minus_hp); cmsFloat64Number delta_L = (Ls - L1); cmsFloat64Number delta_C = (C_ps - C_p ); @@ -621,9 +621,9 @@ cmsFloat64Number CMSEXPORT cmsCIE2000DeltaE(const cmsCIELab* Lab1, const cmsCIEL cmsFloat64Number delta_H =2 * sqrt(C_ps*C_p) * sin(RADIANS(delta_h) / 2); - cmsFloat64Number T = 1 - 0.17 * cos(RADIANS(meanh_p-30)) - + 0.24 * cos(RADIANS(2*meanh_p)) - + 0.32 * cos(RADIANS(3*meanh_p + 6)) + cmsFloat64Number T = 1 - 0.17 * cos(RADIANS(meanh_p-30)) + + 0.24 * cos(RADIANS(2*meanh_p)) + + 0.32 * cos(RADIANS(3*meanh_p + 6)) - 0.2 * cos(RADIANS(4*meanh_p - 63)); cmsFloat64Number Sl = 1 + (0.015 * Sqr((Ls + L1) /2- 50) )/ sqrt(20 + Sqr( (Ls+L1)/2 - 50) ); @@ -637,9 +637,9 @@ cmsFloat64Number CMSEXPORT cmsCIE2000DeltaE(const cmsCIELab* Lab1, const cmsCIEL cmsFloat64Number Rt = -sin(2 * RADIANS(delta_ro)) * Rc; - cmsFloat64Number deltaE00 = sqrt( Sqr(delta_L /(Sl * Kl)) + - Sqr(delta_C/(Sc * Kc)) + - Sqr(delta_H/(Sh * Kh)) + + cmsFloat64Number deltaE00 = sqrt( Sqr(delta_L /(Sl * Kl)) + + Sqr(delta_C/(Sc * Kc)) + + Sqr(delta_H/(Sh * Kh)) + Rt*(delta_C/(Sc * Kc)) * (delta_H / (Sh * Kh))); return deltaE00; @@ -662,41 +662,41 @@ int _cmsReasonableGridpointsByColorspace(cmsColorSpaceSignature Colorspace, cmsU // HighResPrecalc is maximum resolution if (dwFlags & cmsFLAGS_HIGHRESPRECALC) { - if (nChannels > 4) + if (nChannels > 4) return 7; // 7 for Hifi if (nChannels == 4) // 23 for CMYK return 23; - - return 49; // 49 for RGB and others + + return 49; // 49 for RGB and others } // LowResPrecal is lower resolution if (dwFlags & cmsFLAGS_LOWRESPRECALC) { - - if (nChannels > 4) + + if (nChannels > 4) return 6; // 6 for more than 4 channels - if (nChannels == 1) + if (nChannels == 1) return 33; // For monochrome return 17; // 17 for remaining } // Default values - if (nChannels > 4) + if (nChannels > 4) return 7; // 7 for Hifi if (nChannels == 4) return 17; // 17 for CMYK - return 33; // 33 for RGB + return 33; // 33 for RGB } -cmsBool _cmsEndPointsBySpace(cmsColorSpaceSignature Space, - cmsUInt16Number **White, +cmsBool _cmsEndPointsBySpace(cmsColorSpaceSignature Space, + cmsUInt16Number **White, cmsUInt16Number **Black, cmsUInt32Number *nOutputs) { @@ -719,7 +719,7 @@ cmsBool _cmsEndPointsBySpace(cmsColorSpaceSignature Space, if (Black) *Black = Grayblack; if (nOutputs) *nOutputs = 1; return TRUE; - + case cmsSigRgbData: if (White) *White = RGBwhite; if (Black) *Black = RGBblack; if (nOutputs) *nOutputs = 3; @@ -746,7 +746,7 @@ cmsBool _cmsEndPointsBySpace(cmsColorSpaceSignature Space, return FALSE; } - + // Several utilities ------------------------------------------------------- @@ -799,9 +799,9 @@ cmsColorSpaceSignature CMSEXPORT _cmsICCcolorSpace(int OurNotation) int CMSEXPORT _cmsLCMScolorSpace(cmsColorSpaceSignature ProfileSpace) -{ +{ switch (ProfileSpace) { - + case cmsSigGrayData: return PT_GRAY; case cmsSigRgbData: return PT_RGB; case cmsSigCmyData: return PT_CMY; @@ -814,52 +814,52 @@ int CMSEXPORT _cmsLCMScolorSpace(cmsColorSpaceSignature ProfileSpace) case cmsSigHsvData: return PT_HSV; case cmsSigHlsData: return PT_HLS; case cmsSigYxyData: return PT_Yxy; - + case cmsSig1colorData: case cmsSigMCH1Data: return PT_MCH1; - + case cmsSig2colorData: case cmsSigMCH2Data: return PT_MCH2; - + case cmsSig3colorData: case cmsSigMCH3Data: return PT_MCH3; - + case cmsSig4colorData: case cmsSigMCH4Data: return PT_MCH4; - + case cmsSig5colorData: case cmsSigMCH5Data: return PT_MCH5; - + case cmsSig6colorData: case cmsSigMCH6Data: return PT_MCH6; - + case cmsSigMCH7Data: case cmsSig7colorData:return PT_MCH7; - + case cmsSigMCH8Data: case cmsSig8colorData:return PT_MCH8; - + case cmsSigMCH9Data: case cmsSig9colorData:return PT_MCH9; - + case cmsSigMCHAData: case cmsSig10colorData:return PT_MCH10; - + case cmsSigMCHBData: case cmsSig11colorData:return PT_MCH11; - + case cmsSigMCHCData: case cmsSig12colorData:return PT_MCH12; - + case cmsSigMCHDData: case cmsSig13colorData:return PT_MCH13; - + case cmsSigMCHEData: case cmsSig14colorData:return PT_MCH14; - + case cmsSigMCHFData: case cmsSig15colorData:return PT_MCH15; - + default: return (cmsColorSpaceSignature) (-1); } } @@ -873,28 +873,28 @@ cmsUInt32Number CMSEXPORT cmsChannelsOf(cmsColorSpaceSignature ColorSpace) case cmsSigGrayData: return 1; case cmsSig2colorData: return 2; - + case cmsSigXYZData: case cmsSigLabData: case cmsSigLuvData: case cmsSigYCbCrData: case cmsSigYxyData: - case cmsSigRgbData: + case cmsSigRgbData: case cmsSigHsvData: case cmsSigHlsData: - case cmsSigCmyData: + case cmsSigCmyData: case cmsSig3colorData: return 3; - + case cmsSigLuvKData: case cmsSigCmykData: case cmsSig4colorData: return 4; case cmsSigMCH5Data: - case cmsSig5colorData: return 5; + case cmsSig5colorData: return 5; - case cmsSigMCH6Data: + case cmsSigMCH6Data: case cmsSig6colorData: return 6; - + case cmsSigMCH7Data: case cmsSig7colorData: return 7; @@ -909,7 +909,7 @@ cmsUInt32Number CMSEXPORT cmsChannelsOf(cmsColorSpaceSignature ColorSpace) case cmsSigMCHBData: case cmsSig11colorData: return 11; - + case cmsSigMCHCData: case cmsSig12colorData: return 12; |