char *dchan, *schan, *mchan;
int dbpp, sbpp, mbpp;
-int drawdebug=0;
int seed;
int niters = 100;
int dbpp; /* bits per pixel in destination */
uchar *maskbits;
ulong *savedstbits;
-void
-rdb(void)
-{
-}
-
-int
-iprint(char *fmt, ...)
-{
- int n;
- va_list va;
- char buf[1024];
-
- va_start(va, fmt);
- n = vseprint(buf, buf+sizeof buf, fmt, va) - buf;
- va_end(va);
-
- write(1,buf,n);
- return 1;
-}
-
void
main(int argc, char *argv[])
{
pixtorgba(getpixel(dst, dp), &dr, &dg, &db, &da);
pixtorgba(getpixel(src, sp), &sr, &sg, &sb, &sa);
m = getmask(mask, mp);
- M = 255-(sa*m)/255;
+ M = 255-(sa*m + 127)/255;
DBG print("dst %x %x %x %x src %x %x %x %x m %x = ", dr,dg,db,da, sr,sg,sb,sa, m);
if(dst->flags&Fgrey){
*/
sk = RGB2K(sr, sg, sb);
dk = RGB2K(dr, dg, db);
- dk = (sk*m + dk*M)/255;
+ dk = (sk*m + dk*M + 127)/255;
dr = dg = db = dk;
- da = (sa*m + da*M)/255;
+ da = (sa*m + da*M + 127)/255;
}else{
/*
* True color alpha calculation treats all channels (including alpha)
* the same. It might have been nice to use an array, but oh well.
*/
- dr = (sr*m + dr*M)/255;
- dg = (sg*m + dg*M)/255;
- db = (sb*m + db*M)/255;
- da = (sa*m + da*M)/255;
+ dr = (sr*m + dr*M + 127)/255;
+ dg = (sg*m + dg*M + 127)/255;
+ db = (sb*m + db*M + 127)/255;
+ da = (sa*m + da*M + 127)/255;
}
DBG print("%x %x %x %x\n", dr,dg,db,da);