image.c_for_linux_win5&刾繖R@繖R@mBIN倎崾// All rights reserved by Daisuke Fukuoka and Takeshi Hara @ Gifu University. // 2002, 2003, 2004, 2005 #include #include #include //## for Mac/OS //## use GLUT/glut.h and use -framework OpenGL -framework GLUT -framework Foundation to compile //#include //## for linux and Widows //## use MesaGL and GLUT #include #define USAGE "Usages :\n\ contestview [filename][width][height][wl][ww][(no)swap][result filename]\n\ \n\ [comments]\n\ filename\t: Image data you desire to open.\n\ width\t\t: Image width [# of pixel]\n\ height\t\t: Image height [# of pixel]\n\ wl\t\t: Window level to display [-3000, 3000]\n\ ww\t\t: Window width to display [0, 6000]\n\ (no)swap\t: swap the file for little/big endian. Indicate noswap or swap.\n\ result filename\t: Result label file in unsigned char format\n\n\ [CONTEST USER]\n\ R\t: Display contour \n\ [ / ] \t: slice # and contour +/-\n\ [KEY ASSIGN]\n\ a/d\t: -/+ WL\n\ x/s\t: -/+ WW\n\ n/b\t: slice # +/-\n\ t/w\t: jump to start/end\n\ f/v\t: -/+ step [default: 20 HU]\n\ \t: -/+ MIP depth [default: 10 images]\n\ r\t: back to start slice and reset WL/WW\n\ e\t: jump to end slice and reset WL/WW\n\ l\t: CT pulmonary [WL WW]=[-595, 842]\n\ k\t: CT abdomen [WL WW]=[ 40, 350]\n\ j\t: CT bone [WL WW]=[ 300,1500]\n\ h\t: CT brain [WL WW]=[ 50, 100]\n\ q\t: quit\n\ \n" #define HUmax 3000 #define HUmin -3000 #define CTpulWL -595 #define CTpulWW 842 #define CTabdWL 40 #define CTabdWW 350 #define CTbonWL 300 #define CTbonWW 1500 #define CTbraWL 50 #define CTbraWW 100 /* #define Scale 1.00 */ short *ctdata,*maximg, *minimg; unsigned char *image, *resimage; char *fname, *resfname; void _init(void); void _display(void); void _reshape(int,int); void _read_image(char *); void _read_res_image(char *filename); int _file_size(char *); void _get_args(int argc, char **argv); void _create_display_image(int wl, int ww); void _create_display_image_of_n(int wl, int ww, int num); void byte_swap_short(short *in, int width,int height); unsigned char win_proc(int value, int level, int width); void vol2mip(int num, int depth, int wl, int ww); int win_height, Height; int win_width, Width; int Slice; int n_slice=0;//n_sliceは山绩しているスライス戎规 int offset,huoffset; int wlevel, wwidth,start_slice, num_of_slice,orgwl,orgww; int hustep=20; int swap=1; int slabdepth=10; //MIP山绩脱スラブ更 double Scale; GLenum doubleBuffer; struct stat stat_buf, stat_buf2; void _read_image(char *filename){ int i,j; FILE *fp; doubleBuffer = GL_TRUE; if((fp=fopen(filename,"rb"))==NULL){ printf("Error:Can't Read File\n"); exit(-1); } fseek(fp,(long)offset,0); fread(ctdata,sizeof(short),Width*Height*Slice,fp); fclose(fp); printf("Filename: %s\n",filename); } void _read_res_image(char *filename){ int i,j; FILE *fp; if((fp=fopen(filename,"rb"))==NULL){ printf("Error:Can't Read File\n"); exit(-1); } fseek(fp,(long)offset,0); fread(resimage,sizeof(char),Width*Height*Slice,fp); fclose(fp); printf("Filename: %s\n",filename); } void _GL_init(void){ glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel(GL_FLAT); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); } void _GL_display(void){ glClear(GL_COLOR_BUFFER_BIT); glRasterPos2i(0,win_height); glPixelZoom((double)win_width/(double)Width, -(double)win_height/(double)Height); glDrawPixels(Width,Height,GL_LUMINANCE,GL_UNSIGNED_BYTE,image); glutSwapBuffers(); /* glFlush(); */ } void _GL_reshape(int w, int h){ win_height=h; win_width=w; glViewport(0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, (GLdouble) w, 0.0, (GLdouble) h); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void _get_args(int argc, char **argv) { if(8 != argc){ fprintf(stderr,USAGE); exit(1); } Scale =1.0; offset = 0; stat(argv[1],&stat_buf); stat(argv[7],&stat_buf2); fname = argv[1]; Width = atoi(argv[2]); printf("\nW = %d,", Width); Height = atoi(argv[3]); printf("H = %d,", Height); wlevel = atoi(argv[4]); printf("WL = %d,", wlevel);orgwl=wlevel; wwidth = atoi(argv[5]); printf("WW = %d,", wwidth);orgww=wwidth; // huoffset = atoi(argv[6]); printf("\nHU offset = %d,", huoffset); // offset = atoi(argv[7]); printf("header size[byte] = %d,", offset); huoffset = 0; offset = 0; swap = strcmp("swap", argv[6]); //printf("swap = %d,", swap); resfname=argv[7]; Slice = stat_buf.st_size/Width/Height/sizeof(short); printf("\n# of slice = %d,", Slice); printf("\n\n# of Source CT and Result file : %d, %d\n\n", Slice, stat_buf2.st_size/Width/Height); if((stat_buf.st_size/2) != stat_buf2.st_size){ printf("The result file may not match to the source CT file, because the # of slice is different each other\n\n"); exit(1); } // slabdepth = atoi(argv[9]);printf("Slab depth to MIP [slices] = %d,", slabdepth); /* Scale = atof(argv[4]); printf("Zoom = %f\n",Scale);*/ } static void Key(unsigned char key, int x, int y) { int i; (void) x; (void) y; switch (key) { case 27: exit(1); case 'd': if(wlevel<=HUmax+hustep+1){ wlevel+=hustep; } printf("(Window Level, Window Width, # of slice)=(%d, %d, %d)\n",wlevel, wwidth, n_slice+1); _create_display_image_of_n(wlevel,wwidth,n_slice); glutPostRedisplay(); return; case 'a': if(wlevel>=HUmin-hustep-1){ wlevel-=hustep; } printf("(Window Level, Window Width, # of slice)=(%d, %d, %d)\n",wlevel, wwidth, n_slice+1); _create_display_image_of_n(wlevel,wwidth,n_slice); glutPostRedisplay(); return; case 's': if(wwidth<=2*HUmax+hustep+1){ wwidth+=hustep; } printf("(Window Level, Window Width, # of slice)=(%d, %d, %d)\n",wlevel, wwidth, n_slice+1); _create_display_image_of_n(wlevel,wwidth,n_slice); glutPostRedisplay(); return; case 'x': if(wwidth>=-hustep-1){ wwidth-=hustep; } printf("(Window Level, Window Width, # of slice)=(%d, %d, %d)\n",wlevel, wwidth, n_slice+1); _create_display_image_of_n(wlevel,wwidth,n_slice); glutPostRedisplay(); return; case 'f': hustep+=1;printf("Changing the HU step for key tapping in window processing: %d\n",hustep); return; case 'v': hustep-=1;printf("Changing the HU step for key tapping in window processing: %d\n",hustep); return; case 'n': if(n_slice0){n_slice-=1;}printf("The slice #: %d\n",n_slice+1); // _create_display_image_of_n(wlevel,wwidth,n_slice); vol2mip(n_slice, slabdepth, wlevel, wwidth); glutPostRedisplay(); return; case 'B': n_slice=0;printf("The slice #: %d\n",n_slice+1); vol2mip(n_slice, slabdepth, wlevel, wwidth); glutPostRedisplay(); return; case '<': if(slabdepth>1){slabdepth-=1;}printf("the slab depth: %d\n",slabdepth); vol2mip(n_slice, slabdepth, wlevel, wwidth); glutPostRedisplay(); return; case '>': if(slabdepth0){n_slice-=1;}printf("The slice #: %d\n",n_slice+1); _create_display_image_of_n(wlevel,wwidth,n_slice); glutPostRedisplay(); return; case 'e': wwidth=orgww; wlevel=orgwl;n_slice=Slice-1; printf("Reset the Window Level & Width and jump to end slice.\n(Window Level, Window Width, # of slice)=(%d, %d, %d)\n",wlevel, wwidth, n_slice+1); _create_display_image_of_n(wlevel,wwidth,n_slice); glutPostRedisplay(); return; case 'w': n_slice=Slice-1; printf("Jump to end slice.\n(Window Level, Window Width, # of slice)=(%d, %d, %d)\n",wlevel, wwidth, n_slice+1); _create_display_image_of_n(wlevel,wwidth,n_slice); glutPostRedisplay(); return; case 'l': wwidth=CTpulWW; wlevel=CTpulWL; printf("CT: Pulmonary Setting\n(Window Level, Window Width, # of slice)=(%d, %d, %d)\n",wlevel, wwidth, n_slice+1); _create_display_image_of_n(wlevel,wwidth,n_slice); glutPostRedisplay(); return; case 'k': wwidth=CTabdWW; wlevel=CTabdWL; printf("CT: Abdominal Setting\n(Window Level, Window Width, # of slice)=(%d, %d, %d)\n",wlevel, wwidth, n_slice+1); _create_display_image_of_n(wlevel,wwidth,n_slice); glutPostRedisplay(); return; case 'j': wwidth=CTbonWW; wlevel=CTbonWL; printf("CT: Bone Setting\n(Window Level, Window Width, # of slice)=(%d, %d, %d)\n",wlevel, wwidth, n_slice+1); _create_display_image_of_n(wlevel,wwidth,n_slice); glutPostRedisplay(); return; case 'h': wwidth=CTbraWW; wlevel=CTbraWL; printf("CT: Brain Setting\n(Window Level, Window Width, # of slice)=(%d, %d, %d)\n",wlevel, wwidth, n_slice+1); _create_display_image_of_n(wlevel,wwidth,n_slice); glutPostRedisplay(); return; case 'p': printf("\n\nFile information: %s\n", fname); printf("W = %d,", Width); printf("H = %d,", Height); printf("WL = %d,", wlevel); printf("WW = %d\n", wwidth); printf("HU offset = %d,", huoffset); printf("header size[byte] = %d\n", offset); printf(" # of slice = %d, ", Slice); printf("Slab depth to MIP [slices] = %d\n\n", slabdepth); printf("\nResult File name: %s\n", resfname); return; case 'q': exit(1); default: return; } } static void Mouse(int button, int state, int mouseX, int mouseY) { if (state != GLUT_DOWN) return; printf("(x,y, # of slice) = (%d,%d, %d) HU = %d\n",mouseX,mouseY, n_slice+1,ctdata[n_slice*Width*Height + mouseY * Width + mouseX]); } unsigned char win_proc(int value, int level, int width) { int i; if(value>level+width/2){ return 255; } if(value>8; hi = hi & 0x00ff; in[i]=low|hi; } } void _create_display_image(int wl, int ww) { int i,j; for(i=0;imaximg[j]){ maximg[j]=ctdata[i]; } } } for(i=0;i #include #include //## for Mac/OS //## use GLUT/glut.h and use -framework OpenGL -framework GLUT -framework Foundation to compi[#define掕悢] USAGEut.h> //## for linux and Widows //## use MesaGL and GLUT //#include #define USAGE "Usages :\n\ contestview [filename][width][height][wl][ww][(no)swap][result filename]\n\ \n\ [comments]\n\ filename\t: Image data you desire G璆璆 HUmax: Image width [# of pixel]\n\ height\t\t: Image height [# of pixel]\n\ wl\t\t: Window level to display [-3000, 3000]\n\ ww\t\t: Window width to display [0, 6000]\n\ (no)swap\t: swap the file for little/big endian. Indicate noswap or swap.\n\ result f[#define掕悢] HUmaxbel file in unsigned char format\n\n\ [CONTEST USER]\n\ R\t: Display contour \n\ [ / ] \t: slice # and contour +/-\n\ [KEY ASSIGN]\n\ a/d\t: -/+ WL\n\ x/s\t: -/+ WW\n\ n/b\t: snof $ump to start/end\n\ f/v\t: -/+ step [dG璆璆y~ HUmin\t: -/+ MIP depth [default: 10 images]\n\ r\t: back to start slice and reset WL/WW\n\ e\t: jump to end slice and reset WL/WW\n\ l\t: CT pulmonary [WL WW]=[-595, 842]\n\ k\t: CT abdomen [WL WW]=[ 40, 350]\n\ j\t: CT bone [WL WW]=[ 300,1500]\n\[#define掕悢] HUminWL WW]=[ 50, 100]\n\ q\t: quit\n\ \n" #define HUmax 3000 #define HUmin -3000 #define CTpulWL -595 #define CTpulWW 842 #define CTabdWL 40 #define CTabdWW 40 #define CTbonWW 1500 #define CTbraWL 50 #define CTG璆璆 CTpulWL Scale 1.00 */ short *ctdata,*maximg, *minimg; unsigned char *image, *resimage; char *fname, *resfname; void _init(void); void _display(void); void _reshape(int,int); void _read_image(char *); void _read_res_image(char *filename); int _file_size[#define掕悢] CTpulWLgs(int argc, char **argv); void _create_display_image(int wl, int ww); void _create_display_image_of_n(int wl, int ww, int num); void byte_swap_short(short *in, D5{ight); unsigned char win_proc(int value, int level, int wiG璆璆 CTpulWWnum, int depth, int wl, int ww); int win_height, Height; int win_width, Width; int Slice; int n_slice=0;//n_sliceは山绩しているスライス戎规 int offset,huoffset; int wlevel, wwidth,start_slice, num_of_slice,orgwl,orgww; int hustep=20; int swap=1; i[#define掕悢] CTpulWW山绩脱スラブ更 double Scale; GLenum doubleBuffer; struct stat stat_buf, stat_buf2; void _read_image(char *filename){ int i,j; FILE *fp; T5{= GL_TRUE; if((fp=fopen(filename,"rb"))==NULL){ printf("Error:Can'G璆璆 CTabdWLit(-1); } fseek(fp,(long)offset,0); fread(ctdata,sizeof(short),Width*Height*Slice,fp); fclose(fp); printf("Filename: %s\n",filename); } void _read_res_image(char *filename){ int i,j; FILE *fp; if((fp=fopen(filename,[#define掕悢] CTabdWLintf("Error:Can't Read File\n"); exit(-1); } fseek(fp,(long)offset,0); fread(resimage,sizeof(char),Width*Hei d5{ fclose(fp); printf("Filename: %s\n",filename); } void _GL_init(void){ glClearColorG璆璆 CTabdWW glShadeModel(GL_FLAT); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); } void _GL_display(void){ glClear(GL_COLOR_BUFFER_BIT); glRasterPos2i(0,win_height); glPixelZoom((double)win_width/(double)Width, -(double)win_height/(double)Hei[#define掕悢] CTabdWW(Width,Height,GL_LUMINANCE,GL_UNSIGNED_BYTE,image); glutSwapBuffers(); /* glFlush(); */ } void _G t5{ int h){ win_height=h; win_width=w; glViewport(0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PG璆璆 CTbonWLntity(); gluOrtho2D(0.0, (GLdouble) w, 0.0, (GLdouble) h); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void _get_args(int argc, char **argv) { if(8 != argc){ fprintf(stderr,USAGE); exit(1); } Scale =1.0; offset = 0; s[#define掕悢] CTbonWL; stat(argv[7],&stat_buf2); fname = argv[1]; Width = atoi(argv[2]); printf("\nW = %d,", Width5{oi(argv[3]); printf("H = %d,", Height); wlevel = atoi(argv[4]); printf("WL = %d,", wlevel);orgwl=wlevel; wwidth = atoi(aG璆璆 CTbonWWd,", wwidth);orgww=wwidth; // huoffset = atoi(argv[6]); printf("\nHU offset = %d,", huoffset); // offset = atoi(argv[7]); printf("header size[byte] = %d,", offset); huoffset = 0; offset = 0; swap = strcmp("swap", argv[6]); //printf("swap = %d,[#define掕悢] CTbonWWgv[7]; Slice = stat_buf.st_size/Width/Height/sizeof(short); printf("\n# of slic5{; printf("\n\n# of Source CT and Result file : %d, %d\n\n", Slice, stat_buf2.st_size/Width/Height); if((stat_buf.st_size/2) != stat_bufG璆璆  CTbraWLhe result file may not match to the source CT file, because the # of slice is different each other\n\n"); exit(1); } // slabdepth = atoi(argv[9]);printf("Slab depth to MIP [slices] = %d,", slabdepth); /* Scale = atof(argv[4]); printf("Zoom = [#define掕悢] CTbraWLtic void Key(unsigned char key, int x, int y) { int i; (void5{ y; switch (key) { case 27: exit(1); case 'd': if(wlevel<=HUmax+hustep+1){ wlevel+=hustep; } printf("(Window Level, Window WidtG璆璆& CTbraWW %d)\n",wlevel, wwidth, n_slice+1); _create_display_image_of_n(wlevel,wwidth,n_slice); glutPostRedisplay(); return; case 'a': if(wlevel>=HUmin-hustep-1){ wlevel-=hustep; } printf("(Window Level, Window Width, # of slice)=(%d,[#define掕悢] CTbraWWidth, n_slice+1); _create_display_image_of_n(wle5{ce); glutPostRedisplay(); return; case 's': if(wwidth<=2*HUmax+hustep+1){ wwidth+=hustep; } printf("(Window Level, Window Width, # of slice)=(%d, %d, %G璆璆4;ctdatan_slice+1); _create_display_image_of_n(wlevel,wwidth,n_slice); glutPostRedisplay(); return; case 'x': if(wwidth>=-hustep-1){ wwidth-=hustep; } printf("(Window Level, Window Width, # of slice)=(%d, %d, %d)\n",wlevel, wwidth, n_sli [僌儘乕僶儖曄悢] short*::ctdatan(wlevel,wwidth,n_slic噧{嚩display(); return; case 'f': hustep+=1;printf("Changing the HU step for key tapping in window processing: %d\n",hustep); return; case 'v': hustep-=1;printf("Changins2djmaximgtapping in window processing: %d\n",hustep); return; case 'n': if(n_slice0){n_slice-=1;}printf("The ss2lrminimg1); // _create_display_image_of_n(wlevel,wwidth,n_slice); vol2mip(n_slice, slabdepth, wlevel, wwidth); glutPostRedisplay(); return; case 'B': n_slice=0;printf("The slice #: %d\n",n_slice+1); vol2mip(n_slice, slabdepth, wlevel, wwi [僌儘乕僶儖曄悢] short*::minimgreturn; case '<': if(slabdepth>1){slabdepth-=1;}printf("the slab depth: %d\n",slabdepth); vol2mip(n_slice, slabdepth, wlevel, wwidth); glutPostRedisplay(); return; case '>': if(slabdepth0){n_slice-=1;}printf("The slice #: %d\n",n_slice+1); _create_display_image_of_n(wlevel,wwidth,n_slice); glutPostRedisplay(); return; case 'e': wwidth=orgww; wlevel=orgwl;n_slice=Sl!5{"Reset th[僌儘乕僶儖曄悢] char*::fname to end slice.\n(Window Level, Window Width, # of slice)=(%d, %d, %d)\n",wlevel, wwidth, n_slice+1); _create_display_image_of_n(wlevel,wwidth,n_slice); glutPostRedisplay(); return; case 'w': n_slice=Slice-1; pris2resfnamen(Window Level, Window Width, # of slice)=(%d, %d, %d)\n",wlevel, wwidth, n_slice+1); _create_display_image_of_n(wlevel,wwidth,n_slice); glutPostRedisplay(); return; case 'l': wwidth=CTpulWW; wle#$5{rintf("CT: Pulmonary Sett![僌儘乕僶儖曄悢] char*::resfname# of slice)=(%d, %d, %d)\n",wlevel, wwidth, n_slice+1); _create_display_image_of_n(wlevel,wwidth,n_slice); glutPostRedisplay(); return; case 'k': wwidth=CTabdWW; wlevel=CTabdWL; printf("CT: Abdominal Setting\ns2_init Width, # of slice)=(%d, %d, %d)\n",wlevel, wwidth, n_slice+1); _create_display_image_of_n(wlevel,wwidth,n_slice); glutPostRedisplay(); return; case 'j': wwidth=CTbonWW; wlevel=CTb%45{CT: Bone Setting\n(Window Level, Window W[娭悢] void ::_init(void) %d)\n",wlevel, wwidth, n_slice+1); _create_display_image_of_n(wlevel,wwidth,n_slice); glutPostRedisplay(); return; case 'h': wwidth=CTbraWW; wlevel=CTbraWL; printf("CT: Brain Setting\n(Window Level, Window Width, # o迃pO_display,wlevel, wwidth, n_slice+1); _create_display_image_of_n(wlevel,wwidth,n_slice); glutPostRedisplay(); return; case 'p': printf("\n\nFile information: %s\n", fnam'D5{= %d,", Width); printf("H = %d,", Height); printf("WL[娭悢] void ::_display(void)W = %d\n", wwidth); printf("HU offset = %d,", huoffset); printf("header size[byte] = %d\n", offset); printf(" # of slice = %d, ", Slice); printf("Slab depth to MIP [slices] = %d\n\n", slabdepth); printf("\nResult File 迃pO_reshape return; case 'q': exit(1); default: return; } } static void Mouse(int button, int state, int mouseX, int mouseY) { )T5{GLUT_DOWN) return; printf("(x,y, # of slice) = (%d,%d, %d) HU = [娭悢] void ::_reshape(int,int)tdata[n_slice*Width*Height + mouseY * Width + mouseX]); } unsigned char win_proc(int value, int level, int width) { int i; if(value>level+width/2){ return 255; } if(value>8; hi = hi & 0x00ff; in[i]=low|hi; } } void _create_display_image(int wl, int ww) { int i,j; for(i=0;imaximg[j]){ maximg[j]=ctdata[i]; } } } for(i=0;i[娭悢] void ::byte_swap_short(short *in, int width,int height)”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”劣”迃pOwin_proc劣”劣”劣”劣”劣”劣”劣”劣9詍inimg; case '<': if(slabdepth>1){slabdepth-=1;}printf("the slab depth: %d\n",slabdepth); vol2mip(n_slice, slabdepth, wlevel, wwidth); glutPostRedisplay(); return; case '>': if(slabdepth<@[娭悢] unsigned char ::win_proc(int value, int level, int width)vol2mip(n_slice, slabdepth, wlevel, wwidth); glutPostRedisplay(); return; case 't': n_slice=0; printf("Back to Top Slice.\n(Window Level, Window Width, # of slice)=(%d, %d, %d)\n迃pO!)vol2mipce+1); '[僌儘;9[娭悢] void ::vol2mip(int num, int depth, int wl, int ww)迃pOQX win_height![僌儘乕僶儖曄悢] int::win_heights2Height[僌儘乕僶儖曄悢] int::Heights2 win_width [僌儘乕僶儖曄悢] int::win_widths2Width[僌儘乕僶儖曄悢] int::Widths2Slice[僌儘乕僶儖曄悢] int::Slices2n_slice[僌儘乕僶儖曄悢] int::n_slices2offset[僌儘乕僶儖曄悢] int::offsets2huoffset[僌儘乕僶儖曄悢] int::huoffsets2wlevel[僌儘乕僶儖曄悢] int::wlevelNts2  wwidth[僌儘乕僶儖曄悢] int::wwidths2  start_slice"[僌儘乕僶儖曄悢] int::start_slices2   num_of_slice#[僌儘乕僶儖曄悢] int::num_of_slices2  +orgwl[僌儘乕僶儖曄悢] int::orgwls2 , 1orgww[僌儘乕僶儖曄悢] int::orgwws2 2 7hustep[僌儘乕僶儖曄悢] int::husteps2 = Cswap[僌儘乕僶儖曄悢] int::swaps2 L P slabdepth [僌儘乕僶儖曄悢] int::slabdepths2 X aScale[僌儘乕僶儖曄悢] double::Scales2  doubleBuffer&[僌儘乕僶儖曄悢] GLenum::doubleBuffers2 _read_image)[娭悢] void ::_read_image(char *filename)迃pO _read_res_image-[娭悢] void ::_read_res_image(char *filename)迃pO  "_GL_init[娭悢] void ::_GL_init(void)迃pO G O _GL_display[娭悢] void ::_GL_display(void)迃pO _GL_reshape'[娭悢] void ::_GL_reshape(int w, int h)迃pO  _get_argsot.[娭悢] void ::_get_args(int argc, char **argv)迃pO Key9[娭悢] static void ::Key(unsigned char key, int x, int y)迃pOMouseI[娭悢] static void ::Mouse(int button, int state, int mouseX, int mouseY)迃pO))win_proc@[娭悢] unsigned char ::win_proc(int value, int level, int width)迃pO**byte_swap_short>[娭悢] void ::byte_swap_short(short *in, int width,int height)迃pO++_create_display_image3[娭悢] void ::_create_display_image(int wl, int ww)迃pO--1vol2mip9[娭悢] void ::vol2mip(int num, int depth, int wl, int ww)迃pO--_create_display_image_of_nA[娭悢] void ::_create_display_image_of_n(int wl, int ww, int num)迃pO//main([娭悢] int ::main(int argc, char **argv)迃pO161:@   @ @ @ @CP.冭傝閜\FMMIDMMKP +*MIMIKAKI identifier data for external readmi Document Preference