colno, cell->tl.x,cell->tl.y, cell->br.x,cell->br.y,
bg_count, light_count, dark_count);
- Rgb foreground= light_count ? 0xffffffU : 0;
+ Rgb foreground;
+ double fg_extra;
+ if (light_count) {
+ foreground= 0xffffffU;
+ fg_extra= +1;
+ } else {
+ foreground= 0;
+ fg_extra= -1;
+ }
int monochrome= 1;
FOR_P_RECT(p,*cell) {
unsigned char bg_chan= background >> (i*8);
unsigned char fg_chan= foreground >> (i*8);
double alpha_chan=
- ((double)here_chan - (double)bg_chan) /
- ((double)fg_chan - (double)bg_chan);
+ ((double)here_chan - (double)bg_chan) /
+ ((fg_chan + fg_extra) - (double)bg_chan);
alpha[i]= alpha_chan;
alpha_mean += alpha_chan * (1/3.0);
}
- double thresh= 1.0/AAMAXVAL;
+ double thresh= 1.5/AAMAXVAL;
double alpha_min= alpha_mean - thresh;
double alpha_max= alpha_mean + thresh;
for (i=0; i<3; i++)
MI(i);MRGB(here);MRGB(background);MRGB(foreground);
MF(alpha_min);MF(alpha[i]);MF(alpha_max) );
- MUST( 0 <= alpha_mean && alpha_mean <= 1,
+ MUST( 0 <= alpha_mean && alpha_mean < 0.999,
MRGB(here);MRGB(background);MRGB(foreground);
- MF(alpha_mean) );
- int here_int= AAMAXVAL*alpha_mean;
+ MF(alpha_mean); MF(alpha[0]);MF(alpha[1]);MF(alpha[2]); );
+ int here_int= floor((AAMAXVAL+1)*alpha_mean);
+ assert(here_int <= AAMAXVAL);
if (!(here_int==0 || here_int==AAMAXVAL)) monochrome=0;
cim->d[p.y * cim->w + p.x]= '0' + here_int;
}