#include "hisview_view.h" #include "hisview_widgets.h" #include "hisview_misc.h" static char dumstr[80]; void hsvcolor_mode() { int i; for (i = 0; i < ncolors; i++) { red[i] = hue_to_red[i]; green[i] = sat_to_green[i]; blue[i] = val_to_blue[i]; } transfert_function(); } void fullcolor_mode() { int i; for (i = 0; i < ncolors; i++) { red[i] = fullred[i]; green[i] = fullgreen[i]; blue[i] = fullblue[i]; } transfert_function(); } void gray_mode() { int i; for (i = 0; i < ncolors; i++) { red[i] = gray[i]; green[i] = gray[i]; blue[i] = gray[i]; } transfert_function(); } int which_image=1; extern int mode, myowncmap; void show_hsvimage(w, w_code, cbs) Widget w; int *w_code; XmPushButtonCallbackStruct *cbs; { int i; char *pixels; XImage *image; mode = 0; if (!myowncmap) { for (i = 0; i < ncolors; i++) { red[i] = hue_to_red[i]; green[i] = sat_to_green[i]; blue[i] = val_to_blue[i]; } allocROColors(); pixels = (char*) malloc(size[0]*size[1]*sizeof(char)); hsvimage(Himage, Simage, Vimage, 1, npix[0], 1, npix[1], pixels, zoom, zoom, Hclip, Sclip, Vclip); image = XCreateImage(display, visual, depth, ZPixmap, 0, pixels, size[0], size[1], 8, 0); free(pixels); XPutImage(display, HSVpixmap, gc, image, 0, 0, 0, 0, size[0], size[1]); XFree(image); } XtVaSetValues(lowscale, /* XmNtitleString, XmStringCreateSimple("Hue min"), */ XmNvalue, Hmin, NULL); XtVaSetValues(highscale, /* XmNtitleString, XmStringCreateSimple("Hue max"), */ XmNvalue, Hmax, NULL); sprintf(dumstr, "lowcut = %f", Hclip[0]); XmTextSetString(lowcut, dumstr); sprintf(dumstr, "highcut = %f", Hclip[1]); XmTextSetString(highcut, dumstr); XtVaSetValues(toplevel, XmNtitle, "HISview", NULL); draw_wedge(Hclip); XCopyArea(display, HSVpixmap, pixmap, gc, 0, 0, pixmapdim[0], pixmapdim[1], 0, 0); XCopyArea(display, cpixmap, XtWindow(wedge), gc, 0, 0, cpixmapdim[0], pixmapdim[1], 0, 0); XCopyArea(display, pixmap, XtWindow(radec), gc, 0, 0, pixmapdim[0], pixmapdim[1], 0, 0); if (myowncmap) hsvcolor_mode(); } void show_components(w, w_code, cbs) Widget w; int *w_code; XmPushButtonCallbackStruct *cbs; { int i; char *pixels; XImage *image; switch(*w_code) { case k_showhue: which_image = 1; if (!myowncmap) { for (i = 0; i < ncolors; i++) { red[i] = fullred[i]; green[i] = fullgreen[i]; blue[i] = fullblue[i]; } allocROColors(); pixels = (char*) malloc(size[0]*size[1]*sizeof(char)); _2DfloatTo2Dbyte(Himage, 1, npix[0], 1, npix[1], pixels, zoom, zoom, Hclip); image = XCreateImage(display, visual, depth, ZPixmap, 0, pixels, size[0], size[1], 8, 0); free(pixels); XPutImage(display, Hpixmap, gc, image, 0, 0, 0, 0, size[0], size[1]); XFree(image); } XCopyArea(display, Hpixmap, pixmap, gc, 0, 0, pixmapdim[0], pixmapdim[1], 0, 0); mode = 1; draw_wedge(Hclip); XtVaSetValues(lowscale, /* XmNtitleString, XmStringCreateSimple("Hue min"), */ XmNvalue, Hmin, NULL); XtVaSetValues(highscale, /* XmNtitleString, XmStringCreateSimple("Hue max"), */ XmNvalue, Hmax, NULL); sprintf(dumstr, "lowcut = %f", Hclip[0]); XmTextSetString(lowcut, dumstr); sprintf(dumstr, "highcut = %f", Hclip[1]); XmTextSetString(highcut, dumstr); XtVaSetValues(toplevel, XmNtitle, Hname, NULL); break; case k_showsat: which_image = 2; if (!myowncmap) { for (i = 0; i < ncolors; i++) { red[i] = gray[i]; green[i] = gray[i]; blue[i] = gray[i]; } allocROColors(); pixels = (char*) malloc(size[0]*size[1]*sizeof(char)); _2DfloatTo2Dbyte(Simage, 1, npix[0], 1, npix[1], pixels, zoom, zoom, Sclip); image = XCreateImage(display, visual, depth, ZPixmap, 0, pixels, size[0], size[1], 8, 0); free(pixels); XPutImage(display, Spixmap, gc, image, 0, 0, 0, 0, size[0], size[1]); XFree(image); } XCopyArea(display, Spixmap, pixmap, gc, 0, 0, pixmapdim[0], pixmapdim[1], 0, 0); mode = 2; draw_wedge(Sclip); XtVaSetValues(lowscale, /* XmNtitleString, XmStringCreateSimple("Sat min"), */ XmNvalue, Smin, NULL); XtVaSetValues(highscale, /* XmNtitleString, XmStringCreateSimple("Sat max"), */ XmNvalue, Smax, NULL); sprintf(dumstr, "lowcut = %f", Sclip[0]); XmTextSetString(lowcut, dumstr); sprintf(dumstr, "highcut = %f", Sclip[1]); XmTextSetString(highcut, dumstr); XtVaSetValues(toplevel, XmNtitle, Sname, NULL); break; case k_showval: which_image = 3; if (!myowncmap) { for (i = 0; i < ncolors; i++) { red[i] = gray[i]; green[i] = gray[i]; blue[i] = gray[i]; } allocROColors(); pixels = (char*) malloc(size[0]*size[1]*sizeof(char)); _2DfloatTo2Dbyte(Vimage, 1, npix[0], 1, npix[1], pixels, zoom, zoom, Vclip); image = XCreateImage(display, visual, depth, ZPixmap, 0, pixels, size[0], size[1], 8, 0); free(pixels); XPutImage(display, Vpixmap, gc, image, 0, 0, 0, 0, size[0], size[1]); XFree(image); } XCopyArea(display, Vpixmap, pixmap, gc, 0, 0, pixmapdim[0], pixmapdim[1], 0, 0); mode = 3; draw_wedge(Vclip); XtVaSetValues(lowscale, /* XmNtitleString, XmStringCreateSimple("Val min"), */ XmNvalue, Vmin, NULL); XtVaSetValues(highscale, /* XmNtitleString, XmStringCreateSimple("Val max"), */ XmNvalue, Vmax, NULL); sprintf(dumstr, "lowcut = %f", Vclip[0]); XmTextSetString(lowcut, dumstr); sprintf(dumstr, "highcut = %f", Vclip[1]); XmTextSetString(highcut, dumstr); XtVaSetValues(toplevel, XmNtitle, Vname, NULL); break; } if (myowncmap) { if (*w_code == k_showhue) fullcolor_mode(); else gray_mode(); } XCopyArea(display, pixmap, XtWindow(radec), gc, 0, 0, pixmapdim[0], pixmapdim[1], 0, 0); XCopyArea(display, cpixmap, XtWindow(wedge), gc, 0, 0, cpixmapdim[0], pixmapdim[1], 0, 0); }