⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ximage.c

📁 su 的源代码库
💻 C
📖 第 1 页 / 共 4 页
字号:
	n1tic = 1; getparint("n1tic",&n1tic);	getparstring("grid1",&grid1s);	if (STREQ("dot",grid1s)) grid1 = DOT;	else if (STREQ("dash",grid1s)) grid1 = DASH;	else if (STREQ("solid",grid1s)) grid1 = SOLID;	else grid1 = NONE;	getparstring("label1",&label1);	x2beg = x2min; getparfloat("x2beg",&x2beg);	x2end = x2max; getparfloat("x2end",&x2end);	d2num = 0.0; getparfloat("d2num",&d2num);	f2num = 0.0; getparfloat("f2num",&f2num);	n2tic = 1; getparint("n2tic",&n2tic);	getparstring("grid2",&grid2s);	if (STREQ("dot",grid2s)) grid2 = DOT;	else if (STREQ("dash",grid2s)) grid2 = DASH;	else if (STREQ("solid",grid2s)) grid2 = SOLID;	else grid2 = NONE;	getparstring("label2",&label2);	getparstring("labelfont",&labelfont);	labelsize = 18.0; getparfloat("labelsize",&labelsize);	getparstring("title",&title);	getparstring("titlefont",&titlefont);	titlesize = 24.0; getparfloat("titlesize",&titlesize);	getparstring("style",&styles);	if (STREQ("normal",styles)) style = NORMAL;	else style = SEISMIC;	getparstring("titlecolor",&titlecolor);	getparstring("labelcolor",&labelcolor);	getparstring("gridcolor",&gridcolor);	getparstring("windowtitle",&windowtitle);	/* adjust x1beg and x1end to fall on sampled values */	i1beg = NINT((x1beg-f1)/d1);	i1beg = MAX(0,MIN(n1-1,i1beg));	x1beg = f1+i1beg*d1;	i1end = NINT((x1end-f1)/d1);	i1end = MAX(0,MIN(n1-1,i1end));	x1end = f1+i1end*d1;	/* adjust x2beg and x2end to fall on sampled values */	i2beg = NINT((x2beg-f2)/d2);	i2beg = MAX(0,MIN(n2-1,i2beg));	x2beg = f2+i2beg*d2;	i2end = NINT((x2end-f2)/d2);	i2end = MAX(0,MIN(n2-1,i2end));	x2end = f2+i2end*d2;	/* allocate space for image bytes */	n1c = 1+abs(i1end-i1beg);	n2c = 1+abs(i2end-i2beg);	cz = ealloc1(n1c*n2c,sizeof(unsigned char));	/* convert data to be imaged into signed characters */	zscale = (wclip!=bclip)?255.0/(wclip-bclip):1.0e10;	zoffset = -bclip*zscale;	i1step = (i1end>i1beg)?1:-1;	i2step = (i2end>i2beg)?1:-1;	if (style==NORMAL) {		for (i2c=0,i2=i2beg; i2c<n2c; i2c++,i2+=i2step) {			czp = cz+n1c*n2c-(i2c+1)*n1c;			for (i1c=0,i1=i1beg; i1c<n1c; i1c++,i1+=i1step) {				zi = zoffset+z[i1+i2*n1]*zscale;				if (zi<0.0) zi = 0.0;				if (zi>255.0) zi = 255.0;				*czp++ = (unsigned char)zi;			}		}	} else {		czp = cz;		for (i1c=0,i1=i1beg; i1c<n1c; i1c++,i1+=i1step) {			for (i2c=0,i2=i2beg; i2c<n2c; i2c++,i2+=i2step) {				zi = zoffset+z[i1+i2*n1]*zscale;				if (zi<0.0) zi = 0.0;				if (zi>255.0) zi = 255.0;				*czp++ = (unsigned char)zi;			}		}	}/*	free1float(z);      keep data for plotting GK */		/* initialize zoom box parameters */	dx = (style==NORMAL ? d1 : d2);	dy = (style==NORMAL ? d2 : d1);	nxb = nx = (style==NORMAL ? n1c : n2c);	nyb = ny = (style==NORMAL ? n2c : n1c);	ixb = iyb = 0;	czb = cz;	x1begb = x1beg;	 x1endb = x1end;	x2begb = x2beg;	 x2endb = x2end;	/* connect to X server */	if ((dpy=XOpenDisplay(NULL))==NULL)		err("Cannot connect to display %s!\n",XDisplayName(NULL));	scr = DefaultScreen(dpy);	black = BlackPixel(dpy,scr);	white = WhitePixel(dpy,scr);		/* create window */	win = xNewWindow(dpy,xbox,ybox,wbox,hbox,(int) black,(int) white,windowtitle);	/* backwards compatibility */	if (STREQ(cmap,"gray")) {		sprintf(cmap,"%s","rgb0");	} else if (STREQ(cmap,"hue")) {		/* free1(cmap); */		cmap = (char *)alloc1(5,1);		sprintf(cmap,"%s","hsv1");	} else  if ((strncmp(cmap,"hsv",3)) && (strncmp(cmap,"rgb",3))){			if (verbose) warn ("cmap=%s using cmap=gray", cmap);			/* free1(cmap); */			cmap = (char *)alloc1(5,1);       			sprintf (cmap, "%s", "rgb0");	} 		/* here are the new colormaps				*/	if (strncmp(cmap, "rgb", 3) == 0)		XSetWindowColormap(dpy,win,			xCreateRGBColormap(dpy,win, cmap, verbose));	else if (strncmp (cmap, "hsv", 3) == 0)		XSetWindowColormap(dpy,win,			xCreateHSVColormap(dpy,win, cmap, verbose));		/* determine min and max pixels from standard colormap */	pmin = xGetFirstPixel(dpy);	pmax = xGetLastPixel(dpy);	if (verbose) warn("pmin=%x,pmax=%x\n",pmin,pmax);	if(pmax==0L)pmax=255L;	if (verbose) warn("pmin=%x,pmax=%x\n",pmin,pmax);	data_legend = (unsigned char *) malloc(lwidth * lheight);        if( bclip < wclip ){           base=256;           fact=-256.0;        }else{           base=0;           fact=256.0;        }        ptr = data_legend;	for (i=0; i<lheight; i++){           for( j=0; j<lwidth; j++ ){	      *ptr++ = (unsigned char)                             (base + (fact*i)/lheight);           }           /* fprintf(stderr," %d ",*(ptr-1) ); */	}			/* make GC for image */	gci = XCreateGC(dpy,win,0,NULL);		/* set normal event mask */	XSelectInput(dpy,win,		StructureNotifyMask |		ExposureMask |		KeyPressMask |		PointerMotionMask |		ButtonPressMask |		ButtonReleaseMask |		Button1MotionMask |		Button2MotionMask);		/* map window */	XMapWindow(dpy,win);						/* determine good size for axes box */	xSizeAxesBox(dpy,win,		labelfont,titlefont,style,		&x,&y,&width,&height);		/* clear the window */	XClearWindow(dpy,win);		/* note that image is out of date */	imageOutOfDate = 1;	/* main event loop */	while(imageOutOfDate|(~imageOutOfDate)/*True*/) {		XNextEvent(dpy,&event);		/* if window was resized */		if (event.type==ConfigureNotify &&			(event.xconfigure.width!=winwidth ||			 event.xconfigure.height!=winheight)) {			winwidth = event.xconfigure.width;			winheight = event.xconfigure.height;										/* determine good size for axes box */			xSizeAxesBox(dpy,win,				labelfont,titlefont,style,				&x,&y,&width,&height);						/* clear the window */			XClearWindow(dpy,win);						/* note that image is out of date */			imageOutOfDate = 1;		/* else if window exposed */		} else if (event.type==Expose) {						/* clear all expose events from queue */			while (XCheckTypedEvent(dpy,Expose,&event));						/* if necessary, make new image */			if (imageOutOfDate) {				 czbi = newInterpBytes(nxb,nyb,czb,							width,height,blockinterp);				if (image!=NULL) XDestroyImage(image);				image = xNewImage(dpy,pmin,pmax,					width,height,blank,czbi);				/* BEREND create image */				if (legend) {					if (image_legend!=NULL) XDestroyImage(image_legend);					image_legend = xNewImage(dpy,pmin,pmax,lwidth,lheight,0,data_legend);				}				imageOutOfDate = 0;			}				/* draw image (before axes so grid lines visible) */			XPutImage(dpy,win,gci,image,0,0,x,y,				image->width,image->height);			/* BEREND display image */			if (legend)				XPutImage(dpy,win,gci,image_legend,					0,0,lx,y+ly,lwidth,lheight);			/* BEREND draw legend axes on top of image */			if (legend)				xDrawLegendBox(dpy,win,					lx,y+ly,lwidth,lheight,					bclip,wclip,units,legendfont,					labelfont,title,titlefont,					labelcolor,titlecolor,gridcolor,					style);                        /* draw curve on top of image */			for (i=0; i<curve; i++)				xDrawCurve(dpy,win,					   x,y,width,height,					   x1begb,x1endb,0.0,0.0,					   x2begb,x2endb,0.0,0.0,					   x1curve[i],x2curve[i],npair[i],					   curvecolor[i],style);	                /* draw axes on top of image */			xDrawAxesBox(dpy,win,				x,y,width,height,				x1begb,x1endb,0.0,0.0,				d1num,f1num,n1tic,grid1,label1,				x2begb,x2endb,0.0,0.0,				d2num,f2num,n2tic,grid2,label2,				labelfont,title,titlefont,				labelcolor,titlecolor,gridcolor,				style);		/* else if key down */		} else if (event.type==KeyPress) {			XLookupString(&(event.xkey),keybuf,0,&keysym,&keystat);                     /*  added moving, clipping and zooming GK */			if (keysym==XK_s) {				xMousePrint(event,style, mpicksfp,					    x,y,width,height,					    x1begb,x1endb,x2begb,x2endb);			} else if (keysym==XK_l ) {				/* set lock */		  			     lock = 1 ;			  if (verbose) warn("zoom lock set  %d\n",lock); 			} else if (keysym==XK_u ) {				/* unset lock */		  			     lock = 0 ;			  if (verbose) warn("zoom lock released %d\n",lock); 			} else if (keysym==XK_Shift_L ) { 			     /* if (verbose) 			     fprintf(stderr,"Shift Left pressed \n");*/			} else if (keysym==XK_KP_1 || keysym==XK_1 ) { 			     mvefac=1.;			     fprintf(stderr,"Zoom/Move factor = 1 \n");			} else if (keysym==XK_KP_2 || keysym==XK_2 ) { 			     mvefac=2.;			     fprintf(stderr,"Zoom/Move factor = 2 \n");			} else if (keysym==XK_KP_3 || keysym==XK_3 ) { 			     mvefac=3.;			     if (verbose) 			     fprintf(stderr,"Zoom/Move factor = 3 \n");			} else if (keysym==XK_KP_4 || keysym==XK_4 ) { 			     mvefac=4.;			     if (verbose) 			     fprintf(stderr,"Zoom/Move factor = 4 \n");			} else if (keysym==XK_KP_5 || keysym==XK_5 ) { 			     mvefac=5.;			     if (verbose) 			     fprintf(stderr,"Zoom/Move factor = 5 \n");			} else if (keysym==XK_KP_6 || keysym==XK_6 ) { 			     mvefac=6.;			     if (verbose) 			     fprintf(stderr,"Zoom/Move factor = 6 \n");			} else if (keysym==XK_KP_7 || keysym==XK_7 ) { 			     mvefac=7.;			     if (verbose) 			     fprintf(stderr,"Zoom/Move factor = 7 \n");			} else if (keysym==XK_KP_8 || keysym==XK_8 ) { 			     mvefac=8.;			     if (verbose) 			     fprintf(stderr,"Zoom/Move factor = 8\n");			} else if (keysym==XK_KP_9 || keysym==XK_9 ) { 			     mvefac=9.;			     if (verbose) 			     fprintf(stderr,"Zoom/Move factor = 9\n");			} else if (keysym==XK_Left ) { 			  /* move zoom box to left by half window width */			  mve = (x2endb - x2begb)/mvefac ;			  x2begb = x2begb - mve ;			  x2endb = x2endb - mve ;			  msg="move "; 			  /* check for bounds of full window */			  if (x2begb < x2beg){			    if ( lock ) { x2begb = x2begb + mve ;			                  x2endb = x2endb + mve ;					  msg="limit ";					  mve=0;			    } else {  x2begb = x2beg ;			              nxb=(int)((x2endb-x2begb)/dx);				   }			  }			  if (verbose) fprintf(stderr,"%s %g\n",msg,mve);			   ixb+=-(int)(mve/dx);			   if ( (ixb<0) || 			        ((ixb+nxb)>nx) || 			        (nxb<2) || 			        (nxb>nx)) {ixb=0;nxb=nx;				           x2begb=x2beg;					   x2endb=x2end;}			   if (czb!=cz) free1(czb);			   czb = ealloc1(nxb*nyb,				     sizeof(signed char));			   for (i=0,czbp=czb; i<nyb; i++) {			       czp = cz+(iyb+i)*nx+ixb;			       for (j=0; j<nxb; j++)				    *czbp++ = *czp++; 			   }									  			  /* clear area and force an expose event */			  XClearArea(dpy,win,0,0,0,0,True);			  /* note that image is out of date */			  imageOutOfDate = 1;											} else if (keysym==XK_Right ) {			  /* move zoom box to right by half window width*/			  mve = (x2endb - x2begb)/mvefac ;			  x2begb = x2begb + mve ;			  x2endb = x2endb + mve ;			  msg="move "; 			  /* check for bounds of full window */			  if (x2endb > x2end){			    if ( lock ) { x2begb = x2begb - mve ;			                  x2endb = x2endb - mve ;					  msg="limit ";					  mve=0;			    } else { x2endb = x2end;			             nxb=(int)((x2endb-x2begb)/dx);				   }			  }			  if (verbose) fprintf(stderr,"%s %g\n",msg,mve);			  			  /* for replot require 			   * ixb,iyb   start samples of image			   * nxb,nyb   number of samples of image */			   			   ixb+=(int)(mve/dx);			   if ( (ixb<0) || 			        ((ixb+nxb)>nx) || 			        (nxb<2) || 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -