实用C语言程序的设计教第10章_第1页
实用C语言程序的设计教第10章_第2页
实用C语言程序的设计教第10章_第3页
实用C语言程序的设计教第10章_第4页
实用C语言程序的设计教第10章_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 到目前为止,我们是在系统默认的文本方式下设计和运到目前为止,我们是在系统默认的文本方式下设计和运行程序的。所谓文本方式,是以一个西文符号或汉字为基本行程序的。所谓文本方式,是以一个西文符号或汉字为基本操作单位,一屏的容量一般是操作单位,一屏的容量一般是2525行,每行为行,每行为8080个西文符号或个西文符号或4040个汉字。如果画图,就需要图形方式。所谓图形方式就是个汉字。如果画图,就需要图形方式。所谓图形方式就是以一个像素(像元)为基本单位进行各种操作。一个像素是以一个像素(像元)为基本单位进行各种操作。一个像素是一个点,可以显示不同的颜色。如何进入图形方式,如何调一个点,可以显示不同的

2、颜色。如何进入图形方式,如何调用编译系统提供的各种图形函数绘图,是本章要介绍的主要用编译系统提供的各种图形函数绘图,是本章要介绍的主要内容。内容。 第第1010章章 图形处理图形处理第第10章章 图形处理图形处理 10.1 图形输出初始化和显示模式设图形输出初始化和显示模式设 10.2 绘图函数绘图函数 10.3 图形处理应用实例图形处理应用实例10.1 10.1 图形输出初始化和图形输出初始化和显示模式设置显示模式设置10.1.1 图形输出初始化图形输出初始化本章开头已提到,如果要使用本章开头已提到,如果要使用c c语言画图,就需要图语言画图,就需要图形方式。所谓图形方式就是以一个像素(像元

3、)为基形方式。所谓图形方式就是以一个像素(像元)为基本单位进行各种操作。一个像素是一个点,可以显示本单位进行各种操作。一个像素是一个点,可以显示不同的颜色。图形的品质取决于像素的多少,像素越不同的颜色。图形的品质取决于像素的多少,像素越多越清晰;如果用显示模式来表示,则分高分辨率和多越清晰;如果用显示模式来表示,则分高分辨率和低分辨率显示模式。低分辨率显示模式。显示模式与显示模式与pc插槽中的显示适配器(显示卡)有关。例如,插槽中的显示适配器(显示卡)有关。例如,vga适配器的显示模式从适配器的显示模式从200行到行到480行不等,每行有行不等,每行有640个个像素。像素。agp适配器的显示模

4、式有适配器的显示模式有640480,800600,1024768,12801024等多种规格。同一个图形在不同的等多种规格。同一个图形在不同的模式下显示,不仅分辨率有别,而且形状也不同。在模式下显示,不仅分辨率有别,而且形状也不同。在640480模式下显示的图形,在模式下显示的图形,在640200模式下图形宽度不模式下图形宽度不变,但实际高度会变大。变,但实际高度会变大。适配器的作用是把显示的字符和图形以数字形式存储在图形适配器的作用是把显示的字符和图形以数字形式存储在图形卡上的视频存储器(卡上的视频存储器(vram)中,再将其变成视频模拟信号)中,再将其变成视频模拟信号送往显示器,如图送往显

5、示器,如图10-1所示。所示。显示器主机适配器图形控制器显示存储器(vram)显示控制器图10-1 主机、适配器、显示器的关系 c语言编译系统提供了许多画图函数,只要在程序中包含头语言编译系统提供了许多画图函数,只要在程序中包含头文件文件graphics.h,便可以调用这些函数。计算机配有的显示,便可以调用这些函数。计算机配有的显示器不同,其适配器类型也不同。在使用图形函数之前,必须器不同,其适配器类型也不同。在使用图形函数之前,必须先确定适配器类型,并选定其中的一种显示模式,然后启动先确定适配器类型,并选定其中的一种显示模式,然后启动相应的驱动程序。这一工作称为图形系统初始化,由下面的相应的

