chiark
/
gitweb
/
~yarrgweb
/
ypp-sc-tools.db-test.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Version protocol better error message
[ypp-sc-tools.db-test.git]
/
pctb
/
structure.c
diff --git
a/pctb/structure.c
b/pctb/structure.c
index 2bb6429602fdc790f6fb76a87c5a23e47c06f638..200b86ea43c28b5e3a0bd58a5f299be8ed2be941 100644
(file)
--- a/
pctb/structure.c
+++ b/
pctb/structure.c
@@
-484,7
+484,15
@@
static void find_table_entry(Rect commod, int colno, Rect *cell) {
colno, cell->tl.x,cell->tl.y, cell->br.x,cell->br.y,
bg_count, light_count, dark_count);
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) {
int monochrome= 1;
FOR_P_RECT(p,*cell) {
@@
-496,8
+504,8
@@
static void find_table_entry(Rect commod, int colno, Rect *cell) {
unsigned char bg_chan= background >> (i*8);
unsigned char fg_chan= foreground >> (i*8);
double alpha_chan=
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);
}
alpha[i]= alpha_chan;
alpha_mean += alpha_chan * (1/3.0);
}
@@
-510,10
+518,11
@@
static void find_table_entry(Rect commod, int colno, Rect *cell) {
MI(i);MRGB(here);MRGB(background);MRGB(foreground);
MF(alpha_min);MF(alpha[i]);MF(alpha_max) );
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);
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;
}
if (!(here_int==0 || here_int==AAMAXVAL)) monochrome=0;
cim->d[p.y * cim->w + p.x]= '0' + here_int;
}