#include "hisview_view.h" #include "hisview_misc.h" #include "hisview_widgets.h" #include static char dumstr[80]; int Hmin=1, Hmax=100, Smin=1, Smax=100, Vmin=1, Vmax=100; void _2DfloatTo2Dbyte(startf, xmin, xmax, ymin, ymax, startb, scalex, scaley, clip) float *startf; /* Addresse de depart des donnees 2Dfloat a */ /* extraire */ int xmin, /* Borne inferieure sur la 1ere dimension */ xmax, /* Borne superieure sur la 1ere dimension */ ymin, /* Borne inferieure sur la 2eme dimension */ ymax; /* Borne superieure sur la 2eme dimension */ unsigned char *startb; /* Addresse de depart de la zone memoire */ /* contenant les valeurs de pixel */ int scalex, /* Facteur d'echelle selon la 1ere dimension */ scaley; /* Facteur d'echelle selon la 2eme dimension */ float clip[2]; { int i, x, y, l; int width, height; float sc, tested; unsigned char *p; if (clip[1] == clip[0]) return; sc = ((float) (ncolors - 1)) / (clip[1] - clip[0]); width = (xmax - xmin + 1)*scalex; height = (ymax - ymin + 1)*scaley; startb = startb + (height-1)*width; for (y = ymin ; y <= ymax ; y++) { p = startb; for (x = xmin ; x <= xmax ; x++) { tested = *startf; l = (int) (sc*(tested - clip[0])); if (l < 0) { l = 0; } else { if (l > (ncolors-1)) l = ncolors - 1; } memset(startb, colmap[l], scalex); startb += scalex; startf++; } startb -=2*width; for (i = 1; i < scaley; i++) { (void) memcpy(startb, p, width); startb -= width; } } } int mode = 0; extern int myowncmap; void draw_wedge(float clip[2]) { int j, k; char c[12]; Font fonte; float f; int offset; Pixel col; fonte = XLoadFont(display, "6x10"); XSetFont(display, gc, fonte); offset = (cpixmapdim[1] - 2*ncolors)/2; XSetForeground(display, gc, BlackPixel(display, screen)); XFillRectangle(display, cpixmap, gc, 0, 0, cpixmapdim[0], cpixmapdim[1]); for (k=0; kvalue - 1); Hclip[0] = newclip; Hmin = cbs->value; if (Hmin == Hmax) { XmTextSetString(lowcut, "Doesn't make sense ..."); nosense = 1; return; } sprintf(dumstr, "lowcut = %f", Hclip[0]); XmTextSetString(lowcut, dumstr); sprintf(dumstr, "highcut = %f", Hclip[1]); XmTextSetString(highcut, dumstr); break; case 2: newclip = Sclipsav[0] + ((Sclipsav[1] - Sclipsav[0])/99.)*(cbs->value - 1); Sclip[0] = newclip; Smin = cbs->value; if (Smin == Smax) { XmTextSetString(lowcut, "Doesn't make sense ..."); nosense = 1; return; } sprintf(dumstr, "lowcut = %f", Sclip[0]); XmTextSetString(lowcut, dumstr); sprintf(dumstr, "highcut = %f", Sclip[1]); XmTextSetString(highcut, dumstr); break; case 3: newclip = Vclipsav[0] + ((Vclipsav[1] - Vclipsav[0])/99.)*(cbs->value - 1); Vclip[0] = newclip; Vmin = cbs->value; if (Vmin == Vmax) { XmTextSetString(lowcut, "Doesn't make sense ..."); nosense = 1; return; } sprintf(dumstr, "lowcut = %f", Vclip[0]); XmTextSetString(lowcut, dumstr); sprintf(dumstr, "highcut = %f", Vclip[1]); XmTextSetString(highcut, dumstr); break; } break; case k_highcut: switch(mode) { case 0: case 1: newclip = Hclipsav[0] + ((Hclipsav[1] - Hclipsav[0])/99.)*(cbs->value - 1); Hclip[1] = newclip; Hmax = cbs->value; if (Hmin == Hmax) { XmTextSetString(highcut, "Doesn't make sense ..."); nosense = 1; return; } sprintf(dumstr, "highcut = %f", Hclip[1]); XmTextSetString(highcut, dumstr); sprintf(dumstr, "lowcut = %f", Hclip[0]); XmTextSetString(lowcut, dumstr); break; case 2: newclip = Sclipsav[0] + ((Sclipsav[1] - Sclipsav[0])/99.)*(cbs->value - 1); Sclip[1] = newclip; Smax = cbs->value; if (Smin == Smax) { XmTextSetString(highcut, "Doesn't make sense ..."); nosense = 1; return; } sprintf(dumstr, "highcut = %f", Sclip[1]); XmTextSetString(highcut, dumstr); sprintf(dumstr, "lowcut = %f", Sclip[0]); XmTextSetString(lowcut, dumstr); break; case 3: newclip = Vclipsav[0] + ((Vclipsav[1] - Vclipsav[0])/99.)*(cbs->value - 1); Vclip[1] = newclip; Vmax = cbs->value; if (Vmin == Vmax) { XmTextSetString(highcut, "Doesn't make sense ..."); nosense = 1; return; } sprintf(dumstr, "highcut = %f", Vclip[1]); XmTextSetString(highcut, dumstr); sprintf(dumstr, "lowcut = %f", Vclip[0]); XmTextSetString(lowcut, dumstr); break; } break; } } void scale_image(w, tag, cbs) Widget w; int *tag; XmScaleCallbackStruct *cbs; { Pixel col; if (nosense) return; XtVaSetValues(lowscale, XmNsensitive, 0, NULL); XtVaSetValues(highscale, XmNsensitive, 0, NULL); switch(mode) { case 0: case 1: scale_hue(mode); break; case 2: scale_sat(); break; case 3: scale_val(); break; } XtVaSetValues(lowscale, XmNsensitive, 1, NULL); XtVaSetValues(highscale, XmNsensitive, 1, NULL); }