460 |
|
float *cumf; |
461 |
|
int brt0, histlen; |
462 |
|
HIST_TYP threshold, ceiling, trimmings, histot; |
463 |
< |
double logLddyn, Ldmin, Ldavg, Lwavg, Tr, Lw, Ld; |
463 |
> |
double logLddyn, Ldmin, Lwavg, Tr, Lw, Ld; |
464 |
|
double sum; |
465 |
|
double d; |
466 |
|
int i, j; |
474 |
|
/* compute handy values */ |
475 |
|
Ldmin = Ldmax/Lddyn; |
476 |
|
logLddyn = log(Lddyn); |
477 |
– |
Ldavg = sqrt(Ldmax*Ldmin); |
477 |
|
i = HISTI(tms->hbrmin); |
478 |
|
brt0 = HISTV(i); |
479 |
|
histlen = HISTI(tms->hbrmax) + 1 - i; |
547 |
|
returnOK; |
548 |
|
linearmap: /* linear tone-mapping */ |
549 |
|
if (tms->flags & TM_F_HCONTR) |
550 |
< |
d = htcontrs(Ldavg) / htcontrs(Lwavg); |
550 |
> |
d = htcontrs(sqrt(Ldmax*Ldmin)) / htcontrs(Lwavg); |
551 |
|
else |
552 |
< |
d = Ldavg / Lwavg; |
552 |
> |
d = Ldmax / tmLuminance(tms->hbrmax); |
553 |
|
return(tmFixedMapping(tms, tms->inpsf*d/Ldmax, gamval)); |
554 |
|
} |
555 |
|
|
580 |
|
lv = tms->mbrmax; |
581 |
|
li = tms->lumap[lv - tms->mbrmin]; |
582 |
|
} |
583 |
< |
if (cs == TM_NOCHROM) |
584 |
< |
*ps++ = li>=TM_BRES ? 255 : (int)(256*li/TM_BRES); |
585 |
< |
else { |
583 |
> |
if (cs == TM_NOCHROM) { |
584 |
> |
#if !(TM_BRES & 0xff) |
585 |
> |
*ps++ = li>=TM_BRES ? 255 : li/(TM_BRES>>8); |
586 |
> |
#else |
587 |
> |
*ps++ = li>=TM_BRES ? 255 : (li<<8)/TM_BRES; |
588 |
> |
#endif |
589 |
> |
} else { |
590 |
|
pv = *cs++ * li / tms->cdiv[RED]; |
591 |
|
*ps++ = pv>255 ? 255 : pv; |
592 |
|
pv = *cs++ * li / tms->cdiv[GRN]; |