static Lab toLab(CIE *c) { CIE n = (CIE) {Labf(c->X / white.X), Labf(c->Y / white.Y), Labf(c->Z / white.Z)}; Lab l; // http://en.wikipedia.org/wiki/L*a*b*#RGB_and_CMYK_conversions l.L = 116.0 * n.Y - 16; l.a = 500.0 * (n.X - n.Y); l.b = 200.0 * (n.Y - n.Z); return l; }
BOOL MyColorSpace::Xyz2Lab(FLOAT x, FLOAT y, FLOAT z, FLOAT& l, FLOAT& a, FLOAT& b) //CIE XYZitu(D65) to CIE Lab, 根据David Bourgin, Color space FAQ { FLOAT y_yn = y / Yn; if (y_yn>0.008856) { l = (FLOAT) ( 116. * pow(y_yn, 1.f/3.f) ); }else { l = (FLOAT) ( 903.3 * y_yn ); } a = 500 * ( Labf(x/Xn, y_yn) - Labf(y/Yn, y_yn) ); b = 200 * ( Labf(y/Yn, y_yn) - Labf(z/Zn, y_yn) ); return TRUE; }