|
|
1.1 ! root 1: /* version of regrid to do antialiasing */ ! 2: ! 3: #include <stdio.h> ! 4: #include "view2d.h" ! 5: #define NMAX 1026 ! 6: char *progname; ! 7: ! 8: short timewarp; ! 9: double ts, te; ! 10: extern Rd2d rd; ! 11: int verbose; ! 12: ! 13: typedef struct Frame { ! 14: double time; ! 15: short *p; ! 16: } Frame; ! 17: Frame frame[3]; ! 18: Frame *here; ! 19: ! 20: short nx, ny; /* input grid */ ! 21: short mx, my; /* output grid */ ! 22: int ncolor; ! 23: ! 24: main(argc, argv) ! 25: int argc; ! 26: char **argv; ! 27: { ! 28: int i, j; ! 29: short *in; /* input values */ ! 30: int nfr; /* number of frames to be drawn */ ! 31: int ifr; ! 32: double t; ! 33: short *a, *b, *c; ! 34: int fd; ! 35: int ulim = 0; ! 36: float ufmin, ufmax; ! 37: char *Malloc(); ! 38: ! 39: ncolor = 32; ! 40: timewarp = 0; ! 41: verbose = 0; ! 42: progname = argv[0]; ! 43: here = frame+0; ! 44: nfr = -1; ! 45: ! 46: for(argc--, argv++; *argv; argv++){ ! 47: if(**argv == '-' ){ ! 48: switch(argv[0][1]) { ! 49: case 'c': ! 50: ncolor = atoi(&argv[0][2]); ! 51: break; ! 52: case 'v': ! 53: verbose++; ! 54: break; ! 55: } ! 56: }else{ ! 57: if(fd) error("can only read one file"); ! 58: fd = Open(*argv,0); ! 59: } ! 60: } ! 61: ! 62: rd2dh(fd,&nx,&ny); ! 63: mx = nx/2; my = ny/2; ! 64: if((timewarp>0)&&(verbose)) ! 65: fprintf(stderr,"timewarp=%d ts=%g te=%g\n",timewarp,ts,te); ! 66: if(ulim){ ! 67: rd.fmin = ufmin; ! 68: rd.fmax = ufmax; ! 69: g_rang2(); ! 70: } ! 71: if(nfr==-1) nfr = rd.nfr; ! 72: if((nx > NMAX) || (ny > NMAX)) error("n too large"); ! 73: if(verbose){ ! 74: fprintf(stderr,"nx=%d ny=%d nframes=%d\n",nx,ny,rd.nfr); ! 75: fprintf(stderr,"mx=%d my=%d\n",mx,my); ! 76: fprintf(stderr,"global starting_time=%g ending_time=%g\n",rd.ts,rd.te); ! 77: fprintf(stderr,"fmin=%g fmax=%g\n",rd.fmin,rd.fmax); ! 78: fprintf(stderr,"pmin=%d pmax=%d\n",rd.pmin,rd.pmax); ! 79: fprintf(stderr,"u=%d v=%d\n",rd.u,rd.v); ! 80: } ! 81: ! 82: in = (short *)Malloc(nx*ny*sizeof(short)); ! 83: i = mx*my*sizeof(short); ! 84: here->p = (short *)Malloc(i); ! 85: ! 86: if(rdframe(here,in)==0) error("unexpected empty first frame"); ! 87: wrframe(here->time,here->p); ! 88: while( rdframe(here,in) ){ ! 89: wrframe(here->time,here->p); ! 90: } ! 91: ! 92: exit(0); ! 93: } ! 94: ! 95: ! 96: wrframe(t,p) ! 97: double t; ! 98: short p[]; ! 99: { ! 100: view2d(1,mx,my,t,rd.u,rd.v,1,0,255,p); ! 101: } ! 102: ! 103: ! 104: int /* returns 0 on EOF */ ! 105: rdframe ( h, u ) ! 106: Frame *h; ! 107: short *u; ! 108: { ! 109: int i, ii, j, jj, hue; ! 110: int ncolor1 = ncolor-1; ! 111: int rmin = rd.pmin; ! 112: int dark, sum; ! 113: short *q, *w; ! 114: short *qend; ! 115: short a,b,c,d; /* colors of 4 adjacent input pixels */ ! 116: int r; ! 117: int prange = ((int)rd.pmax)-rd.pmin; ! 118: int black=255; ! 119: ! 120: if( rd2di( &h->time, u ) == 0 ) return(0); ! 121: if(verbose) fprintf(stderr,"time=%g\n",h->time); ! 122: ! 123: /* convert to color, between 0 and ncolor1 */ ! 124: q = u; qend=q+nx*ny; ! 125: for(; q<qend; q++){ ! 126: r = *q; ! 127: if(r < -BIG){ ! 128: *q = black; ! 129: }else{ ! 130: *q = ((r-rmin)*ncolor1)/prange; ! 131: } ! 132: } ! 133: ! 134: w = h->p; ! 135: for(j=0; j<mx; j++){ ! 136: for(i=0; i<my; i++){ ! 137: ii = 2*i; ! 138: jj = 2*j; ! 139: q = &u[ii+nx*jj]; ! 140: dark = 0; ! 141: sum = 0; ! 142: if( (a=q[0] )==black){dark++;}else{sum+=a;}; ! 143: if( (b=q[1] )==black){dark++;}else{sum+=b;}; ! 144: if( (c=q[nx] )==black){dark++;}else{sum+=c;}; ! 145: if( (d=q[nx+1])==black){dark++;}else{sum+=d;}; ! 146: if(dark==4){ ! 147: *w = black; ! 148: }else{ ! 149: hue = (int)(sum*62.499/((4-dark)*ncolor1)); ! 150: *w = hue + dark*64; ! 151: } ! 152: w++; ! 153: } ! 154: } ! 155: return(1); ! 156: } ! 157:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.