收藏 分享(赏)

第二章 C语言图形程序设计基础.ppt

上传人:fmgc7290 文档编号:8307003 上传时间:2019-06-19 格式:PPT 页数:99 大小:667KB
下载 相关 举报
第二章 C语言图形程序设计基础.ppt_第1页
第1页 / 共99页
第二章 C语言图形程序设计基础.ppt_第2页
第2页 / 共99页
第二章 C语言图形程序设计基础.ppt_第3页
第3页 / 共99页
第二章 C语言图形程序设计基础.ppt_第4页
第4页 / 共99页
第二章 C语言图形程序设计基础.ppt_第5页
第5页 / 共99页
点击查看更多>>
资源描述

1、2019/6/19,西安工程大学数学系,1,计算机图形学是一门实践性很强的课程。通过程序设计来完成图形的绘制,对深刻理解课程的内容和相关概念非常重要。 程序设计语言是进行计算机绘图的基础,现在大多数高级语言都具有基本绘图功能。本章主要介绍用C语言进行图形程序设计的基本方法和C语言的图形功能,使大家对C语言的图形应用有一个较深刻的理解。WINTC,第三章 C语言图形程序设计基础,2019/6/19,西安工程大学数学系,2,3.1、屏幕设置,我们在屏幕上进行绘制图形,一般要按以下几个步骤执行:(1)把屏幕设置为图形模式;(2)选择背景与显示实体的颜色;(3)计算图形显示坐标;(4)调用绘图语句绘制

2、实体,3.1.1 、屏幕显示模式与坐标系,1.文本模式与字符坐标系在屏幕上只能显示字符的方式称为文本模式。在文本模式下,屏幕上可以显示的最小单位是字符。为了能在指定的位置显示每个字符,C语言提供了字符坐标系。,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,3,字符坐标系是以屏幕的左上角为坐标原点,水平方向为 X轴,垂直方向为Y轴,如下图-1所示:,注:字符坐标系的原点为(1,1),水平方向(X轴)分为若干列,垂直方向 (Y轴)分为若干行,用一对坐标可以指定屏幕上一个位置。,(8,20),表示字符位于屏幕的第8行第20列,C语言图形程序设计基础,2019/6/19,西安工程大学

3、数学系,4,(1)BW40:黑白40列方式。显示25行文本,其中每行40个字符,以黑白两色显示。(2)C40:彩色40列方式。可显示40列25行彩色字符。(3)BW80:黑白80列方式。可显示80列25行字符。(4)C80:彩色80列25行显示方式。(5)MONO:单色80列25行显示方式。(6)C4350:一种特殊的彩色文本方式,适和EGA和VGA两种适配器。若用EGA适配器,显示80列43行;若用VGA适配器,则显示80列50行。,C语言图形程序设计基础,由于显示模式的不同,所显示的字符的列数和行数以及颜色也不相同。C支持以下6种不同的显示方式。,2019/6/19,西安工程大学数学系,5

4、,在不同的显示模式下,屏幕所显示的字符数量也不一样。 X方向一般为40列或80列,Y方向一般为25行,但EGA和VGA适配器可达43行或50行。 在文本模式下,屏幕最多可显示80X50=4000个字符,至少可显示40X25=1000个字符。显示字符越多,每个字符尺寸越小,反之越大 。 显示模式不同,屏幕坐标的构成也不相同。比如:(1)在BW40方式下,最大坐标位置为(25,40);(2)在C4350方式下,最大坐标位置为(50,80);,注:,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,6,2. 图形模式与点坐标系在屏幕上显示图形的方式称为图形模式。在图形模式下,屏幕是由像

