/********************************/ /* iisdsp valdes 7-27-88 */ /* */ /* Display standard image */ /********************************/ #include "focas1.h" #include "iisfv.h" static unsigned char bytebuff[MAXBUF]; static long data[MAXBUF]; imdspfl (window, fdin, imhdr, red, imiso) int fdin; struct imgdef *imhdr; int window; int red; struct imiso *imiso; { struct liso *liso; short *xla, *xra, *color; unsigned char *ptr; int i, j, ii, jj, x, y, dmin, dmax, dcolor; float d, dscale, dzero, z1, z2; switch (iisdev) { case 1: case 2: dmin = 0; dmax = 255; break; case 3: dmin = 1; dmax = 200; break; } dscale = imhdr->dscale * (dmax - dmin) / 255.; dzero = dmin + dscale * imhdr->dzero / imhdr->dscale; z1 = (dmin - dzero) / dscale; z2 = (dmax - dzero) / dscale; iiswwcs (window, "", imhdr->object, 1., 0., 0., 1., 0., 0., z1, z2, 1); ptr = bytebuff; for (i = 0; i < MAXBUF; i++) *ptr++ = 0; x = 0; y = 0; ptr = bytebuff; for (i = 0, ii = y; i < imhdr->naxis2; i += red, ii++) { rdimage (fdin, 0, i, imhdr->naxis1, imhdr, data); for (j = 0, jj = 0; j < imhdr->naxis1; j += red, jj++) { d = dscale * data[j] + dzero; if (d < dmin) ptr[jj] = dmin; else if (d > dmax) ptr[jj] = dmax; else ptr[jj] = d; } if (imiso != 0) { liso = &imiso->liso[i]; xla = liso->xla; xra = liso->xra; color = liso->color; if (color == 0) dcolor = dmax + 1; for (j = 0; j < liso->nused; j++) { if (color != 0) dcolor = color[j]; for (jj = xla[j] / red; jj <= xra[j] / red; jj++) if (jj>=0 && jjnaxis1/red) ptr[jj] = dcolor; } } ptr += iisxsize; if (ptr - bytebuff + iisxsize >= MAXBUF) { iisblock (window, x, y, ptr - bytebuff, bytebuff); /*y = ii;*/ y = ii + 1; ptr = bytebuff; } } if (ptr - bytebuff > 0) iisblock (window, x, y, ptr - bytebuff, bytebuff); return (0); } imdsp (window, p, imhdr, red) struct image *p; struct imgdef *imhdr; int window; int red; { int i, ii, j, jj, k, kk, l, x, y, dmin, dmax, step, rep, nx, ny; float d, dscale, dzero; unsigned char *ptr; long *dat; switch (iisdev) { case 1: case 2: dmin = 0; dmax = 255; break; case 3: dmin = 1; dmax = 200; break; } dscale = imhdr->dscale * (dmax - dmin) / 255.; dzero = dmin + dscale * imhdr->dzero / imhdr->dscale; iiswwcs (window, "", imhdr->object, 1., 0., 0., 1., 0., 0., (dmin - dzero) / dscale, (dmax - dzero) / dscale, 1); if (red == 0) red = 1; if (red > 0) { step = red; rep = 1; } else { step = 1; rep = -red; } nx = p->dx; if (rep * p->dx > iisxsize) nx = iisxsize / rep; ny = p->dy; if (rep * p->dy > iisysize) ny = iisysize / rep; ptr = bytebuff; for (i = 0; i < MAXBUF; i++) *ptr++ = 0; /* x = iiswda[window].wndw[0]; y = iiswda[window].wndw[1]; ptr = bytebuff; */ x = 0; y = iiswda[window].wndw[1]; ptr = bytebuff+iiswda[window].wndw[0]; for (i = 0, ii = y; i < ny; i += step) { dat = p->pic + i * nx; for (kk = 0; kk < rep; kk++, ii++) { for (j = 0, jj = 0; j < nx; j += step) { d = dscale * dat[j] + dzero; for (k = 0; k < rep; k++, jj++) { if (d < dmin) ptr[jj] = dmin; else if (d > dmax) ptr[jj] = dmax; else ptr[jj] = d; } } ptr += iisxsize; if (ptr - bytebuff + iisxsize >= MAXBUF) { iisblock (window, x, y, ptr - bytebuff, bytebuff); y = ii - 1; ptr = bytebuff+iiswda[window].wndw[0]; } } } if (ptr - bytebuff > 0) iisblock (window, x, y, ptr - bytebuff, bytebuff); } /*Determine reduction necessary to fit display device*/ imred (imhdr) struct imgdef *imhdr; { int red1, red2; red1 = (imhdr->naxis1 - 1) / iisxsize + 1; red2 = (imhdr->naxis2 - 1) / iisysize + 1; if (red1 > red2) return (red1); else return (red2); }