已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
图形旋转的C语言源程序/*/* CONVOLVE.C - Turbo C 2.0 implementation of image convolution */* - by Wesley G. Faler. All code is as is. There */* is NO copyright. Use this code as you will, and if you make */* money at it, good for you. */*/#include#include#include#include#includeint load_cut(char *fname);int load_convolution_matrix(char *fname);int convolve_image(void);int swap_pictures(void);int minx,maxx,miny,maxy;int LOADPAGE=0;int ENHANCEPAGE=1;int *cmat, *pmat, *vmat;int cmx,cmy,cmnum;struct palettetype palette,newpal;int driver,mode;int cleancut=-1;int init_graphics(void)driver=DETECT; mode=0;detectgraph(&driver,&mode);if(driver=VGA) mode=VGAMED;initgraph(&driver,&mode,);getpalette(&palette);getpalette(&newpal);int cleanup_image(void)int i,j,num,x,y,k;if(cleancut0) return;setactivepage(LOADPAGE);setvisualpage(ENHANCEPAGE);for(x=minx;xmaxx;x+) for(y=miny;ymaxy;y+) if(getpixel(x,y)!=0) num=-1;else num=0;for(j=-1;j2;j+) for(i=-1;icleancut) k=getpixel(x,y);setactivepage(ENHANCEPAGE);putpixel(x,y,k);setactivepage(LOADPAGE);k=ENHANCEPAGE; ENHANCEPAGE=LOADPAGE; LOADPAGE=k;void show_test_image(void)int i;minx=cmx; miny=cmy;maxx=100+minx; maxy=100+miny;setcolor(1);moveto(minx,miny);randomize();for(i=0;i20;i+)lineto(random(100)+minx,random(100)+miny);for(i=0;i8) cleancut=8;init_graphics();setactivepage(1); cleardevice();setactivepage(0); cleardevice();setactivepage(LOADPAGE); setvisualpage(LOADPAGE);if(flag) load_cut(fname);else show_test_image();cleanup_image();setvisualpage(ENHANCEPAGE);convolve_image();swap_pictures();restorecrtmode();int toggle_colors(char c)c=tolower(c);c=c-a;if(c=palette.size) return 0;newpal.colorsc= palette.colorsc-newpal.colorsc;setpalette(c,newpal.colorsc);return 1;int swap_pictures(void)int mode=0;char a;setvisualpage(LOADPAGE);for(;) a=getch();if(a=27) return;if(toggle_colors(a) continue;if(mode=0) setvisualpage(ENHANCEPAGE);if(mode=1) setvisualpage(LOADPAGE);mode=1-mode;int convolve_image(void)int i,j,k,nval;int *vx, *vy, *c;int colmax,offset,end,midy;char *lines=NULL;char *temp=NULL;offset=-minx+(cmx/2);end=cmy-1; midy=cmy/2;lines=(char *)malloc(cmy*sizeof(char *);for(i=0;icmy;i+) linesi=(char *)malloc(sizeof(char)*(maxx-minx+cmx+1);setactivepage(LOADPAGE);for(j=-cmy/2;jcmy/2;j+) for(i=minx-cmx/2;i(maxx+cmx/2+1);i+) linesj+midyi+offset=getpixel(i,j+miny);colmax=getmaxcolor();for(j=miny;jmaxy;j+) setactivepage(LOADPAGE);for(i=j+cmy/2,k=minx-cmx/2,nval=maxx+cmx/2;knval;k+)linesendk+offset=getpixel(k,i);for(i=minx;imaxx;i+) /* Load & multiply neighbors into matrix */setactivepage(LOADPAGE);vx=vmat; vy=vmat+1; c=cmat; nval=0;for(k=0;kcmnum;k+) if(*c) nval+= lines(*vy)+midyi+(*vx)+offset*(*c);/* if(*c) nval+= getpixel(i+(*vx),j+(*vy) * (*c); */c+;vx+=2; vy+=2;/* Cut off values too high or too low */if(nvalcolmax) nval=colmax;/* Place new pixel value */setactivepage(ENHANCEPAGE);putpixel(i,j,nval);if(kbhit() getch(); break; /* rotate line pointers */temp=lines0;for(i=1;icmy;i+) linesi-1=linesi;linesend=temp;for(i=0;icmy;i+) if(linesi!=NULL) free(linesi);if(lines!=NULL) free(lines);return;int build_offset_vectors(void)int *t;int il,im,jl,jm,i,j;il=-cmx/2; im=cmx+il;jl=-cmy/2; jm=cmy+jl;t=vmat;for(j=jl;jjm;j+) for(i=il;iim;i+) *t+=i; *t+=j;int load_convolution_matrix(char *fname)/* Layout of matrix file:#x #yx0y0 x1y0 . xny1. . . .x0ym x1ym . xnym*/FILE *mf;int *t;int i,j,im,jm;if( (mf=fopen(fname,rt)=NULL ) printf(Cannot load matrix file.n);abort();fscanf(mf,%d%d,&im,&jm);if( (im&1)=0 | (jm&1)=0 ) printf(Convolution matrix MUST have a center point.n);abort();if( (cmat=(int *)calloc(im*jm,sizeof(int)=NULL ) printf(Unable to calloc convolution matrix.n);abort();if( (vmat=(int *)calloc(2*im*jm,sizeof(int)=NULL ) printf(Unable to calloc offset vector matrix.n);abort();cmx=im; cmy=jm; cmnum=im*jm;t=cmat;for(j=0;jjm;j+) for(i=0;i(getmaxy()-cmy) maxy=getmaxy()-cmy;height=maxy-yl;getw(fp);y=yl-1;for(sp=st,n=0;nheight;n+) stp=getw(fp);for(sp=st,spend=st+stp;spspend;) *sp+=getc(fp);sp=st; spend
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机器学习在银行运营效率提升中的作用-第4篇
- 2026北京明天幼稚集团招聘备考题库完整参考答案详解
- 2026浙江温州市平阳县长汽机动车驾驶员考试服务有限责任公司招聘编外人员(劳务派遣)3人备考题库及参考答案详解一套
- 2025内蒙古煤炭建设工程(集团)总公司内部遴选工作人员的竞聘2人备考题库及完整答案详解
- 2025广东深圳市龙华区平安建设中心招聘专业聘用人员1人备考题库及答案详解1套
- 2025云南盛佳新材料有限责任公司招聘9人备考题库及参考答案详解
- 2026中交集团纪委第一办案中心社会招聘5人备考题库及参考答案详解
- 2026中国联通苍南县分公司招聘2人备考题库(浙江)及一套完整答案详解
- 2025江西南昌安义县工投商业管理有限公司第四批招聘1人备考题库及一套参考答案详解
- 2026上海世外教育附属崇明区汇萌幼儿园系统内公开招聘教师(含答案详解)
- 电子技术基础(模拟电子电路)
- 教科版九年级物理上册期末测试卷(1套)
- 内蒙古自治区通辽市霍林郭勒市2024届中考语文最后一模试卷含解析
- 复方蒲公英注射液的药代动力学研究
- 单纯疱疹病毒感染教学演示课件
- 广东省中山市2023-2024学年四年级上学期期末数学试卷
- 变配电室送电施工方案
- 地质勘查现场安全风险管控清单
- 松下panasonic-经销商传感器培训
- 中医舌、脉象的辨识与临床应用课件
- 建设工程项目施工风险管理课件
评论
0/150
提交评论