5、素点组成的,像素点的多少决定了屏幕的分辨率。分辨率越高,显示图形越细致,质量越好。,如右图所示 1.屏幕由许多像素点组成; 2.图形的显示效果取决于分辨率的高低;,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,7,例如:CGA显示器的分辨率为300X200,TVG显 示器的分辨率为1024X768, TVGA比CGA分率高。,图-2 点坐标系,注:点坐标系坐标值的范围取决于所用的适配器/显示分辨率,C语言图形程序设计基础,在图形模式下,屏幕上每个像素的显示位置用点 坐标来描述的。点坐标系是以屏幕左上角为坐标原点(0,0),水平方向为X轴,自左向右;垂直方向为Y轴,自上向下。如

6、下图所示:,2019/6/19,西安工程大学数学系,8,由于屏幕的分辨率不同,水平方向和垂直方向的点数也不一样,从而点坐标系的Max x 、 Max y 数值也不同。 在C程序中,坐标数据可以用两种形式给出:一种是绝对坐标,另一种是相对坐标。(1)绝对坐标的参考点是坐标的原点(0,0),x和y只能取规定范围(0, Max x )和(0, Max y )内的正整数;(2)相对坐标是相对“当前点”的坐标,其坐标的参考点是当前点。在相对坐标中, x和y的取值是相对当前点在x方向和y方向上的增量,故x和y可以为正整数,也可以为负整数。,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,9

7、,3.1.2、图形驱动程序与图形模式,1.图形驱动程序对于不同的图形显示器,其控制方式各有差异,因此要显示图形就需要先装入相应的图形驱动程序。C 支持以下几种图形驱动程序:,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,10,2.图形模式由于每种图形显示器都有几种不同的图形显示模式,所以要显示图形,不但要先装入相应的驱动程序,而且还要决定所用的显示模式。 C 语言程序常采用的几种图形驱动程序及相应的模式,表2.2 图形驱动程序及相应的模式,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,11,注:1. 不同的图形驱动程序有不同的图形模式;2. 同一图形驱动程序

8、,也可能会有几种图形模式;,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,12,C提供了十分丰富的图形库函数,共有70多个,所有图形函数的原型均在头文件“graphics.h”中定义。所以,在任何使用图形函数的程序中,都要求其头部包含文件graphics.h,即在程序文件的开头写上文件包含命令:#include 同时将集成开发环境option/Linker中的graphics.lib选项设置为”on”。 下面我们介绍:图形系统的初始化、图形系统的关闭、 图形模式控制。,3.1.3、图形系统初始化和模式控制,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,13,

9、图形系统初始化首先要调用initgraph()函数,它通过从磁盘上装入一个图形驱动程序来初始化图形系统,并将系统设置为图形模式。,1.图形系统的初始化图形模式是有别于文本模式的一种计算机屏幕显示模式。屏幕一般在默认情况下为80列25行的文本模式,在文本模式下,所有的图形函数均不能操作,因此在使用图形函数绘图之前,必须将屏幕显示适配器设置为一种图形模式,即为图形初始化过程。,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,14,功能 将图形驱动软件装入内存,使屏幕显示适配器设置为图形模式,即图形系统初始化; 说明 1. gdriver是一个整型值,用来指定要装入的图形驱动程序;该

10、值在头文件graphics.h中定义;2. gmode是一个整型值,用来设置图形显示模式。图形显示模式决定了显示的分辨率和显示的颜色的多少等;3. path是一个字符串,用来指明图形驱动程序所在的路径.,1.若驱动程序就在用户当前目录下,则path可为空字符串,否则应给出具体路径名。一般情况下,TurboC安装在C盘的TC目录中,则该路径为:C:TC,若写在参数中则为“C:TC”; 2.前两个参数实际上是整型指针,调用时应加上地址运算符“,注:,initgraph()函数,格式 void far initgraph(int *gdriver,int *gmode,char *path);,C语

11、言图形程序设计基础,2019/6/19,西安工程大学数学系,15,(1)已知显示器类型的图形系统初始化。如果已经知道所用图形显示器的种类和要使用的图形模式 则图形系统的初始化可用下面程序,例如:,例1 画一实心矩形#include“graphics.h“main() int gdriver,gmode;gdriver=CGA; /*设置显示模式CGA*/gmode=CGAC0; /*选用CGA图形模式*/initgraph(/*初始化图形系统*/,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,16,bar3d(10,20,50,80,0,0); /*画一条形图*/getch(

