教程中国
PHOTOSHOP CS9.0中文版 MAYA 8.5 FOR WINDOWS Corel Painter v9.0 Flash MX2004 中文版 Illustrator cs2 中文版
VC++6.0含sp6 中英文版 VB6.0 +sp6 简体中文版 Borland Delphi 7汉化版 MSDN for vb6.0中文版 Visual Studio 2005简体
教程中国下属 文件存储共享专家BIBIDU.COM 提供大型软件,教材,源码,电影,音乐,图书等下载 更多精品请点此进入
  您目前所在位置: 教程中国 >> C >> 编程实例 >> 图形旋转的C语言源程序 RSS订阅
图形旋转的C语言源程序
图形旋转的C语言源程序(1)
教程(视频,书籍)下载:  ASP.NET AutoCAD 数据库 C# ASP java photoshop 网页设计 delphi 3dmax Flash C++ VB 张孝祥 实例   更多请进入BIBIDU搜索
IT搜索引擎   
*****************************************************************/
/* 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<slib.h>
#include<sio.h>
#include<graphics.h>
#include<alloc.h>
#include<ctype.h>

int load_cut(char *fname);
int load_convolution_maix(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;

suct 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(cleancut<0) return;
setactivepage(LOADPAGE);
setvisualpage(ENHANCEPAGE);
for(x=minx;x<maxx;x ) {
for(y=miny;y<maxy;y ) {
if(getpixel(x,y)!=0) num=-1;
else num=0;
for(j=-1;j<2;j ) {
for(i=-1;i<2;i ) {
if(getpixel(x i,y j)!=0) num ;
}
}
if(num>cleancut) {
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;i<20;i )
lineto(random(100) minx,random(100) miny);
for(i=0;i<10;i )
fillellipse(random(50) 25 minx,random(50) 25 miny,random(25),random(25));
}

main()
{
char fname[50];
int flag=0;

load_convolution_maix("maix.dat");
printf(".CUT file (1) or test image (0)?");
scanf("%d",&flag);
flag= flag? 1:0;
if(flag) {
fflush(sin);
printf("filename to process:");
gets(fname);
}

printf("Delete pixels with x or fewer neighbors. x=");
scanf("%d",&cleancut);
if(cleancut>8) 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<0 || c>=palette.size) return 0;
newpal.colors[c]= palette.colors[c]-newpal.colors[c];
setpalette(c,newpal.colors[c]);
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;i<cmy;i ) lines[i]=(char *)malloc(sizeof(char)*(maxx-minx cmx 1));
setactivepage(LOADPAGE);
for(j=-cmy/2;j<cmy/2;j ) {
for(i=minx-cmx/2;i<(maxx cmx/2 1);i ) {
lines[j midy][i offset]=getpixel(i,j miny);
}
}
colmax=getmaxcolor();
for(j=miny;j<maxy;j ) {
setactivepage(LOADPAGE);
for(i=j cmy/2,k=minx-cmx/2,nval=maxx cmx/2;k<nval;k )
lines[end][k offset]=getpixel(k,i);
for(i=minx;i<maxx;i ) {
/* Load & multiply neighbors into maix */
setactivepage(LOADPAGE);
vx=vmat; vy=vmat 1; c=cmat; nval=0;
for(k=0;k<cmnum;k ) {
if(*c) nval = lines[(*vy) midy][i (*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(nval<0) nval=0;
if(nval>colmax) nval=colmax;
/* Place new pixel value */
setactivepage(ENHANCEPAGE);
putpixel(i,j,nval);
}
if(kbhit()) { getch(); break; }
/* rotate line pointers */
temp=lines[0];
for(i=1;i<cmy;i ) lines[i-1]=lines[i];
lines[end]=temp;
}
for(i=0;i<cmy;i ) {
if(lines[i]!=NULL) free(lines[i]);
}
if(lines!=NULL) {
free(lines);
}
return;
}

int build_offset_vectors(void)

来源:十度教育
作者:
关键字:图形旋转,C语言源程序
发表日期:2006-6-24 20:19:56

网页显示有限 阅读全文请下载本文完整版WORD文档

上一篇:全屏幕模拟时钟的C源程序   下一篇:龟兔赛跑的小游戏


共2页 9 7 [1] [28 :>

2008-11-23 20:11:54
本文的相类似文章
  • 图形旋转的C语言源程序
  • 在学习中进步 在进步中成长 教程中国相随您的成长之路
    华腾联合科技股份有限公司版权所有
    广告联系:Rosibo@163.com