henesyinit from p9fce6d0435 years agoHistory
47 lines · 1.1 KB · C
RawDownload
/* * sub -- subtract a pair of images */#include <u.h>#include <libc.h>#include <libg.h>#include <fb.h>main(int argc, char *argv[]){	PICFILE *a, *b, *out;	unsigned char *abuf, *bbuf, *outbuf, *ap, *bp, *outp, *eout;	int y, nc, ny;	argc=getflags(argc, argv, "");	if(argc!=3) usage("file file");	a=picopen_r(argv[1]);	b=picopen_r(argv[2]);	out=picopen_w("OUT", PIC_SAMEARGS(a));	if(a==0 || b==0 || out==0){		if(a==0) perror(argv[1]);		if(b==0) perror(argv[2]);		if(out==0) perror("OUT");		exits("no input");	}	if(PIC_WIDTH(a)!=PIC_WIDTH(b)	|| PIC_HEIGHT(a)!=PIC_HEIGHT(b)	|| PIC_NCHAN(a)!=PIC_NCHAN(b)){		fprint(2, "%s: input dimensions don't match\n", argv[0]);		exits("conformability");	}	nc=PIC_WIDTH(a)*PIC_NCHAN(a);	ny=PIC_HEIGHT(a);	abuf=malloc(nc);	bbuf=malloc(nc);	outbuf=malloc(nc);	if(abuf==0 || bbuf==0 || outbuf==0){		fprint(2, "%s: can't malloc\n", argv[0]);		exits("no mem");	}	eout=outbuf+nc;	for(y=0;y!=ny;y++){		picread(a, abuf);		picread(b, bbuf);		for(ap=abuf,bp=bbuf,outp=outbuf;outp!=eout;ap++,bp++,outp++)			*outp=*ap>*bp?*ap-*bp:*bp-*ap;		picwrite(out, outbuf);	}	exits(0);}