12、); /*等待按一键结束*/closegraph(); /*关闭图形系统,回到文本模式*/ 程序注释: bar3d()函数格式: void bar3d(int x1,int y1,int x2,int y2, int depth,int topflag);功能: 画一填充的三维条形图;说明: depth为条形的深度; topflag=0则不加顶,否 则在条形图上加一个顶。,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,17,格式 void far detectgraph(int *gdriver,int *gmode ); 功能 在计算机有图形适配器的情况下,确定图形适配器的

13、类型; 说明 1.若系统有图形适配器,则把gdriver指的变量设置为适合于适配器的图形驱动程序的代码,并把gmode所指的变量设置为适配器所能支持的最高分辨率。2.若系统无图形适配器,则gdriver所指的变量为-2.,(2)不知显示器类型的图形系统初始化。若在编写程序过程中,不知道当前系统屏幕硬件的 类型或编写的程序要用于不同的图形显示器,这就要 求所编程序能知当前图形显示器的代码,Turbo C供 了一个对图形显示器硬件测试的函数detectgraph()。,detectgraph()函数,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,18,例2、 测试硬件显示模式和绘

14、制图形 #include “graphics.h“main() int gdriver,gmode;detectgraph( /*等待按一键结束*/,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,19,initgraph( ,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,20,例3自动搜索显示类型和模式并初始化画图#include“graphics.h“main(),(3)自动初始化图形系统。一般在程序设计中,可以把对图形显示器的检测和 初始化工作放在一起来自动完成,规定Gdriver= DETECT,则initgraph()函数会自动按照系统所配置 的图形

15、显示器来确定驱动程序,并把图形模式设置为 检测到的驱动程序的最高分辨率,实现图形系统的初 始化.,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,21,int gdriver=DETECT,gmode; /*自动搜索显示器类型和显示模式*/initgraph( ,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,22,2.图形系统的关闭在图形编程中,我们均用函数initgraph()对图形系统进行初始化,即启动图形系统,进入绘图状态,在程序结束时都用函数closegraph()关闭图形系统。,closegraph()函数,格式 void far closegrap

16、h(); 功能 关闭图形模式。 说明 函数closegraph()用来关闭图形模式,释放用于保存图形驱动程序和字体所占用的内存空间。当一个程序需要从图形模式下退出,且回到文本模式下继续运行时可调用该函数。,注:所有有关图形显示的程序一定是在initgraph()和closegraph()之间。,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,23,3.图形模式的控制为了对图形模式进行控制,即1. 从图形模式转换成文本模式,或从文本模式转换成图 形模式;2. 设置驱动器有效模式或读取当前图形模式和范围。TurboC都提供了相关的函数来实现其控制。,1.getgraphmode()

17、函数 格式 void far getgraphmode(void); 功能 返回当前图形模式值,其返回值如前表所示。,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,24,功能 恢复屏幕在图形初始化前的模式。 说明 该函数使initgraph()函数所选定图形模式关闭,返回到调用initgraph()前的状态。注意它与closegraph()函数的区别。,3.setgraphmode()函数 格式 void far setgraphmode(int gmode); 功能 设置系统图形模式并清屏幕。 说明 该函数把当前的图形模式设置为gmode所指定的模式。,C语言图形程序设计基

18、础,2.restorecrtmode()函数 格式 void far restorecrtmode(void);,2019/6/19,西安工程大学数学系,25,注: 通过调用以上函数,可实现使显示器暂时离开图形模式进入文本模式,进行文本输出,然后不经过initgraph()函数再返回图形模式的功能.,4.getmoderange()函数 格式 void far getmoderange(int driver,int *lomode,int *himode); 功能 获取图形驱动器可使用的模式范围。 说明 该函数可以确定由driver所指定图形驱动器能够支持的最低和最高模式,并将这些值放在由lo

19、mode和himode所指向的变量中.,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,26,例4 图形模式控制函数应用程序 # include “graphics.h“ #include “stdio.h“ #include “stdlib.h“ main() int gdriver,gmode,lo,hi;gdriver=CGA; /*设置显示模式为CGA*/getmoderange(CGA,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,27,getch(); /*等待按一键结束*/gmode=getgraphmode(); /*获得现行图形模式*/ re

20、storecrtmode(); /*返回图形初始化前的现实模式*/printf(“NOW in text mode ,press any key back to graphics mode. n“);getch();setgraphmode(gmode); /*再回到图形模式*/rectangle(50,30,100,130); /*画一矩形*/getch();closegraph(); /*关闭图形系统,回到文本模式*/return(0); ,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,28,我们在画图时需要运用光标定点,即确定坐标位置。当屏幕处于文本状态时,左上角坐标原

21、点为(1,1);而在图形模式下,以左上角为坐标原点(0,0),水平方向向右为X轴,垂直方向向下为Y轴。 由于图形显示器和显示模式的不同,x、y坐标的最大值也就不同, 可利用TurboC提供的函数来设定坐标(定点),读取当前光标的位置以及x、y轴的最大值。,3.1.4 、图形坐标的设置,moveto()函数 格式 void far moveto(int x,int y); 功能 把当前光标移到所需的位置(x,y)。,1.定点,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,29,说明 该函数把当前窗口中的当前光标位置(CP)移到所需的(x,y)位置。注:不是画线。 例如:move

22、to(100,100)表示把当前光标移到点(100,100)位置上。,moverel()函数 格式 void far moverel(int deltax,int deltay); 功能 以增量方式移动当前光标。 说明 此函数把光标从当前位置(CP)开始,在x,y方向分别移动deltax和 deltay,即由(x,y) (x+ deltax,y+ deltay). 例如:若当前光标在(10,10)位置,执行moverel(10,20)后即移到(20,30)的位置上.,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,30,注:moveto (10,20)表示把当前光标移到点(10

23、,20)位置上。,moverel(10,20)后即移到(20,30)的位置上.,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,31,例如:语句printf(“cps loc:%d%d”,getx(),gety();显示光标当前位置的x值,2.读取当前光标位置,getx()函数 格式 int far getx(void); 功能 读取当前光标在x轴的位置。 gety()函数 格式 int far gety(void); 功能 读取当前光标在y轴的位置。,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,32,例5、显示系统中图形硬件支持的最大的x,y值程序: #i

24、nclude “stdio.h“#include “conio.h“,3.读取x,y轴的最大值,getmaxx()函数 格式 int far getmaxx(void); 功能 读取当前光标在x轴的最大值。 getmaxy()函数 格式 int far getmaxy(void); 功能 读取当前光标在y轴的最大值。,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,33,#include “graphics.h “ void main() int gdriver,gmode;gdriver=CGA;gmode=CGAC0;initgraph(max x,y is 319,199

25、,为什么?,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,34,3.2图形颜色设置,在绘图时,往往要求配置一定的颜色加以渲染在绘图系统中颜色分为前景色和背景色。 前景色是指构成字符和图形点的颜色,而背景色是指整个显示屏幕的颜色。 C语言提供了多个颜色控制函数来设置前景色、背景色等。,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,35,.设置当前背景色,setbkcolor()函数 格式 void far setbkcolor(int color); 功能 设置当前背景颜色。 说明 该函数将背景色设置成color 所指定的颜色值。参数color可以用名字,也可

26、以用数字,它们的对应关系在graphics.h 中定义。如下表:,Color取值可以由0到15,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,36,2.设置当前画图颜色,setcolor()函数 格式 void far setcolor(int color); 功能 设置当前画图颜色。 说明 该函数把当前画图颜色设置成color 所指定的颜色值,即画笔的颜色。参数color可以用名字,也可以用数字,但当缺省时,默认是白色。,C语言图形程序设计基础,3.获取颜色信息,getbkcolor()函数 格式 int far getbkcolor(void); 功能 读取当前背景颜色。

27、 说明 该函数返回当前背景颜色。,2019/6/19,西安工程大学数学系,37,3.获取颜色信息,getcolor()函数 格式 int far getcolor(void); 功能 读取当前画图颜色。 说明 该函数返回当前画笔颜色。,C语言图形程序设计基础,3.3画点,画线,putpixel()函数 格式 void far putpixel(int x,int y,int color); 功能 在点(x,y)处画一规定颜色的点。 说明 该函数把color 所指定的颜色写到(x,y)处的像素上。例如:语句putpixel(10,20,GREEN)使点(10,20)的像素成为绿色。,2019/6

28、/19,西安工程大学数学系,38,getpixel()函数 格式 int far getpixel(int x,int y ); 功能 读取点(x,y)的颜色。 说明 该函数返回指定点(x,y)位置上的像素颜色值。,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,39,#include “graphics.h #include “conio.h“ void main() int gdriver=DETECT,gmode; int color,i,max;initgraph( ,例6、 在不同位置画点,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,40,line

29、( )函数 格式 void far line(int x1,int y1,int x2,int y2); 功能 指定两点间画一直线。 说明 该函数用当前颜色从点(x1,y1)到点(x2,y2)画一条直线,当前位置(CP)不变。,直线类函数,lineto( )函数 格式 void far lineto(int x,int y); 功能 从当前位置到点(x,y)画一条直线。 说明 并把当前位置(CP)定位在点(x,y)处。,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,41,linerel( )函数 格式 void far linerel(int deltax,int delta

30、y); 功能 从当前位置相对CP位置在X方向增大deltax,在Y方向增大deltay处画一直线。,线的特性设定,我们在用画线函数画线时,其默认值均属于一个像素点宽度的实线。但往往有时需要改变线型和线的宽度, C语言提供了一些可以改变线型和线宽的函数,具体如下:,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,42,setlinestyle()函数 格式 void far setlinestyle(int linestyle,unsigned pattern,int width); 功能 改变线型和线宽。 说明 该函数所用的3个参数具体含义为:,1linestyle为整型值,用

31、来定义所画直线类型,如下表所示:,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,43,注: 表中前4种为系统预定的类型,第5种为用户自定义类型,2pattern为无符号整型数。该参数在需要用户自定义线型时才使用,若是使用前四种系统预定义的线型,则该参数可取0值。,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,44,3 width为整型数。主要用来指定所画直线的粗细,以像素为单位,分两种情况,如下表所示:,注: 通过上述3个参数的不同组合,可以根据需要画出不同类型、不用粗细的直线。,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,45,例如:从

32、点(10,20)到(150,70)画一条红色的点划线可用下面的语句:setcolor(RED);setlinestyle(DASHED_LINE,0, THICK_WIDTH);line(10,10,150,100); 注意:当函数setlinestyle的第一个参数为USERBIT_LINE(或4)时,用户可以自己定义直线类型。此时第三个参数意义不变而pattern才变得有意义,直线的类型由pattern来定义,该参数是一个16位二进制码,每一位(bit)表示一个像素。,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,46,若某一位置为1时表示直线上相应位置以当前颜色显示;

33、若某一位置为0时,则其对应像素不显示或不改变原来的颜色;例如:1. 1111 1111 1111 1111 表示16位全置1,因此可画一条16个像素的点实线。2. 1010 1010 1010 1010 表示隔一位置1,因此可画一条16个像素的点虚线。,但:在实际编写程序时,一般要把16位二进制数转换为4位十六进制数,每4位二进制数转换为1位十六进制数。例如 1111 1111 1111 1111 FFFF。函数调用方法为: setlinestyle(4,0xFFFF,1); 可定义各种线型。,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,47,在图形模式下主要是绘制图形,为

34、了有效地对图形进行操作,TurboC提供了图形屏幕、图形窗口的处理功能,即在图形模式下开设“窗口”(又称为视图区),并对屏幕和图形进行处理。,3.4屏幕窗口操作,.图形屏幕处理,cleardevice()函数 格式 void far cleardevice(void); 功能 清除整个图形屏幕(但保留底色),并把当前光标位置(CP)重新设置为(0,0)。,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,48,setactivepage()函数 格式 void far setactivepage(int page); 功能 设置图形输出活动页。 说明 该函数确定接受图形函数所输出

35、的活动页,缺省值为屏幕显示页。保存显示在屏幕上信息的称为页(Page)。例如:语句setactivepage(1)表示设置第页为活动页。,setvisualpage()函数 格式 void far setvisualpage(int page); 功能 该函数显示Page所指定的可见图形页。 例如:语句setvisualpage(1)表示选择显示第页。,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,49,#include “graphics.h “ #include “conio.h“ void main() int gdriver,gmode; gdriver=VGA; /

36、*设置VGA图形设备器(驱动程序)*/gmode=VGAHI; /*设置VGA图形模式*/initgraph( /* 清屏*/,例图形屏幕处理函数应用程序,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,50,setactivepage(1); /*设置图形输出活动页为1*/circle(150,130,80); /*画一个圆*/setactivepage(0); /*设置图形活动页为0*/rectangle(40,160,90,180); /*画一个矩形*/getch();setvisualpage(1); /*设置可见图形1页*/getch();setvisualpage(

37、0); /*设置可见图形0页*/getch();closegraph(); /*关闭图形系统*/ ,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,51,C语言提供了图形窗口处理功能,并可以在屏幕某处设置一个图形窗口,以后有关图形的操作均相对于这个窗口的左上角为坐标原点(0,0)。 可设置图形窗口之外的区域是不可接触的,这样所有的图形操作只在所指定图形窗口中进行,而不会出现在窗口之外。,2.屏幕窗口操作,clearviewport()函数 格式 void far clearviewport(void); 功能 清除当前图形窗口,并把当前光标位置(CP)重置为 (0,0)。,C语

38、言图形程序设计基础,2019/6/19,西安工程大学数学系,52,若clipflag为1,则超出窗口的输出部分自动剪裁掉; 若clipflag为0,则超出图形窗口之外的部分不被剪裁掉;,setviewport()函数 格式 void far setviewport(int left,int top,int right, int bottom, int clipflag); 功能 设置图形窗口。 说明 该函数建立一个新的图形窗口,窗口大小用左上角坐标(left,top)与右下角坐(right,bottom)来定义。,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,53,#incl

39、ude “graphics.h “ #include “conio.h“ void main() int gdriver=CGA,gmode=0; /*设置图形模式*/initgraph( /*画直线*/,例8、窗口设置与清除作用,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,54,getch();clearviewport(); /*清除窗口*/getch();cleardevice(); /*清屏*/getch();setviewport(20,15,80,80,1); /*重置窗口,窗口之外裁剪*/rectangle(0,0,60,65); /*画一矩形*/line(0

40、,0,100,150); /*画直线*/getch();closegraph(); /*关闭图形系统,回到文本模式*/ ,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,55,为了能按照一定的要求对图形进行填充,通常应规定填充的模式和颜色。图形填充时,使用的是当前模式和颜色;若没有设置填充模式和颜色,则填充时使用缺省值。缺省填充模式为SOLID_FILL,填充颜色为函数返回值(一般为白色)。,3.5图形填充,1. 填充模式和颜色设置,setfillstyle()函数 格式 void far setfillstyle(int pattern,int color); 功能 设置当前

41、填充模式和填充颜色。,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,56,说明 该函数用来设置当前填充模式和填充颜色,以便用于填充一个指定的封闭区域。其中参数 1pattern用于指定填充模式,取值有12中,如下表:,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,57,2 color是用于指定填充用的颜色,取值必须是当前屏幕模 式的有效值.,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,58,例9、 画一个二维和三维条形并填图。 #include “graphics.h“ #include “conio.h“ void main() int

42、 i,gdriver=DETECT,gmode; /*自动搜索显示器类型和显示模式*/initgraph(,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,59,setfillstyle(HATCH_FILL,RED);bar3d(300,100,350,200,10,1);setfillstyle(SLASH_FILL,GREEN);bar3d(400,100,450,200,10,1);setfillstyle(CLOSE_DOT_FILL,BLUE);bar3d(500,100,550,200,10,1);getch();closegraph(); ,C语言图形程序设计基

43、础,2019/6/19,西安工程大学数学系,60,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,61,setfillpattern()函数 格式 void setfillpattern(char *upattern, int color) 功能 设置用户自定义填充模式。 说明 其中upattern指向用户定义的着色模式数据,即一指向8字节序列的指针。color代表用户定义的添充颜色。例如:我们来看下面这个例子。,若填充模式为用户定义USER_FILL,不能将setfillstyle的参数pattern的值取为12( USER_FILL ),而用户必须用个字节定义一个点阵着色模

44、式,再调用函数setfillpattern设置该模式,注:,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,62,例10设计如右图所示的填充图案。 #include main( ) int gd=DETECT,gm;char p8=0x00,0x10,0x20,0x40, 0x7e,0x40,0x20,0x10; initgraph( ,注:每个字节与该模式下的8个像素相对应。一旦某模式字节中的一位被置为1,则对应的像素被画出来。,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,63,例11、 演示预定义的种着色模式。 #include main() int g

45、d=DETECT,gm, h,w;initgraph(,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,64,运行结果效果图,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,65,2. 漫延填充,floodfill()函数 格式 void far floodfill(int x,int y, border); 功能 填充一块有界的封闭区域。 说明 该函数用来填充一块有界的封闭区域,(x,y)是待填充的起点, border指定填充区域边界所使用颜色。1若起点在封闭区域内,则区域内部被填充;2若起点在封闭区域外,则区域外部被填充; 注:用floodfill填充时,使

46、用的是当前填充模式的填充颜色,也可以通过setfillstyle来改变设置。,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,66,例如下面三种情况:,.(x,y),填充情况(二),.(x,y),setfillstyle(SOLID_FILL,4); circle(100,100,80);,填充情况(三),circle(100,100,80); setfillstyle(SOLID_FILL,4); floodfill(100,100,0);,circle(100,100,80); setfillstyle(SOLID_FILL,4); floodfill(20,20,0);,

47、填充情况(一),注意:上面三种填充程序的区别,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,67,例2.15 填充一个封闭圆。 #include “graphics.h“ #include “conio.h“ void main() int i,gdriver=DETECT,gmode; /*自动搜索显示器类型和显示模式*/initgraph( /*定画笔色(红)*/,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,68,circle(100,100,30); /*画一个圆*/setcolor(2); /*定画笔色(绿)*/circle(200,200,80)

48、; /*画一个圆*/setfillstyle(SLASH_FILL,14); /*定填充模式和填充色*/floodfill(100,100,4); /*填充一个封闭圆*/getch();closegraph(); ,执行结果,C语言图形程序设计基础,2019/6/19,西安工程大学数学系,69,为了在图形模式下对文本进行操作,Turbo C提供了对图形进行字符串输出,以及对输出字符的字型大小和方位进行控制等有关的文本输出函数。,3.6图形模式下文本处理,1 文本输出函数,outtext()函数 格式 void far outtext(char *textstring); 功能 把一字符串输出至屏幕当前光标位置。 说明 该函数在当前位置上输出一字符串。参数textstring是一个文本字符串。注:若当前方向是水平的,则光标位置移动量为该字符串的 长度,否则光标位置不变。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报