From: Ian Jackson Date: Sun, 5 Jul 2009 19:39:29 +0000 (+0100) Subject: cope with subpixel antialiasing (urgh) X-Git-Tag: 1.9.3 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.db-test.git;a=commitdiff_plain;h=refs%2Ftags%2F1.9.3 cope with subpixel antialiasing (urgh) --- diff --git a/pctb/structure.c b/pctb/structure.c index 967de1e..d777d57 100644 --- a/pctb/structure.c +++ b/pctb/structure.c @@ -525,39 +525,52 @@ static void find_table_entry(Rect commod, int colno, Rect *cell) { 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);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); - 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) { diff --git a/pctb/x.gdb b/pctb/x.gdb index 9c71346..0f6bf86 100644 --- a/pctb/x.gdb +++ b/pctb/x.gdb @@ -1,4 +1,4 @@ file ypp-commodities -set args --screenshot-only --test-servers --single-page -break pages.c:277 +set args -Drect 2>u --edit-charset --raw-tsv --same --screenshot-file t.ppm >raw.tsv +break mustfail2 run