6、驱动程序。这一工作称为图形系统初始化,由下面的函数来完成。函数来完成。void initgraph (int * *graphdriver,int * *graphmode,char * *pathtodriver);其中其中graphdriver和和graphmode分别代表适配器类型和显示模分别代表适配器类型和显示模式,式,pathtodriver是寻找图形驱动程序的路径。驱动程序一是寻找图形驱动程序的路径。驱动程序一般以般以.bgi为扩展名,所在的目录通常为为扩展名,所在的目录通常为c:tc。 当适配器的类型未知时,可以通过下面的语句启动驱动程当适配器的类型未知时,可以通过下面的语句启动

7、驱动程序:序:int graphdriver=detect,graphmode;initgraph (&graphdriver,&graphmode,c:tc);其中其中detect是字符常量,其数值为是字符常量,其数值为0。当。当graphdriver =detect时,函数时,函数initgraph又调用系统检测函数又调用系统检测函数detectgraph进行硬件测试,确定适配器类型;然后将代表适进行硬件测试,确定适配器类型;然后将代表适配器类型的符号常数(或整型数)赋给配器类型的符号常数(或整型数)赋给graphdriver;同时将;同时将代表适配器的最高分辨率模式的符号

8、常数(或整型数)赋给代表适配器的最高分辨率模式的符号常数(或整型数)赋给graphmode;最后启动驱动程序。;最后启动驱动程序。 在在c语言中提到的适配器类型是用一个整数来表示的,不语言中提到的适配器类型是用一个整数来表示的,不同的适配器对应不同的整数。显示器模式也是用整数表示的,同的适配器对应不同的整数。显示器模式也是用整数表示的,不同的显示模式对应不同的分辨率。也可以通过下面的程序不同的显示模式对应不同的分辨率。也可以通过下面的程序来测定适配器类型和最高分辨率模式:来测定适配器类型和最高分辨率模式:void main()int graphdriver=detect,graphmode;i

9、nitgraph(&graphdriver,&graphmode,c:tc); printf(%d,%d, graphdriver, graphmode);以以vga显示卡为例,测定结果:显示卡为例,测定结果:9,2然后用测得的结果,直接指定适配器类型和显示模式进行图然后用测得的结果,直接指定适配器类型和显示模式进行图形输出初始化:形输出初始化:int graphdriver=9,graphmode=2;initgraph(&graphdriver,&graphmode,c:tc);10.1.2 10.1.2 显示模式的设置显示模式的设置图形输出初始化以后,就可

10、以使用各种图形函数。这里介绍获取显示模图形输出初始化以后,就可以使用各种图形函数。这里介绍获取显示模式范围的函数、设置显示模式的函数、获取适配器名称的函数和获取显式范围的函数、设置显示模式的函数、获取适配器名称的函数和获取显示模式名称(包括分辨率和适配器名称)的函数。示模式名称(包括分辨率和适配器名称)的函数。10.1.2.1 10.1.2.1 获取显示模式范围的函数获取显示模式范围的函数函数原型:函数原型:void getmoderange(int graphdriver,int void getmoderange(int graphdriver,int * *lowmode,int low

11、mode,int * *himodehimode); );其中,其中,graphdrivergraphdriver代表适配器类型,通过参数代表适配器类型,通过参数lowmodelowmode和和himodehimode分别获得分别获得显示模式的最低和最高值。例如对于显示模式的最低和最高值。例如对于vgavga显卡,用以下语句可得到显示显卡,用以下语句可得到显示模式的范围:模式的范围: int lowmode,himode;getmoderange (9,lowmode,himode);printf (%d,%d, &lowmode,&himode);例如,若得到例如,若得到0

12、0,2 2,说明显示模式的范围为,说明显示模式的范围为0 0,1 1,2 2。10.1.2.2 10.1.2.2 设置显示模式的函数设置显示模式的函数函数原型:函数原型:void setgraphmode (intvoid setgraphmode (int mode); mode);其中,参数其中,参数modemode代表要设置的显示模式。例如对于代表要设置的显示模式。例如对于vgavga显卡,用以下函显卡,用以下函数调用语句可将显示模式设置为数调用语句可将显示模式设置为0 0(对应的分辨率为(对应的分辨率为640640200200):): setgraphmode (0);注意:注意:在调

