ken@turtleva.UUCP (Ken Turkowski) (12/16/83)
echo x - hsalgs/bbackfill.c cat >hsalgs/bbackfill.c <<'!Funky!Stuff!' /* bbackfill.c - fill in partially covered pixels with background */ main(argc,argv) int argc; char **argv; { short j,i,Xres,Xofset,Yres,Yofset; double atof(),redb,grnb,blub; bbopen(); /* get Big Buffer */ Xres = 640; Xofset = 0; Yres = 484; Yofset = 0; if (argc < 2) redb = grnb = blub = 0; else if ((argc == 4) || (argc == 8)) { redb = atof(argv[1]); grnb = atof(argv[2]); blub = atof(argv[3]); if ((redb <= 1.) && (grnb <= 1.) && (blub <= 1.)) { redb *= 255; grnb *= 255; blub *= 255; } if (redb > 255) redb = 255; if (redb < 0) redb = 0; if (grnb > 255) grnb = 255; if (grnb < 0) grnb = 0; if (blub > 255) blub = 255; if (blub < 0) blub = 0; else if (argc == 8) { Xres = atoi(argv[4]); Xofset = atoi(argv[5]); Yres = atoi(argv[6]); Yofset = atoi(argv[7]); } } else error("Usage: bbackfill [redbyte grnbyte blubyte [Xres Xofset Yres Yofset]]\n"); for (j=Yres+Yofset-1; j>=Yofset; j--) { unsigned long line[640]; bbread(Xofset,j,line,Xres); for (i=0; i<Xres; i++) { double oldcvr,red,grn,blu; oldcvr = line[i] >> 24; red = (line[i] >> 16) & 255; grn = (line[i] >> 8) & 255; blu = line[i] & 255; if ((oldcvr > 0.) && (oldcvr < 255.)) /* check for blend w/ bkgrd */ { double cvrcomp,cvr; cvr = oldcvr/255.; cvrcomp = 1. - cvr; /* uncovered part of pixel */ red = red * cvr + cvrcomp * redb; grn = grn * cvr + cvrcomp * grnb; blu = blu * cvr + cvrcomp * blub; if (red > 255) red = 255; if (grn > 255) grn = 255; if (blu > 255) blu = 255; line[i] = ((short)oldcvr << 24) | ((short)red << 16) | ((short)grn << 8) | (short)blu; } } bbwrite(Xofset,j,line,Xres); } } !Funky!Stuff!