/* * (c) SPDsoft Tue Apr 25, 1995 */ #include #include #include #include "pict.h" #ifdef THINK_C # include # define PATH_SEP ':' #else # define PATH_SEP '/' #endif #define MAX_PICT 32 #ifdef MYGETOPT char getopt( int argc, char *argv[], char *format ); #endif static char __ident[] = "@(#)(c) SPDsoft, Sat May 20, 1995, vers 0.0"; #define VERS_STR ((char*)&__ident[4]) char *app; void usage(char *name); void fatalError(char *name,char *str); void usage(char *name) { fprintf(stderr, "usage: %s [-o output] [-f factor] -s filename ...\n",name); exit(-1); } void fatalError(char *name,char *str) { fprintf(stderr, "%s: Fatal Error: %s. bye...\n",name,str); exit(-2); } main(int argc,char *argv[]) { char *fname="pout.pict",format; char tmpStr[32]; unsigned int NumOfSFrames=0; int OutputOpt=0; char Verbose=0; Pict pictIn[MAX_PICT],pictOut; float factor[MAX_PICT],cf=1; int np,i,j,opcion; int ih=0, iw=0; int pmode = M_MONO; float ro,go,bo; unsigned char *p; extern char *optarg; extern int optind,opterr; #ifdef THINK_C argc = ccommand(&argv); #endif if ((app = strrchr(argv[0], PATH_SEP)) != NULL) app = app+1; else app = argv[0]; while ( (opcion=getopt(argc,argv,"o:s:f:vh")) != EOF ) { switch(opcion) { case 'o': OutputOpt=optind-1; break; case 'v': printf("%s:%s\n",app,VERS_STR); Verbose=1; break; case 's': pictIn[NumOfSFrames] = pict_open(optarg,P_READ,0,0,0,NULL); if( pictIn[NumOfSFrames]->clr_mode != M_MONO ) pmode = M_RGB24; factor[NumOfSFrames++] = cf ; break; case 'f': cf = (float)atof(optarg); break; default: usage(app); } } if ( optind!=argc ) usage(app); if ( NumOfSFrames == 0 ) { fprintf(stderr, "%s: Error! Must be at least a source file\n", app); usage(app); } if(Verbose) { printf("%s:output)\t%s\n",app,OutputOpt!=0?argv[OutputOpt]:fname); printf("%s:NumFrames)\t%d\n",app,NumOfSFrames); } for(i=0;iimage_W; ih=pictIn[i]->image_H; } else { if((iw!=pictIn[i]->image_W)|| (ih!=pictIn[i]->image_H)) fatalError(app,"Dim Error!"); } if ((pictIn[i]->pixels = (U_char*) malloc((size_t)(iw *pictIn[i]->n_comp+1)))==NULL) fatalError(app,"Buy more memory!"); } pictOut = pict_open(OutputOpt!=0?argv[OutputOpt]:fname,P_WRITE, ih,iw,pmode,NULL); if ((pictOut->pixels = (U_char*)malloc(iw *pictOut->n_comp))==NULL) fatalError(app,"Buy more memory!"); /******************************************************************/ /* This is the real work */ for(j=0;jpixels); for(i=0;iclr_mode) { case M_MONO: ro += factor[np] * (float) pictIn[np]-> map[ * (pictIn[np]->pixels+i)][0]; bo = go = ro; break; case M_RGB8: ro += factor[np] * (float) pictIn[np]-> map[ * (pictIn[np]->pixels+i)][0]; go += factor[np] * (float) pictIn[np]-> map[ * (pictIn[np]->pixels+i)][1]; bo += factor[np] * (float) pictIn[np]-> map[ * (pictIn[np]->pixels+i)][2]; break; case M_RGB24: p = pictIn[np]->pixels + i; ro += factor[np] * (float) *p; p+=iw; go += factor[np] * (float) *p; p+=iw; bo += factor[np] * (float) *p; break; case M_RGBA32: p = pictIn[np]->pixels + i + iw; ro += factor[np] * (float) *p; p+=iw; go += factor[np] * (float) *p; p+=iw; bo += factor[np] * (float) *p; break; } if ( ro < 0 ) ro = 0; else if ( ro > 255 ) ro = 255; if ( go < 0 ) go = 0; else if ( go > 255 ) go = 255; if ( bo < 0 ) bo = 0; else if ( bo > 255 ) bo = 255; p=pictOut->pixels+i; *p=(unsigned char)ro; if ( pictOut->clr_mode == M_RGB24 ) { p+=iw; *p=(unsigned char)go; p+=iw; *p=(unsigned char)bo; } }/* columns */ pict_put_line(pictOut,pictOut->pixels); }/* lines */ /* End of real work */ /******************************************************************/ for(i=0;i