13、用模式设置函数时,设置之前显示的内容会自动清除。在调用模式设置函数时,设置之前显示的内容会自动清除。 10.1.2.3 获取适配器名称的函数获取适配器名称的函数函数原型:函数原型:char * *getdrivername (void);函数返回值代表显示适配器的名称。例如对于函数返回值代表显示适配器的名称。例如对于vga显卡,用以下语句可显卡,用以下语句可得到适配器名称:得到适配器名称:char * *drivername;drivername=getdrivername();printf (%s, drivername);结果:结果:egavga10.1.2.4 获取显示模式名称(包括分辨

14、率和显卡名称)的函数获取显示模式名称(包括分辨率和显卡名称)的函数函数原型:函数原型:char * *getmodename (int * *mode_number);其中,其中,mode_number代表显示模式,函数返回值代表显示模式对应的代表显示模式,函数返回值代表显示模式对应的名称(包括分辨率和显卡名称)。例如对于名称(包括分辨率和显卡名称)。例如对于vga显卡,用以下语句可得显卡,用以下语句可得到显示模式为到显示模式为2的模式名称:的模式名称: char * *modename;modename=getmodename(2);printf (%s, modename);结果:结果:6

15、40480 vga本章随后几节使用其他绘图函数时,均假定在分辨率为本章随后几节使用其他绘图函数时,均假定在分辨率为640480对应对应的显示模式下进行。的显示模式下进行。10.1.3 退出图形方式退出图形方式图形输出初始化也就是进入图形输出方式,那是由图形输出初始化也就是进入图形输出方式,那是由initgraph函数来完函数来完成的。进入图形方式后,才能使用各种图形函数。如果要退出图形方式,成的。进入图形方式后,才能使用各种图形函数。如果要退出图形方式,即恢复文本方式,就要使用另一个函数即恢复文本方式,就要使用另一个函数closegraph (),或称关闭图,或称关闭图形方式的函数。形方式的函

16、数。函数原型:函数原型:void closegraph (void);注意:注意:关闭图形方式后,前面显示的图形会自动清除。关闭图形方式后,前面显示的图形会自动清除。 10.2 10.2 绘图函数绘图函数 前一节介绍了图形方式初始化的函数和设置显示前一节介绍了图形方式初始化的函数和设置显示模式的函数,本节介绍绘制各种图形的函数。在模式的函数,本节介绍绘制各种图形的函数。在c c语言语言程序中,要使用各种图形函数,必须首先进行图形输程序中,要使用各种图形函数,必须首先进行图形输出初始化,必要时进行模式设置(如果要改变默认显出初始化,必要时进行模式设置(如果要改变默认显示模式时)。本节及下一节中在

17、使用各种图形函数时,示模式时)。本节及下一节中在使用各种图形函数时,均假定已进入图形方式,且当前显示模式对应的分辨均假定已进入图形方式,且当前显示模式对应的分辨率为率为640640480480。 屏幕上的默认坐标系左上角为(屏幕上的默认坐标系左上角为(0 0,0 0),右下角为),右下角为(列数(列数-1 -1,行数,行数-1 -1)。横坐标轴为)。横坐标轴为x x轴,纵坐标轴为轴,纵坐标轴为y y轴,轴,x x轴正方向朝右,轴正方向朝右,y y轴正方向朝下。以分辨率轴正方向朝下。以分辨率640640480480为例,在屏幕上为例,在屏幕上x x和和y y的最小值都是的最小值都是0 0,最大值

18、,最大值分别为分别为640640和和480480。在屏幕上作图的很多函数都涉及到。在屏幕上作图的很多函数都涉及到坐标点(坐标点(x,yx,y)。下面介绍各种函数。)。下面介绍各种函数。 10.2.1 10.2.1 绝对移动函数绝对移动函数movetomoveto和相对移动函数和相对移动函数函数首部函数首部分别为:分别为:void moveto(int x,intvoid moveto(int x,int y) y)void moverel(int dx,int dyvoid moverel(int dx,int dy) )其中其中x x、y y表示坐标点,表示坐标点,dxdx、dydy分别表示

