Graphics source in C: hsalgs/bbackfill.c
Ken Turkowski
ken at turtleva.UUCP
Fri Dec 16 12:10:08 AEST 1983
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!
More information about the Comp.sources.unix
mailing list