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

📄 image.c

📁 su 的源代码库
💻 C
字号:
/* Copyright (c) Colorado School of Mines, 2006.*//* All rights reserved.                       *//* Copyright (c) Colorado School of Mines, 2001.*//* All rights reserved.                       *//* Copyright (c) Colorado School of Mines, 1998.*//* All rights reserved.                       *//*********************** self documentation **********************//*****************************************************************************IMAGE - Function for making the image in an X-windows image plotxNewImage	make a new image of pixels from bytes******************************************************************************Function Prototype:XImage *xNewImage (Display *dpy, unsigned long pmin, unsigned long pmax,	int width, int height, float blank, unsigned char *bytes);******************************************************************************Input:dpy		display pointerpmin		minimum pixel value (corresponding to byte=0)pmax		maximum pixel value (corresponding to byte=255)width		number of bytes in x dimensionheight		number of bytes in y dimensionblank		portion for blanking (0 to 1)bytes		unsigned bytes to be mapped to an image******************************************************************************Author:	  Dave Hale, Colorado School of Mines, 06/08/90Revision: Brian Zook, Southwest Research Institute, 6/27/96 added blank option	  This allows replacing the low end by the background.*****************************************************************************//**************** end self doc ********************************/#include "xplot.h"XImage *xNewImage (Display *dpy, unsigned long pmin, unsigned long pmax,	int width, int height, float blank, unsigned char *bytes)/*****************************************************************************make a new image of pixels from bytes******************************************************************************Input:dpy		display pointerpmin		minimum pixel value (corresponding to byte=0)pmax		maximum pixel value (corresponding to byte=255)width		number of bytes in x dimensionheight		number of bytes in y dimensionblank		portion for blanking (0 to 1)bytes		unsigned bytes to be mapped to an image******************************************************************************Author:		Dave Hale, Colorado School of Mines, 06/08/90*****************************************************************************/{	int scr=DefaultScreen(dpy);	int i,j,k,line,iline,jline,widthpad;	float base,scale;	unsigned long map[256],bkgnd;	unsigned char *data;	int byte_perpixel;	unsigned int depth;	XImage *xim;		xim=(XImage *) NULL;	depth=(unsigned int)DefaultDepth(dpy,scr);		byte_perpixel=4;	if(depth<=8) byte_perpixel=1;	else if(depth<=16) byte_perpixel=2;/*	else if(depth<=24) byte_perpixel=3;*/	/* build map for translating bytes to pixels */	base = ((double) pmin)+0.499;	scale = ((double) (pmax-pmin))/255.0;	for (i=0; i<=255; ++i){		map[i] = base+i*scale;	}	/* blanking */	bkgnd = (unsigned long) WhitePixel(dpy,scr);	j = MAX(0,MIN(256,(int)(256*blank)));	for (i = 0; i < j; i++)		map[255-i] = bkgnd;	/* allocate memory for image data */	widthpad = (1+(width-1)/(BitmapPad(dpy)/8))*BitmapPad(dpy)/8;	data = ealloc1(widthpad*height,byte_perpixel);	xim=XCreateImage(	(Display *) dpy,				(Visual *) DefaultVisual(dpy,scr),				(unsigned int) DefaultDepth(dpy,scr),				(int) ZPixmap,				(int) 0,				(char *) data,				(unsigned int) widthpad,				(unsigned int) height,/*				(int) BitmapPad(dpy),				(int) widthpad*byte_perpixel*/				8,0);	byte_perpixel=xim->bits_per_pixel/8;/*	fprintf(stderr,"\nbyte_perpixel = %d, depth= %d\n", byte_perpixel,depth); */	/* translate bytes to pixels, padding scanlines as necessary */	for (line=0; line<height; line++) {		iline = line*width;		jline = line*widthpad;		for (i=iline,j=jline,k=0; k<width; ++i,++j,++k)		{       if(byte_perpixel==1)			((unsigned char *)data)[j] =(unsigned char)map[bytes[i]];			if(byte_perpixel==2)			  {			    int edn=xim->byte_order;			    if(edn==LSBFirst){			      ((unsigned char *)data)[j*2+0] =(unsigned char)(truecolor_pixel[bytes[i]]);			      ((unsigned char *)data)[j*2+1] =(unsigned char)(truecolor_pixel[bytes[i]]>>8);			    }else{			      ((unsigned char *)data)[j*2+0] =(unsigned char)(truecolor_pixel[bytes[i]]>>24); 			      ((unsigned char *)data)[j*2+1] =(unsigned char)(truecolor_pixel[bytes[i]]>>16);			      }			    /*((unsigned short *)data)[j] =(unsigned short)(truecolor_pixel[bytes[i]]);*/			  }	                        if(byte_perpixel==3){			  int edn=xim->byte_order;			  if(edn==LSBFirst){			    ((unsigned char *)data)[j*3+0] =(unsigned char)(truecolor_pixel[bytes[i]]);			    ((unsigned char *)data)[j*3+1] =(unsigned char)(truecolor_pixel[bytes[i]]>>8);			    ((unsigned char *)data)[j*3+2] =(unsigned char)(truecolor_pixel[bytes[i]]>>16);			  }else{			    ((unsigned char *)data)[j*3+0] =(unsigned char)(truecolor_pixel[bytes[i]]>>24);   			    ((unsigned char *)data)[j*3+1] =(unsigned char)(truecolor_pixel[bytes[i]]>>16); 			    ((unsigned char *)data)[j*3+2] =(unsigned char)(truecolor_pixel[bytes[i]]>>8);			  }			  			}				if(byte_perpixel==4){			  int edn=xim->byte_order;			  if(edn==LSBFirst){			    ((unsigned char *)data)[j*4+0] =(unsigned char)(truecolor_pixel[bytes[i]]);			    ((unsigned char *)data)[j*4+1] =(unsigned char)(truecolor_pixel[bytes[i]]>>8);			    ((unsigned char *)data)[j*4+2] =(unsigned char)(truecolor_pixel[bytes[i]]>>16);			    ((unsigned char *)data)[j*4+3] =(unsigned char)(truecolor_pixel[bytes[i]]>>24);			  }else{			    ((unsigned char *)data)[j*4+0] =(unsigned char)(truecolor_pixel[bytes[i]]>>24);			    ((unsigned char *)data)[j*4+1] =(unsigned char)(truecolor_pixel[bytes[i]]>>16);   			    ((unsigned char *)data)[j*4+2] =(unsigned char)(truecolor_pixel[bytes[i]]>>8); 			    ((unsigned char *)data)[j*4+3] =(unsigned char)(truecolor_pixel[bytes[i]]);			  }			    /* ((unsigned long *)data)[j] =(unsigned long)truecolor_pixel[bytes[i]];*/			}		}		for (j=jline+width,k=width; k<widthpad; ++j,++k)		{		       if(byte_perpixel==1)                        ((unsigned char *)data)[j] =((unsigned char *)data)[jline+width-1];                        if(byte_perpixel==2)			{                       /* ((unsigned short *)data)[j] =((unsigned short *)data)[jline+width-1];*/			 ((unsigned char *)data)[j*2+0] =((unsigned char *)data)[(jline+width-1)*2+0];                        ((unsigned char *)data)[j*2+1] =((unsigned char *)data)[(jline+width-1)*2+1];			}                        if(byte_perpixel==3){                        ((unsigned char *)data)[j*3+0] =((unsigned char *)data)[(jline+width-1)*3+0];                        ((unsigned char *)data)[j*3+1] =((unsigned char *)data)[(jline+width-1)*3+1];                        ((unsigned char *)data)[j*3+2] =((unsigned char *)data)[(jline+width-1)*3+2];			}                        if(byte_perpixel==4)			{                       ((unsigned char *)data)[j*4+0] =((unsigned char *)data)[(jline+width-1)*4+0];                        ((unsigned char *)data)[j*4+1] =((unsigned char *)data)[(jline+width-1)*4+1];                        ((unsigned char *)data)[j*4+2] =((unsigned char *)data)[(jline+width-1)*4+2];                        ((unsigned char *)data)[j*4+3] =((unsigned char *)data)[(jline+width-1)*4+3];    			}		}	}		/* create and return image structure */	return xim;}

⌨️ 快捷键说明

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