CanonColourInfoBlues *blues= greens->green2[g];
if (!blues) {
blues= greens->green2[g]= mmalloc(sizeof(*blues));
- memset(blues, '?', sizeof(blues));
+ memset(blues, '?', sizeof(*blues));
}
blues->blue2[b]= cci->c;
" * YPP client is showing commodity listing screen\n"
" * YPP client window is on top (we try to raise it but your window\n"
" manager might have prevented that from succeeding)\n"
- " * Your X display is 24bpp (NB some VNC servers use 16bpp by default)\n"
"\n"
"If all of these are true, please report this as a fault.\n\n"
"Technical details:"
const RgbImage *ri= cim->rgb;
- Rgb background= ri_rgb(ri, cell->br.x, cell->br.y);
+ Rgb background;
+ unsigned char chanbg[3];
long bg_count=0, light_count=0, dark_count=0;
Point p;
+
+ background= ri_rgb(ri, cell->br.x, cell->br.y);
+ memcpy(chanbg, RI_PIXEL(ri, cell->br.x, cell->br.y), 3);
+
FOR_P_RECT(p,*cell) {
- Rgb here= ri_rgb(ri, p.x, p.y);
- if (here == background) bg_count++;
- else if (here < background) dark_count++;
- else if (here > background) light_count++;
+ const unsigned char *here_pixel= RI_PIXEL(ri, p.x, p.y);
+ int i;
+ for (i=0; i<3; i++) {
+ unsigned here= here_pixel[i];
+ if (here == chanbg[i]) bg_count++;
+ else if (here < chanbg[i]) dark_count += (chanbg[i] - here)/4 + 1;
+ else if (here > chanbg[i]) light_count += (here - chanbg[i])/4 + 1;
+ }
}
- long total_count= RECT_W(*cell) * RECT_H(*cell);
+ long total_count= RECT_W(*cell) * RECT_H(*cell) * 3;
+
MUST( bg_count > total_count / 2,
MR(*cell);MIL(total_count);MIL(bg_count);
MIL(light_count);MIL(dark_count) );
+
if (bg_count == total_count)
return;
- MUST( !!dark_count != !!light_count,
- MR(*cell);MIL(total_count);MIL(bg_count);
- MIL(light_count);MIL(dark_count) );
-
- debugf("TABLEENTRY col=%d %d,%d..%d,%d bg=%ld light=%ld dark=%ld\n",
- colno, cell->tl.x,cell->tl.y, cell->br.x,cell->br.y,
- bg_count, light_count, dark_count);
-
Rgb foreground;
double fg_extra;
- if (light_count) {
+
+ if (light_count/16 > dark_count) {
foreground= 0xffffffU;
fg_extra= +1;
- } else {
+ } else if (dark_count/16 > light_count) {
foreground= 0;
fg_extra= -1;
+ } else {
+ MUST( !"tell light from dark",
+ MR(*cell);MIL(total_count);MIL(bg_count);
+ MIL(light_count);MIL(dark_count);MRGB(background); );
}
+
+ debugf("TABLEENTRY col=%d %d,%d..%d,%d bg=%ld light=%ld dark=%ld\n",
+ colno, cell->tl.x,cell->tl.y, cell->br.x,cell->br.y,
+ bg_count, light_count, dark_count);
+
int monochrome= 1;
FOR_P_RECT(p,*cell) {
return sunshiner;
}
-void find_islandname(RgbImage *ri) {
+void find_islandname(void) {
find_structure(page_images[0], 0);
+ RgbImage *ri= alloc_rgb_image(page_images[0]->rgb->w,
+ page_images[0]->rgb->h);
+ memcpy(ri->data, page_images[0]->rgb->data, ri->w * ri->h * 3);
+
Rect sunshiner= find_sunshine_widget();
char sunshine[MAXIMGIDENT], archisland[MAXIMGIDENT];
for (p.y=islandnamer.tl.y; p.y<=islandnamer.br.y; p.y++) {
pattern <<= 1;
- switch (get_p(p)) {
- case '*': if (runs[nruns]) { nruns++; runs[nruns]=0; } break;
- case 'O': runs[nruns]++; pattern |= 1u; break;
- default: pattern |= 1UL<<31; break;
+ double alpha= find_aa_density(ri,p, 0xCCCCAA,0x002255,0);
+ if (alpha >= 0.49) {
+ runs[nruns]++;
+ pattern |= 1u;
+ } else {
+ if (runs[nruns]) {
+ nruns++;
+ runs[nruns]=0;
+ }
}
}