|
|
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.