summaryrefslogtreecommitdiff
path: root/src/cmspcs.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmspcs.c')
-rw-r--r--src/cmspcs.c190
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;