您的当前位置:首页正文

C语言编辑画图程序的技巧

2024-09-27 来源:伴沃教育

  一、使用方法

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

  \"V":画笔提起

  \"W":开始画图

  \"R":开始擦图

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

  \"E":调出已有文件

  \"C":画圆

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

  二、源程序清单

  # 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);

  三、结束语

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

1.

2.

3.

4.

5.

6.

7.

8.

9.

显示全文