




已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年 第十一章 实验十二 传感器的简单使用说课稿 鲁科版选修3-2
- 传感器的基本误差和精度说课稿-2025-2026学年中职专业课-传感器检测技术-电气设备运行与控制-装备制造大类
- 专项法律委托代理服务合同8篇
- 2025劳动合同法律知识库
- 2025德坤劳动合同(普通劳务工)
- 益阳事业单位笔试真题2025
- 渐变工具和油漆桶工具说课稿-2025-2026学年中职专业课-图形图像处理-计算机类-电子与信息大类
- 2025股权质押借款合同范本
- 八年级生物上册 16.3《动物行为的研究》说课稿 (新版)北师大版
- 乌兰察布事业单位笔试真题2025
- 运动会进行课件
- 2025年煤矿企业主要负责人安全生产理论考试笔试试题含答案
- 2025年河南省事业单位面向哈密市和十三师新星市少数民族高校毕业生专项招聘15名考试参考题库及答案解析
- 苗族舞蹈课件
- 煤矿安全规程2025版解读
- 监狱公选面试题库及答案
- 具有法律效应的还款协议书6篇
- 2025年中国铁建集团招聘面试模拟题及答案详解
- 2025年全国企业员工全面质量管理知识竞赛题及参考答案
- 110KV线路断路器控制回路
- 行业资料3东广场地热井招标文件
评论
0/150
提交评论