コード例 #1
0
//added by James on 1/22/96		
void sxyztolab(double *Lxy, double *lab)
{
double t;
double xyz[3];
double e, f, c, d;
double X, Y, Z;
double bot;


t = (16.0+Lxy[0])/116.0;
t = t*t*t;
xyz[1] = t;

Y = t*100;


X = Lxy[1]*Y/Lxy[2];
Z = (1-Lxy[1]-Lxy[2])*Y/Lxy[2];

xyz[0] = X/96.442;

xyz[2] = Z/82.521;

nxyztoLab(xyz,lab);
}
コード例 #2
0
McoStatus Techkon::translatetoLab(double *xyz,double *lab)
{
// convert to lab for 5000K

// normalize first
xyz[0] = 0.3585*xyz[0]/(100*0.3457);
xyz[1] = xyz[1]/(100);
xyz[2] = 0.3585*xyz[2]/(100*0.2958);

// convert to lab
nxyztoLab(xyz,lab);

if (lab[0] < 0) lab[0] = 0;
if (lab[0] > 100) lab[0] = 100;

if (lab[1] < -128) lab[1] = -128;
if (lab[1] > 128) lab[1] = 128;

if (lab[2] < -128) lab[2] = -128;
if (lab[2] > 128) lab[2] = 128;

// now apply the tweak if it exist
if (tweak != NULL) tweak->eval(lab,lab,1);
return MCO_SUCCESS;

}
コード例 #3
0
//normalized xyz to LAB in place
void nxyztoLabinplace(double *xyz, long num)
{
	double LAB[3];
	
	for(long i = 0; i < num; i++){
		nxyztoLab(xyz, LAB);
		*xyz++ = LAB[0];
		*xyz++ = LAB[1];
		*xyz++ = LAB[2];
	}
}
コード例 #4
0
//added by James on 1/22/96		
void luvtolab(double *luv, double *lab)
{
/*
t = (16+luv[0]);
t = t*t*t*0.000064;
xyz[1] = t/100;

// X
xyz[0] = (9*luv[1]*t/(4*luv[2]))/96.43;

// Z
xyz[2] = ((12-(3*luv[1])-(20*luv[2]))*t/(4*luv[2]))/82.51;

nxyztoLab(xyz,lab); */

double t;
double xyz[3];
double e, f, c, d;
double X, Y, Z;
double bot;


t = (16.0+luv[0])/116.0;
t = t*t*t;
xyz[1] = t;

Y = t*100;

c = luv[1];
d = luv[2];

bot = 12*d;
X = 27*c/bot;
Z = -(9*c - 36 + 60*d)/bot;

xyz[0] = X*Y/96.442;

xyz[2] = Z*Y/82.521;

nxyztoLab(xyz,lab);
}