%ffp ctl(0):"L",val=28,size=(*,6),pos=(225,32),fontcolor=black,Range=(-100,100),val=0 ctl(1):"a",val=201,size=(*,6),pos=(225,42),fontcolor=black,Range=(-255,255),val=0 ctl(2):"b",val=0,size=(*,6),pos=(225,52),fontcolor=black,Range=(-255,255),val=0 ForEveryTile:{ double rVal, gVal, bVal; double xVal, yVal, zVal; double lVal, aVal; double fX, fY, fZ; for (y= y_start; y < y_end; y++){ if(updateProgress(y,y_end)) abort(); for (x = x_start; x < x_end; x++){ rVal = (double) src(x, y, 0); gVal = (double) src(x, y, 1); bVal = (double) src(x, y, 2); xVal = 0.412453 * rVal + 0.357580 * gVal + 0.180423 * bVal; yVal = 0.212671 * rVal + 0.715160 * gVal + 0.072169 * bVal; zVal = 0.019334 * rVal + 0.119193 * gVal + 0.950227 * bVal; xVal /= (255.0 * 0.950456); yVal /= 255.0; zVal /= (255.0 * 1.088754); if (yVal > 0.008856){ fY = pow(yVal, 1.0 / 3.0); lVal = 116.0 * fY - 16.0; } else { fY = 7.787 * yVal + 16.0 / 116.0; lVal = 903.3 * yVal; } if (xVal > 0.008856) fX = pow(xVal, 1.0 / 3.0); else fX = 7.787 * xVal + 16.0 / 116.0; if (zVal > 0.008856) fZ = pow(zVal, 1.0 / 3.0); else fZ = 7.787 * zVal + 16.0 / 116.0; aVal = 500.0 * (fX - fY)+128.0; bVal = 200.0 * (fY - fZ)+128.0; //Do the Lab adjustment lVal=lVal+ctl(0); aVal=aVal+ctl(1)-128; bVal=bVal+ctl(2)-128; //pset( x, y, 0, (int)(lVal+0.5)); //pset( x, y, 1, (int)(aVal+0.5)); //pset( x, y, 2, (int)(bVal+0.5)); fY = pow((lVal + 16.0) / 116.0, 3.0); if (fY < 0.008856) fY = lVal / 903.3; yVal = fY; if (fY > 0.008856) fY = pow(fY, 1.0 / 3.0); else fY = 7.787 * fY + 16.0 / 116.0; fX = aVal / 500.0 + fY; if (fX > 0.206893) xVal = pow(fX, 3.0); else xVal = (fX - 16.0 / 116.0) / 7.787; fZ = fY - bVal /200.0; if (fZ > 0.206893) zVal = pow(fZ, 3.0); else zVal = (fZ - 16.0 / 116.0) / 7.787; xVal *= (0.950456 * 255.0); yVal *= 255.0; zVal *= (1.088754 * 255.0); rVal = xVal * 3.240479 - yVal * 1.537150 - zVal * 0.498535; gVal = xVal * -0.969256 + yVal * 1.875992 + zVal * 0.041556; bVal = xVal * 0.055648 - yVal * 0.204043 + zVal * 1.057311; //Apply the RGB color values to the image pset( x, y, 0, (int)(rVal+0.5)); pset( x, y, 1, (int)(gVal+0.5)); pset( x, y, 2, (int)(bVal+0.5)); }} return true; }