2025年4月14日 星期一 乙巳(蛇)年 正月十五 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > C语言

C语言实现编辑画图程序的方法

时间:01-02来源:作者:点击数:62

1.C语言有丰富的数据结构和运算符。包含了各种数据结构,如整型、数组类型、指针类型和联合类型等,用来实现各种数据结构的运算。以下是小编为大家搜索整理的C语言如何实现画图教程,希望能给大家带来帮助!

2.程序中定义了几个特殊键:

"V”:画笔提起

"W”:开始画图

"R”:开始擦图

"S”:当前图形存入文件

"E”:调出已有文件

"C”:画圆

程序一运行,屏幕上出现一个黄色的边框来设定画图的.区域,区域中间出现提起的画笔符号 ,当按下”W“键时,画笔符号变为 ,此时可移动方向键(上、下、左、右、左上、左下、右上、右下)来画图;当按下”R“键时,画笔符号变为 ,此时可移动方向键来擦图;在画图过程中,按下“C”键,可画出一个半径为20个象素点的圆;当结束画图时,按下“S”键,将画好的图形存盘;按下“E”键可调出已有的图形进行编辑。

3.源程序清单

  • # include "graphics.h"
  • # include "stdio.h"
  • # include "fcntl.h"
  • # include "stdlib.h"
  • main()
  • void save(),load();
  • void *wg,*rg,*vg,*fy;
  • int driver,mode;
  • int c=RED;
  • int x=320,y=225;
  • int x1,y1,x2,y2;
  • int k,k1,k2;
  • /* initialize grapher */
  • detectgraph(&driver,&mode);
  • initgraph(&driver,&mode,"c:\tc");
  • /* write the pen */
  • bar(200,10,206,16);
  • line(203,7,200,10);
  • line(203,7,206,10);
  • line(243,7,240,16);
  • line(243,7,246,16);
  • line(283,7,280,10);
  • line(283,7,286,10);
  • line(283,7,283,16);
  • /* save the pen */
  • wg=malloc(imagesize(200,7,206,16));
  • rg=malloc(imagesize(240,7,246,16));
  • vg=malloc(imagesize(280,7,286,16));
  • fy=malloc(imagesize(200,7,206,16));
  • getimage(200,7,206,16,wg);
  • getimage(240,7,246,16,rg);
  • getimage(280,7,286,16,vg);
  • cleardevice();
  • /* write the box */
  • setcolor(YELLOW);
  • rectangle(4,19,637,447);
  • x1=x-3;
  • y1=y+1;
  • x2=x+3;
  • y2=y+10;
  • getimage(x1,y1,x2,y2,fy);
  • putimage(x1,y1,vg,XOR_PUT);
  • /* receive the command */
  • for (;;)
  • while (bioskey(1)==0);
  • k=bioskey(0);
  • putimage(x1,y1,fy,AND_PUT);
  • if (((k&0x00ff)|0x00)==0)
  • k1=k&0xff?0:k>>8; /* k1 is the specialkey value */
  • else
  • k2=k&0x00ff; /* k2 is the non-specialkey value */
  • if (((k&0x00ff)|0x00)==0) /* Special key */
  • switch(k1)
  • case 45:
  • restorecrtmode();
  • exit(0);
  • case 72:
  • if (y>20)
  • y=y-1;
  • break;
  • case 75:
  • if (x>5)
  • x=x-1;
  • break;
  • case 77:
  • if (x<636)
  • x=x+1;
  • break;
  • case 80:
  • if (y<446)
  • y=y+1;
  • break;
  • case 71:
  • if ((x>5)&&(y>20))
  • x=x-1;
  • y=y-1;
  • break;
  • case 79:
  • if ((x>5)&&(y<446))
  • x=x-1;
  • y=y+1;
  • break;
  • case 73:
  • if ((x<636)&&(y>20))
  • x=x+1;
  • y=y-1;
  • break;
  • case 81:
  • if ((x<636)&&(y<446))
  • x=x+1;
  • y=y+1;
  • break;
  • x1=x-3;
  • y1=y+1;
  • x2=x+3;
  • y2=y+10;
  • getimage(x1,y1,x2,y2,fy);
  • /* non-special key */
  • switch(k2)
  • case 118: /* 'v' */
  • case 86: /* 'V' */
  • putimage(x1,y1,vg,OR_PUT);
  • break;
  • case 119: /* 'w' */
  • case 87: /* 'W' */
  • putimage(x1,y1,wg,OR_PUT);
  • putpixel(x,y,c);
  • break;
  • case 114: /* 'r' */
  • case 82: /* 'R' */
  • putimage(x1,y1,rg,OR_PUT);
  • putpixel(x,y,BLACK);
  • break;
  • case 115: /* 's' */
  • case 83: /* 'S' */
  • save("pic.dat");
  • break;
  • case 101: /* 'e' */
  • case 69: /* 'E' */
  • load("pic.dat");
  • break;
  • case 99: /*'c'*/
  • case 67: /*'C'*/
  • setcolor(RED);
  • circle(x,y,20);
  • break;
  • default:continue;
  • /* function for screen picture save
  • */
  • void save(char *fname)
  • FILE *fp;
  • int i;
  • register long j;
  • char far *ptr;
  • fp=fopen(fname,"wb");
  • for(i=0;i<4;i++)
  • outportb(0x3CE,4);
  • outportb(0x3CF,i);
  • ptr=(char far *) 0xA0000000L;
  • for (j=0;j<38400L;j++)
  • putc(*ptr,fp);
  • ptr++;
  • fclose(fp);
  • outportb(0x3CF,0);
  • /* function for screen picture display
  • */
  • void load(char *fname)
  • FILE *fp;
  • register int i;
  • int k4=1;
  • register long j;
  • char far *ptr;
  • fp=fopen(fname,"rb");
  • for (i=0;i<4;i++)
  • outportb(0x3C4,2);
  • outportb(0x3C5,k4);
  • ptr=(char far *)0xA0000000L;
  • for (j=0;j<38400L;j++)
  • *ptr=getc(fp);
  • ptr++;
  • k4*=2;
  • fclose(fp);
  • outportb(0x3C5,0xF);

4.结束语

该程序在Turbo C 2.0环境下运行通过,使用效果良好。可以根据具体需要,对该程序进行扩充,以增加绘图功能。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门