19、针对当前点的横坐分别表示针对当前点的横坐标增量和纵坐标增量。函数标增量和纵坐标增量。函数movetomoveto的功能是将点的功能是将点(x,y)(x,y)作作为当前点,作为后边绘图的默认起点。函数为当前点,作为后边绘图的默认起点。函数moverelmoverel的的功能是将当前点移动相对位置后的值作为当前点。功能是将当前点移动相对位置后的值作为当前点。 10.2.2 10.2.2 获取当前点的函数获取当前点的函数getxgetx和和getygety函数首部分别为:函数首部分别为:int getx(void)int getx(void)int getyint gety(void)(void)这

20、两个函数分别返回当前点的这两个函数分别返回当前点的x x坐标和坐标和y y坐标。坐标。10.2.3 10.2.3 设置颜色的函数设置颜色的函数setbkcolorsetbkcolor和和setcolorsetcolor函数首部分别为:函数首部分别为:void setbkcolor(intvoid setbkcolor(int color) color)void setcolor(intvoid setcolor(int color) color)前者的作用是设置背景色,后者的作用是设置前景色。前者的作用是设置背景色,后者的作用是设置前景色。其中其中colorcolor表示一个整数,不同的整数代

21、表不同的颜色。表示一个整数,不同的整数代表不同的颜色。各种颜色与整数及符号常数对应情况如表各种颜色与整数及符号常数对应情况如表10-110-1所示。所示。 符号常数数值对应颜色符号常数数值对应颜色black0黑darkgray8深灰blue1蓝lightblue9淡蓝green2绿lightgreen10淡绿cran3青lightcran11淡青red4红lightred12淡红magenta5洋红lightmagenta13淡洋红brown6棕yellow14黄lightgray7淡灰white15白表10-1 屏幕颜色及对应数值表 10.2.4 10.2.4 获取颜色的函数获取颜色的函数g

22、etbkcolorgetbkcolor和和getcolorgetcolor函数首部分别为:函数首部分别为:int getbkcolor(void)int getbkcolor(void)int setcolorint setcolor(void)(void)前者返回当前背景色对应的数值,后者返回当前前景色前者返回当前背景色对应的数值,后者返回当前前景色对应的数值。对应的数值。10.2.5 清除屏幕函数清除屏幕函数cleardevice函数首部为:函数首部为:void cleardevicevoid cleardevice(void)(void)函数功能:将屏幕上已有内容清除掉。函数功能:将屏幕

23、上已有内容清除掉。 10.2.6 10.2.6 获取像素和画像素的函数获取像素和画像素的函数getpixelgetpixel和和putpixelputpixel函数首部分别为:函数首部分别为:unsigned getpixel(int x,intunsigned getpixel(int x,int y) y)void putpixel(int x,int y,intvoid putpixel(int x,int y,int color) color)其中其中(x,y)(x,y)是屏幕坐标,是屏幕坐标,colorcolor是颜色。函数是颜色。函数getpixelgetpixel的功能是的功能是

24、获取屏幕上获取屏幕上(x,y)(x,y)处的颜色;函数处的颜色;函数putpixelputpixel的功能是在屏的功能是在屏幕上幕上(x,y)(x,y)处画颜色为处画颜色为colorcolor的点。的点。下面程序画出在下面程序画出在-100 x100-100 x100内的一段抛物线,颜色取白内的一段抛物线,颜色取白色。程序运行结果如图色。程序运行结果如图10-210-2所示。所示。图10-2 抛物线 #include#includemain()main()int x,y;int x,y; int graphdriver=detect,graphmode; int graphdriver=det

25、ect,graphmode; initgraph (&graphdriver,&graphmode,c:tc); initgraph (&graphdriver,&graphmode,c:tc); setgraphmode setgraphmode(2); /(2); /* *对对vgavga显卡,模式显卡,模式2 2对应的分对应的分辨率为辨率为640640480480* */ / for (x=-100; x=100;x+)for (x=-100; x=100;x+) y=1.0/100 y=1.0/100* *x x* *x; x; putpixel put

26、pixel (x,y,white); (x,y,white); 10.2.7 画线段的函数画线段的函数line、lineto和和linerel函数首部函数首部分别为:分别为:void line (int x1,int y1,int x2,intvoid line (int x1,int y1,int x2,int y2) y2)void lineto (int x,intvoid lineto (int x,int y) y)void linerel (int dx,int dyvoid linerel (int dx,int dy) )其中其中x x、y y表示坐标点,表示坐标点,dxdx、

