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];
nspaces++;
might_be_colon=0;
} else {
- if (!(pattern & 1UL<<31) && nruns==2 && runs[1]==runs[0]) {
+ if (nruns==2 && runs[1]==runs[0]) {
if (!nspaces) {
if (pattern==colon_pattern)
goto ok_might_be_colon;
might_be_colon=1;
goto ok_might_be_colon;
}
+ } else if (nruns==1 && runs[0]==1 && might_be_colon) {
+ goto colon_found;
}
might_be_colon=0;
ok_might_be_colon: