18 template<
typename TPIXEL,
typename TCHANNEL>
20 double* xM,
double* yM,
unsigned cM,
21 double* xR,
double* yR,
unsigned cR,
22 double* xG,
double* yG,
unsigned cG,
23 double* xB,
double* yB,
unsigned cB,
24 double* xA,
double* yA,
unsigned cA) {
33 if (fillCurvesLUT_4ch(*retVal, xM, yM, cM, xR, yR, cR, xG, yG, cG, xB, yB, cB, xA, yA, cA)) {
41 template<
typename TPIXEL,
typename TCHANNEL>
43 double* xM,
double* yM,
unsigned cM,
44 double* xR,
double* yR,
unsigned cR,
45 double* xG,
double* yG,
unsigned cG,
46 double* xB,
double* yB,
unsigned cB,
47 double* xA,
double* yA,
unsigned cA) {
53 CubicSpline * splines[] = {NULL, NULL, NULL, NULL, NULL};
56 if (xM != NULL && yM != NULL && initiOk) {
58 if (splines[0] == NULL) {
62 if (xR != NULL && yR != NULL && initiOk) {
64 if (splines[1] == NULL) {
68 if (xG != NULL && yG != NULL && initiOk) {
70 if (splines[2] == NULL) {
74 if (xB != NULL && yB != NULL && initiOk) {
76 if (splines[3] == NULL) {
80 if (xA != NULL && yA != NULL && initiOk) {
82 if (splines[3] == NULL) {
88 for (
int i = 0; i < 3; i++) {
89 prepareChannelLUT(dst.
getValues()[i], splines[0], splines[i + 1]);
91 prepareChannelLUT(dst.
getValues()[3], splines[4]);
94 for (
int i = 0; i < 5; i++) {
95 if (splines[i] != NULL) {
102 template <
typename TPIXEL,
typename TCHANNEL>
104 if (ch == NULL) {
return 1; }
105 TCHANNEL * chEnd = ch + maxVal + 1;
116 double dx = 1 / (double) maxVal;
119 *ch = (tmp >= maxVal) ? maxVal : (tmp <= 0) ? 0 : tmp;
125 template <
typename TPIXEL,
typename TCHANNEL>
127 if (ch == NULL) {
return 1; }
128 if (sp1 == NULL) {
return prepareChannelLUT(ch, sp2); }
129 if (sp2 == NULL) {
return prepareChannelLUT(ch, sp1); }
130 TCHANNEL * chEnd = ch + maxVal + 1;
133 double dx = 1 / (double) maxVal;
136 *ch = (tmp >= maxVal) ? maxVal : (tmp <= 0) ? 0 : tmp;
143 template<
typename TPIXEL,
typename TCHANNEL>
146 double factor = (bias < 0) ? 1 + bias : 1 - bias;
147 TCHANNEL offset = (bias < 0) ? 0 : bias * maxVal + 0.5;
153 TCHANNEL * lutEnd = lut + maxVal + 1;
156 while (lut < lutEnd) {
157 *lut = factor * i + offset + 0.5;
165 lutEnd = lut + maxVal + 1;
167 while (lut < lutEnd) {
174 template<
typename TPIXEL,
typename TCHANNEL>
178 if (retVal == NULL) {
185 if (fillBrightnessLUT_4ch(*retVal, bias)) {
192 template<
typename TPIXEL,
typename TCHANNEL>
194 double factor = (bias + 1) / (1.0001 - bias);
200 TCHANNEL * lutEnd = lut + maxVal + 1;
203 while (lut < lutEnd) {
204 tmp = factor * (i - halfVal) + halfVal + 0.5;
206 *lut = (tmp >= maxVal) ? maxVal : (tmp <= 0) ? 0 : tmp;
212 lutEnd = lut + maxVal + 1;
214 while (lut < lutEnd) {
221 template<
typename TPIXEL,
typename TCHANNEL>
224 if (retVal == NULL) {
231 if (fillContrastLUT_4ch(*retVal, bias)) {
238 template<
typename TPIXEL,
typename TCHANNEL>
240 if (gamma < 0.00001) {
242 }
else if (gamma > 100) {
250 TCHANNEL * lutEnd = lut + maxVal + 1;
253 double delta = 1.0 / maxVal;
254 while (lut < lutEnd) {
255 *lut = maxVal * (pow(val, gamma)) + 0.5;
263 lutEnd = lut + maxVal + 1;
265 while (lut < lutEnd) {
272 template<
typename TPIXEL,
typename TCHANNEL>
275 if (retVal == NULL) {
282 if (fillGammaLUT_4ch(*retVal, gamma)) {