27、dydy分别表示针对当前点的横坐分别表示针对当前点的横坐标增量和纵坐标增量。函数标增量和纵坐标增量。函数lineline的功能是从点的功能是从点( (x1,y1)x1,y1)到到( (x2,y2)x2,y2)画线段;函数画线段;函数linetolineto的功能是从当前点到点的功能是从当前点到点( (x,y)x,y)画画线段;函数线段;函数linerellinerel的功能是从当前点的功能是从当前点( (x0,y0)x0,y0)到点到点( (x0+dx,y0+dyx0+dx,y0+dy) )画线段。画线段。 10.2.8 设置画线类型的函数设置画线类型的函数setlinestyle函数首部为:

28、函数首部为:void setlinestyle(int linestyle,unsigned upattern,int thickness)其中,参数其中,参数linestyle代表直线类型,代表直线类型,upattern代表图案代表图案(一般取(一般取0),),thickness代表直线粗细。例如下面程序:代表直线粗细。例如下面程序: #include main() int graphdriver=detect,graphmode; initgraph (&graphdriver,&graphmode,c:tc); setgraphmode (2); /*对对vga显卡,模式

29、显卡,模式2对应的对应的分辨率为分辨率为640480*/ setlinestyle (0,0,0); line(200,208,500,208); setlinestyle (0,0,3); line (200,216,500,216); setlinestyle (1,0,3); line (200,224,500,224);画出的三个线段如图10-3所示。 图10-3 不同类型的直线 10.2.9 画矩形的函数画矩形的函数rectangle和画实心矩形的函和画实心矩形的函数数bar函数首部函数首部分别为:分别为:void rectangle(int left,int top,int rig

30、ht,intvoid rectangle(int left,int top,int right,int bottom) bottom)void bar(int left,int top,int right,intvoid bar(int left,int top,int right,int bottom) bottom)其中其中( (left,top)left,top)和和( (right,bottom)right,bottom)分别代表矩形的左上角分别代表矩形的左上角和右下角在屏幕上的坐标。函数和右下角在屏幕上的坐标。函数rectanglerectangle的功能是的功能是画矩形;函数画矩形

31、;函数barbar的功能是画实心矩形。的功能是画实心矩形。 10.2.10 画圆、圆弧、椭圆弧、椭圆扇区的函数画圆、圆弧、椭圆弧、椭圆扇区的函数circle、arc、ellipse和和sector函数首部函数首部分别为:分别为:void circle (int x,int y,int radius)void arc (int x,int y,int stangle,int endangle,int radius)void ellipse (int x,int y,int stangle,int endangle,int xradius,int yradius)void sector (int

32、x,int y,int stangle,int endangle,int xradius,int yradius)其中其中x x、y y为圆心或椭圆中心的坐标,为圆心或椭圆中心的坐标,stanglestangle、endangleendangle为为角度的初值和终值(角度以度为单位),角度的初值和终值(角度以度为单位),radiusradius为圆的为圆的半径,半径,xradiusxradius和和yradiusyradius分别为椭圆的长半轴和短半轴。分别为椭圆的长半轴和短半轴。函数函数circlecircle的功能是画以的功能是画以(x,y)(x,y)为圆心,以为圆心,以radiusrad

33、ius为半径的圆;为半径的圆;函数函数arcarc的功能是画一段圆弧,对应角度从的功能是画一段圆弧,对应角度从stanglestangle到到endangleendangle;函数;函数ellipseellipse的功能是画一段椭圆弧,当然当角的功能是画一段椭圆弧,当然当角度范围为度范围为0 0360360时画出椭圆;函数时画出椭圆;函数sectorsector的功能是画的功能是画一个扇区,即由角度为一个扇区,即由角度为stanglestangle和和endangleendangle对应的半径以对应的半径以及对应椭圆弧所围成的实心区域。及对应椭圆弧所围成的实心区域。10.2.11 10.2.1

34、1 画多边形的函数画多边形的函数drawpolydrawpoly函数首部为:函数首部为:void drawpoly (int numpoints,int void drawpoly (int numpoints,int * *polypointspolypoints) )其中,其中,numpointsnumpoints表示多边形的顶点数;表示多边形的顶点数;polypointspolypoints包包含了顶点的全部坐标。因为是用首尾相同的顶点序列含了顶点的全部坐标。因为是用首尾相同的顶点序列来表示封闭的多边形,所以来表示封闭的多边形,所以numpointsnumpoints要比普通意义要比普通

35、意义下的顶点数多下的顶点数多1 1,polypointspolypoints中的第一个和最后一个顶中的第一个和最后一个顶点的坐标相同。例如若要画顶点序列点的坐标相同。例如若要画顶点序列(100,100)(100,100),(120,110)(120,110),(120,120)(120,120),(100,130)(100,130),(80,120)(80,120),(80,110)(80,110)构构成的多边形,可用如下程序:成的多边形,可用如下程序: #include#includemain()main() int graphdriver=detect,graphmode; int gra

36、phdriver=detect,graphmode;initgraph(&graphdriver,&graphmode,c:tc); initgraph(&graphdriver,&graphmode,c:tc); setgraphmodesetgraphmode(2); /(2); /* *对对vgavga显卡,模式显卡,模式2 2对应的分辨率为对应的分辨率为640640480480* */ / int int polypoints14=100,100,120,110,120,120,100,130,80,120,80,110,100,1polypoints1

37、4=100,100,120,110,120,120,100,130,80,120,80,110,100,100;00;drawpoly(7,polypointsdrawpoly(7,polypoints); ); 画出的六边形如图10-4所示。 图10-4 六边形 10.2.12 设置封闭区域填充式样和颜色的函数设置封闭区域填充式样和颜色的函数setfillstyle函数首部为:函数首部为:void setfillstyle(int pattern,intvoid setfillstyle(int pattern,int color) color)其中,参数其中,参数patternpatter

38、n表示图形模式(即样式,详见表表示图形模式(即样式,详见表10-10-2 2),),colorcolor代表颜色。例如:代表颜色。例如:setfillstylesetfillstyle (solid_fill,white); / (solid_fill,white); /* *表示以实填充和表示以实填充和取白色)取白色)/ / 符号常量数 值含 义empty_fill0以背景颜色填充solid_fill1以实填充line_fill2以直线填充表10-2 填充式样的规定 ltslash_fill3以斜线填充(阴影线)slash_fill4以粗斜线填充(粗阴影线)bkslash_fill5以粗反斜

39、线填充(粗阴影线)ltbkslash_fill6以反斜线填充(阴影线)hatch_fill7以直方网格线填充xhatch_fill8以斜网格线填充integerleave_fill9以间隔点填充wide_dot_fill10以稀疏点填充close_dot_fill11以密集点填充user_fill12以用户定义样式填充符号常量数 值含 义10.2.13 10.2.13 封闭区域填充的函数封闭区域填充的函数floodfillfloodfill函数首部为:函数首部为:void floodfill(int x,int y,intvoid floodfill(int x,int y,int borde

40、r) border)其中其中(x,y)(x,y)是封闭图形内的任一点,是封闭图形内的任一点,borderborder是封闭图是封闭图形的边框颜色。需要注意的是:形的边框颜色。需要注意的是:(1 1)由)由setcolorsetcolor确定的封闭图形的边框颜色必须和确定的封闭图形的边框颜色必须和borderborder一致,否则会填充到别处。不过由一致,否则会填充到别处。不过由setfillstylesetfillstyle确定的填充颜色可以不同。确定的填充颜色可以不同。(2 2)点)点(x,y)(x,y)必须位于封闭图形之内。若在边界上,必须位于封闭图形之内。若在边界上,则填充无效;若在界外

41、,则在外部填充。则填充无效;若在界外,则在外部填充。下面程序是画一个以点下面程序是画一个以点(300,100)(300,100)为中心、长半轴为为中心、长半轴为4040、短半轴为、短半轴为2020的椭圆,并在其内用红色反斜线填的椭圆,并在其内用红色反斜线填充,边界使用默认的白色。程序运行结果如图充,边界使用默认的白色。程序运行结果如图10-510-5所示。所示。 图10-5 椭圆内填充 # #includeinclude main() main() int graphdriver=detect,graphmode; int graphdriver=detect,graphmode; initg

42、raph(&graphdriver,&graphmode,c:tc); initgraph(&graphdriver,&graphmode,c:tc); setgraphmode setgraphmode(2); /(2); /* *对对vgavga显卡,模式显卡,模式2 2对应的分辨率对应的分辨率为为640640480480* */ / setfillstylesetfillstyle(ltbkslash,red);(ltbkslash,red); ellipse(300,100,0,360,40,20) ellipse(300,100,0,360,40,20

43、); floodfillfloodfill(300,100,white);(300,100,white); 10.2.14 设置字体、方向及大小的函数设置字体、方向及大小的函数settextstyle函数首部为:函数首部为:void settextstyle(int font,int direction,int charsizevoid settextstyle(int font,int direction,int charsize) )其中,其中,fontfont代表字体,如表代表字体,如表10-310-3所示,所示,directiondirection代表输代表输出方向(出方向(0 0是水

44、平输出,是水平输出,1 1是垂直输出),是垂直输出),charsizecharsize代表代表字的大小,如表字的大小,如表10-410-4所示。所示。表表10-3 字体的符号常数表字体的符号常数表符号常量数值含义符号常量数值含义default_font0以背景颜色填充sansserif_font3无衬笔画字triplex_font1以实填充gothic_font4黑体笔画字small_font2以直线填充表10-3 字体的符号常数表 符号常量或数值含义符号常量或数值含义188点阵75656点阵21616点阵86464点阵32424点阵97272点阵43232点阵108080点阵54040点阵u

45、ser_char_size=0用户定义的大小64848点阵表10-4 字的大小的符号常数表 为在图形方式下输出文本,为在图形方式下输出文本,turbo cturbo c提供了一个提供了一个8 88 8点点阵表示其图像的字形库,也称字模。它嵌入在图形系阵表示其图像的字形库,也称字模。它嵌入在图形系统中,随图形系统初始化进入内存,这便是默认的情统中,随图形系统初始化进入内存,这便是默认的情况下文本输出的字体。另外。况下文本输出的字体。另外。turbo cturbo c图形接口软件图形接口软件还提供了四种笔画字体,分别为三倍笔画字体、小笔还提供了四种笔画字体,分别为三倍笔画字体、小笔画字体、无衬笔画

46、字体和黑体笔画字体。当选定了某画字体、无衬笔画字体和黑体笔画字体。当选定了某一字体时,其相应的笔画字库就被调入内存。一字体时,其相应的笔画字库就被调入内存。 10.2.15 10.2.15 输出字符串的函数输出字符串的函数outtextouttext和和outtextxyouttextxy函数首部分别为:函数首部分别为:void outtext(char void outtext(char * *textstringtextstring) )void outtextxy(int x,int y,char void outtextxy(int x,int y,char * *textstring

47、textstring) )其中其中(x,y)(x,y)代表字符串的左上角的像元坐标,代表字符串的左上角的像元坐标,textstring textstring 代代表字符串的指针。函数表字符串的指针。函数outtextouttext的功能是在当前坐标处输的功能是在当前坐标处输出字符串,函数出字符串,函数outtextxyouttextxy的功能是在的功能是在(x,y)(x,y)处输出字符串。处输出字符串。 下面程序的功能是在指定位置显示不同字体、不同大下面程序的功能是在指定位置显示不同字体、不同大小的字符串。程序运行结果如图小的字符串。程序运行结果如图10-610-6所示。所示。 # #incl

48、udeinclude main() main() int graphdriver=detect,graphmode; int graphdriver=detect,graphmode; initgraph (&graphdriver,&graphmode,c:tc); initgraph (&graphdriver,&graphmode,c:tc); settextstyle(0,0,1); settextstyle(0,0,1); outtextxy (5,1,abcdefg outtextxy (5,1,abcdefg) ); settextstyle (0

49、,0,3);settextstyle (0,0,3); outtextxy (5,10,abcdefg outtextxy (5,10,abcdefg) ); settextstyle (1,0,8);settextstyle (1,0,8); outtextxy (5,20,abcdefg outtextxy (5,20,abcdefg) ); 表表2-3 2-3 实型和双精度型数据实型和双精度型数据 图10-6 不同字体、不同大小的字符 10.2.16 设置窗口的函数设置窗口的函数setviewport和清除窗口的函数和清除窗口的函数clearviewport函数首部为:函数首部为:voi

50、d setviewport (int left,int top,int right,int bottom,intvoid setviewport (int left,int top,int right,int bottom,int clip) clip)void clearviewportvoid clearviewport (void) (void)其中,其中,( (left,top)left,top)和和( (right,bottom)right,bottom)分别代表窗口左上角和右分别代表窗口左上角和右下角相对于整个屏幕的坐标;下角相对于整个屏幕的坐标;clipclip取取0 0和和1

51、1两个值,分别代两个值,分别代表窗口以外的部分可以接触或不可以接触,即是窗口的表窗口以外的部分可以接触或不可以接触,即是窗口的内容能否溢出。内容能否溢出。使用窗口设置函数时有几点值得注意:使用窗口设置函数时有几点值得注意:(1 1)这样设置的窗口在屏幕上不显示边界,若要显示边界,)这样设置的窗口在屏幕上不显示边界,若要显示边界,可在设置窗口前画出与窗口边界重叠的矩形。可在设置窗口前画出与窗口边界重叠的矩形。(2 2)屏幕背景色和窗口背景色只能是同一种颜色。)屏幕背景色和窗口背景色只能是同一种颜色。(3 3)一旦设置了窗口,除非使用清除窗口函数,使用图形)一旦设置了窗口,除非使用清除窗口函数,使

52、用图形输出函数时均是针对窗口而言,窗口内任一点的像元坐标都输出函数时均是针对窗口而言,窗口内任一点的像元坐标都以窗口左上角作为相对的坐标原点。以窗口左上角作为相对的坐标原点。下面程序的功能是在屏幕上设置一个左上角和右下角坐标分下面程序的功能是在屏幕上设置一个左上角和右下角坐标分别为别为(100,100)(100,100)和和(200,200)(200,200)的窗口,用单线表示窗口边界,并的窗口,用单线表示窗口边界,并在窗口中心位置显示半径为在窗口中心位置显示半径为3030的圆,在圆内显示英文字母的圆,在圆内显示英文字母“a”a”。程序运行结果如图。程序运行结果如图10-710-7所示。所示。

53、 图10-7 在窗口相对位置输出图形 #include#includemain()main() int graphdriver=detect,graphmode; int graphdriver=detect,graphmode; initgraph (&graphdriver,&graphmode initgraph (&graphdriver,&graphmode,c:tc); ,c:tc); rectangle (100,100,200,200); rectangle (100,100,200,200); setviewport setviewport(1

54、00,100,200,200,1); (100,100,200,200,1); circle (50,50,30) circle (50,50,30) settextstyle(0,0,3); settextstyle(0,0,3); outtextxy outtextxy (38,38,a) (38,38,a); 10.2.17 将屏幕图像存入缓冲区的函数将屏幕图像存入缓冲区的函数getimage函数首部为:函数首部为:void getimage(int left,int top,int right,intvoid getimage(int left,int top,int right,in

55、t bottom bottom,void void * *bitmap)bitmap)其中其中( (left,top)left,top)和和( (right,bootomright,bootom) )分别代表图像左上角和右分别代表图像左上角和右下角的坐标。该函数的功能是将屏幕上左上角为下角的坐标。该函数的功能是将屏幕上左上角为( (left,top)left,top),右下角为,右下角为( (right,bootomright,bootom) )的矩形内的图像存储的矩形内的图像存储到到bitmapbitmap指向的内存缓冲区。指向的内存缓冲区。 10.2.18 将缓冲区的图形送往显示器的函数将缓冲区的图形送往显示器的函数putimage函数首部为:函数首部为:void putimage(int left,int top,void void putimage(int left,int top,void * *bitmap,intbitmap,int op) op)其中其中( (left,top)left,top)代表图像左上角的坐标。该函数的功能是将代表图像左上角的坐标。该函数的功能是将bitmapbitmap指向的内存缓冲区的图形送往显示器左上角为指向的内存缓冲区的图形送往显示器左上角为( (left,top)left,top)的矩形内显示;由的矩形内显示;由opop规定显

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论