⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 王大刚--c语言编程宝典--图形函数.htm

📁 初学者的良师益友。其中包括C的全部教程。
💻 HTM
📖 第 1 页 / 共 5 页
字号:
      <BR>函数设置。当选用USER_FILL时, 该函数对填充图模和颜色不作任何改变。 之所 
      <BR>以定义USER_FILL主要因为在获得有关填充信息时用到此项。 <BR>&nbsp;&nbsp;&nbsp; void far 
      setfillpattern(char * upattern,int color); <BR>&nbsp;&nbsp;&nbsp; 
      设置用户定义的填充图模的颜色以供对封闭图形填充。 <BR>&nbsp;&nbsp;&nbsp; 
      其中upattern是一个指向8个字节的指针。这8个字节定义了8x8点阵的图形。 <BR>每个字节的8位二进制数表示水平8点, 8个字节表示8行, 
      然后以此为模型向个封 <BR>闭区域填充。 <BR>&nbsp;&nbsp;&nbsp; void far getfillpattern(char 
      * upattern); <BR>&nbsp;&nbsp;&nbsp; 该函数将用户定义的填充图模存入upattern指针指向的内存区域。 
      <BR>&nbsp;&nbsp;&nbsp; void far getfillsetings(struct fillsettingstype far 
      * fillinfo); <BR>&nbsp;&nbsp;&nbsp; 
      获得现行图模的颜色并将存入结构指针变量fillinfo中。其中fillsettingstype <BR>结构定义如下: 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct 
      fillsettingstype{ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      int pattern;&nbsp; /* 现行填充模式 * / 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      int color;&nbsp;&nbsp;&nbsp; /* 现行填充模式 * / 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }; 
      <BR>&nbsp;&nbsp;&nbsp; 有关图形填充图模的颜色的选择, 请看下面例程。 <BR>&nbsp;&nbsp;&nbsp; 例11: 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp; #include&lt;graphics.h&gt; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp; main(){ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char 
      str[8]={10,20,30,40,50,60,70,80}; /*用户定义图模*/ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int gdriver,gmode,i; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct fillsettingstype 
      save; /*定义一个用来存储填充信息的结构变量*/ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      gdriver=DETECT; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      initgraph(&amp;gdriver,&amp;gmode,"c:\\tc"); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setbkcolor(BLUE); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cleardevice(); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i=0;i&lt;13;i++) 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setcolor(i+3); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      setfillstyle(i,2+i);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 设置填充类型 * 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      bar(100,150,200,50);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*画矩形并填充*/ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      bar3d(300,100,500,200,70,1); /* 画长方体并填充*/ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pieslice(200, 300, 90, 180, 
      90);/*画扇形并填充*/ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      sector(500,300,180,270,200,100);/*画椭圆扇形并填充*/ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      delay(1000);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      /*延时1秒*/ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cleardevice(); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setcolor(14); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setfillpattern(str, RED); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bar(100,150,200,50); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bar3d(300,100,500,200,70,0); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pieslice(200,300,0,360,90); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sector(500,300,0,360,100,50); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getch(); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      getfillsettings(&amp;save);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      /*获得用户定义的填充模式信息*/ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; closegraph(); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; clrscr(); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("The pattern is %d, The 
      color of filling&nbsp; is&nbsp; %d", 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      save.pattern, save.color); /*输出目前填充图模和颜色值*/ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getch(); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp; } <BR>&nbsp;&nbsp;&nbsp; 以上程序运行结束后, 
      在屏幕上显示出现行填充图模和颜色的常数值。 <BR>
      <P>&nbsp;&nbsp;&nbsp; 三、任意封闭图形的填充 <BR>&nbsp;&nbsp;&nbsp; 截止目前为止, 
      我们只能对一些特定形状的封闭图形进行填充, 但还不能对 <BR>任意封闭图形进行填充。为此, TURBO C 提供了一个可对任意封闭图形填充的函 
      <BR>数, 其调用格式如下: <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      void far floodfill(int x, int y, int border); <BR>&nbsp;&nbsp;&nbsp; 其中: 
      x, y为封闭图形内的任意一点。border为边界的颜色, 也就是封闭图 <BR>形轮廓的颜色。调用了该函数后, 
      将用规定的颜色和图模填满整个封闭图形。 <BR>&nbsp;&nbsp;&nbsp; 注意: <BR>&nbsp;&nbsp;&nbsp; 1. 
      如果x或y取在边界上, 则不进行填充。 <BR>&nbsp;&nbsp;&nbsp; 2. 如果不是封闭图形则填充会从没有封闭的地方溢出去, 
      填满其它地方。 <BR>&nbsp;&nbsp;&nbsp; 3. 如果x或y在图形外面, 则填充封闭图形外的屏幕区域。 
      <BR>&nbsp;&nbsp;&nbsp; 4. 由border指定的颜色值必须与图形轮廓的颜色值相同,&nbsp; 但填充色可选任 
      <BR>意颜色。下例是有关floodfill()函数的用法, 该程序填充了bar3d()所画长方体 <BR>中其它两个未填充的面。 
      <BR>&nbsp;&nbsp;&nbsp; 例12: <BR>&nbsp;&nbsp;&nbsp;&nbsp; 
      #include&lt;stdlib.h&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp; 
      #include&lt;graphics.h&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp; main() 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp; { 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int gdriver, 
      gmode; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strct 
      fillsettingstype save; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gdriver=DETECT; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      initgraph(&amp;gdriver, &amp;gmode, ""); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      setbkcolor(BLUE); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cleardevice(); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      setcolor(LIGHTRED); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      setlinestyle(0,0,3); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      setfillstyle(1,14);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      /*设置填充方式*/ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      bar3d(100,200,400,350,200,1); /*画长方体并填充*/ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      floodfill(450,300,LIGHTRED);&nbsp; /*填充长方体另外两个面*/ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      floodfill(250,150, LIGHTRED); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      rectanle(450,400,500,450);&nbsp;&nbsp;&nbsp; /*画一矩形*/ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      floodfill(470,420, LIGHTRED); /*填充矩形*/ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getch(); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; closegraph(); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp; } <BR>
      <P>&nbsp;&nbsp;&nbsp; 6. 有关图形窗口和图形屏幕操作函数 <BR>
      <P>&nbsp;&nbsp;&nbsp; 一、图形窗口操作 <BR>&nbsp;&nbsp;&nbsp; 象文本方式下可以设定屏幕窗口一样, 
      图形方式下也可以在屏幕上某一区域 <BR>设定窗口, 只是设定的为图形窗口而已, 其后的有关图形操作都将以这个窗口的 
      <BR>左上角(0,0)作为坐标原点, 而且可为通过设置使窗口之外的区域为不可接触。 <BR>这样, 所有的图形操作就被限定在窗口内进行。 
      <BR>&nbsp;&nbsp;&nbsp; void far setviewport(int xl,int yl,int x2, int 
      y2,int clipflag); <BR>&nbsp;&nbsp;&nbsp; 设定一个以(xl,yl)象元点为左上角, 
      (x2,y2)象元为右下角的图形窗口, 其 <BR>中x1,y1,x2,y2是相对于整个屏幕的坐标。若clipflag为非0, 则设定的图形以外 
      <BR>部分不可接触, 若clipflag为0, 则图形窗口以外可以接触。 <BR>&nbsp;&nbsp;&nbsp;&nbsp; void 
      far clearviewport(void); <BR>&nbsp;&nbsp;&nbsp; 清除现行图形窗口的内容。 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp; void far getviewsettings(struct viewporttype 
      far * viewport); <BR>&nbsp;&nbsp;&nbsp; 
      获得关于现行窗口的信息,并将其存于viewporttype定义的结构变量viewport <BR>中, 其中viewporttype的结构说明如下: 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct viewporttype{ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int 
      left, top, right, bottom; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      int cliplag; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }; 
      <BR>&nbsp;&nbsp; 注明: <BR>&nbsp;&nbsp;&nbsp;&nbsp; 1. 
      窗口颜色的设置与前面讲过的屏幕颜色设置相同, 但屏幕背景色和窗口 <BR>背景色只能是一种颜色, 如果窗口背景色改变, 整个屏幕的背景色也将改变这与 
      <BR>文本窗口不同。 <BR>&nbsp;&nbsp;&nbsp;&nbsp; 2. 可以在同一个屏幕上设置多个窗口, 但只能有一个现行窗口工作, 
      要对 <BR>其它窗口操作, 通过将定义那个窗口的setviewport()函数再用一次即可。 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp; 3. 前面讲过图形屏幕操作的函数均适合于对窗口的操作。 <BR>
      <P>&nbsp;&nbsp;&nbsp; 二、屏幕操作 <BR>&nbsp;&nbsp;&nbsp; 除了清屏函数以外, 
      关于屏幕操作还有以下函数: <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void far 
      setactivepage(int pagenum); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void far 
      setvisualpage(int pagenum); <BR>&nbsp;&nbsp;&nbsp; 这两个函数只用于EGA,VGA 
      以及HERCULES图形适配器。setctivepage() 函数 <BR>是为图形输出选择激活页。&nbsp; 
      所谓激活页是指后续图形的输出被写到函数选定的 <BR>pagenum页面, 该页面并不一定可见。setvisualpage()函数才使pagenum 
      所指定 <BR>的页面变成可见页。页面从0开始(Turbo C默认页)。如果先用setactivepage() 
      <BR>函数在不同页面上画出一幅幅图像,再用setvisualpage()函数交替显示, 就可以 <BR>实现一些动画的效果。 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp; void far getimage(int xl,int yl, int x2,int 
      y2, void far *mapbuf); <BR>&nbsp;&nbsp;&nbsp;&nbsp; void far putimge(int 
      x,int,y,void * mapbuf, int op); <BR>&nbsp;&nbsp;&nbsp;&nbsp; unsined far 
      imagesize(int xl,int yl,int x2,int y2); <BR>&nbsp;&nbsp;&nbsp;&nbsp; 
      这三个函数用于将屏幕上的图像复制到内存,然后再将内存中的图像送回到 
      <BR>屏幕上。首先通过函数imagesize()测试要保存左上角为(xl,yl), 右上角为(x2, 
      <BR>y2)的图形屏幕区域内的全部内容需多少个字节, 然后再给mapbuf 分配一个所测 
      <BR>数字节内存空间的指针。通过调用getimage()函数就可将该区域内的图像保存在 <BR>内存中, 
      需要时可用putimage()函数将该图像输出到左上角为点(x, y)的位置上, 
      <BR>其中getimage()函数中的参数op规定如何释放内存中图像。 <BR>&nbsp;&nbsp;&nbsp; 关于这个参数的定义参见表8。 
      <BR>
      <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      表8. putimage()函数中的op值 <BR>&nbsp;&nbsp;&nbsp;&nbsp; 
      ━━━━━━━━━━━━━━━━━━━━━━━━━━ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      符号常数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数值&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      含&nbsp;&nbsp; 义 <BR>&nbsp;&nbsp;&nbsp;&nbsp; ────────────────────────── 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      COPY_PUT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 复制 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      XOR_PUT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -