大学实用C语言程序设计教程-陈建铎-课件PPT
收藏
资源目录
压缩包内文档预览:(预览前20页/共30页)
编号:21835855
类型:共享资源
大小:13.47MB
格式:ZIP
上传时间:2019-09-06
上传人:QQ24****1780
认证信息
个人认证
王**(实名认证)
浙江
IP属地:浙江
25
积分
- 关 键 词:
-
大学
实用
语言程序设计
教程
陈建
课件
ppt
- 资源描述:
-
大学实用C语言程序设计教程-陈建铎-课件PPT,大学,实用,语言程序设计,教程,陈建,课件,ppt
- 内容简介:
-
,到目前为止,我们是在系统默认的文本方式下设计和运行程序的。所谓文本方式,是以一个西文符号或汉字为基本操作单位,一屏的容量一般是25行,每行为80个西文符号或40个汉字。如果画图,就需要图形方式。所谓图形方式就是以一个像素(像元)为基本单位进行各种操作。一个像素是一个点,可以显示不同的颜色。如何进入图形方式,如何调用编译系统提供的各种图形函数绘图,是本章要介绍的主要内容。,第10章 图形处理,第10章 图形处理,10.1 图形输出初始化和显示模式设 10.2 绘图函数 10.3 图形处理应用实例,10.1 图形输出初始化和显示模式设置,10.1.1 图形输出初始化 本章开头已提到,如果要使用C语言画图,就需要图形方式。所谓图形方式就是以一个像素(像元)为基本单位进行各种操作。一个像素是一个点,可以显示不同的颜色。图形的品质取决于像素的多少,像素越多越清晰;如果用显示模式来表示,则分高分辨率和低分辨率显示模式。,显示模式与PC插槽中的显示适配器(显示卡)有关。例如,VGA适配器的显示模式从200行到480行不等,每行有640个像素。AGP适配器的显示模式有640480,800600,1024768,12801024等多种规格。同一个图形在不同的模式下显示,不仅分辨率有别,而且形状也不同。在640480模式下显示的图形,在640200模式下图形宽度不变,但实际高度会变大。 适配器的作用是把显示的字符和图形以数字形式存储在图形卡上的视频存储器(VRAM)中,再将其变成视频模拟信号送往显示器,如图10-1所示。,图10-1 主机、适配器、显示器的关系,C语言编译系统提供了许多画图函数,只要在程序中包含头文件graphics.h,便可以调用这些函数。计算机配有的显示器不同,其适配器类型也不同。在使用图形函数之前,必须先确定适配器类型,并选定其中的一种显示模式,然后启动相应的驱动程序。这一工作称为图形系统初始化,由下面的函数来完成。,void initgraph (int *graphdriver,int *graphmode,char *pathtodriver); 其中graphdriver和graphmode分别代表适配器类型和显示模式,pathtodriver是寻找图形驱动程序的路径。驱动程序一般以.bgi为扩展名,所在的目录通常为c:TC。,当适配器的类型未知时,可以通过下面的语句启动驱动程序: int graphdriver=DETECT,graphmode; initgraph ( 其中DETECT是字符常量,其数值为0。当graphdriver =DETECT时,函数initgraph又调用系统检测函数detectgraph进行硬件测试,确定适配器类型;然后将代表适配器类型的符号常数(或整型数)赋给graphdriver;同时将代表适配器的最高分辨率模式的符号常数(或整型数)赋给graphmode;最后启动驱动程序。,在C语言中提到的适配器类型是用一个整数来表示的,不同的适配器对应不同的整数。显示器模式也是用整数表示的,不同的显示模式对应不同的分辨率。也可以通过下面的程序来测定适配器类型和最高分辨率模式: void main() int graphdriver=DETECT,graphmode; initgraph( ,以VGA显示卡为例,测定结果: 9,2 然后用测得的结果,直接指定适配器类型和显示模式进行图形输出初始化: int graphdriver=9,graphmode=2; initgraph(,10.1.2 显示模式的设置 图形输出初始化以后,就可以使用各种图形函数。这里介绍获取显示模式范围的函数、设置显示模式的函数、获取适配器名称的函数和获取显示模式名称(包括分辨率和适配器名称)的函数。 10.1.2.1 获取显示模式范围的函数 函数原型: void getmoderange(int graphdriver,int *lowmode,int *himode); 其中,graphdriver代表适配器类型,通过参数lowmode和himode分别获得显示模式的最低和最高值。例如对于VGA显卡,用以下语句可得到显示模式的范围:,int lowmode,himode; getmoderange (9,lowmode,himode); printf (“%d,%d“, 其中,参数mode代表要设置的显示模式。例如对于VGA显卡,用以下函数调用语句可将显示模式设置为0(对应的分辨率为640200):,setgraphmode (0); 注意:在调用模式设置函数时,设置之前显示的内容会自动清除。 10.1.2.3 获取适配器名称的函数 函数原型: char *getdrivername (void); 函数返回值代表显示适配器的名称。例如对于VGA显卡,用以下语句可得到适配器名称:,char *drivername; drivername=getdrivername(); printf (“%s“, drivername); 结果:EGAVGA 10.1.2.4 获取显示模式名称(包括分辨率和显卡名称)的函数 函数原型: char *getmodename (int *mode_number); 其中,mode_number代表显示模式,函数返回值代表显示模式对应的名称(包括分辨率和显卡名称)。例如对于VGA显卡,用以下语句可得到显示模式为2的模式名称:,char *modename; modename=getmodename(2); printf (“%s“, modename); 结果:640480 VGA 本章随后几节使用其他绘图函数时,均假定在分辨率为640480对应的显示模式下进行。,10.1.3 退出图形方式 图形输出初始化也就是进入图形输出方式,那是由initgraph函数来完成的。进入图形方式后,才能使用各种图形函数。如果要退出图形方式,即恢复文本方式,就要使用另一个函数closegraph (),或称关闭图形方式的函数。 函数原型: void closegraph (void); 注意:关闭图形方式后,前面显示的图形会自动清除。,10.2 绘图函数,前一节介绍了图形方式初始化的函数和设置显示模式的函数,本节介绍绘制各种图形的函数。在C语言程序中,要使用各种图形函数,必须首先进行图形输出初始化,必要时进行模式设置(如果要改变默认显示模式时)。本节及下一节中在使用各种图形函数时,均假定已进入图形方式,且当前显示模式对应的分辨率为640480。 屏幕上的默认坐标系左上角为(0,0),右下角为(列数-1,行数-1)。横坐标轴为X轴,纵坐标轴为Y轴,X轴正方向朝右,Y轴正方向朝下。以分辨率640480为例,在屏幕上X和Y的最小值都是0,最大值分别为640和480。在屏幕上作图的很多函数都涉及到坐标点(x,y)。下面介绍各种函数。,10.2.1 绝对移动函数moveto和相对移动函数 函数首部分别为: void moveto(int x,int y) void moverel(int dx,int dy) 其中x、y表示坐标点,dx、dy分别表示针对当前点的横坐标增量和纵坐标增量。函数moveto的功能是将点(x,y)作为当前点,作为后边绘图的默认起点。函数moverel的功能是将当前点移动相对位置后的值作为当前点。,10.2.2 获取当前点的函数getx和gety 函数首部分别为: int getx(void) int gety(void) 这两个函数分别返回当前点的X坐标和Y坐标。 10.2.3 设置颜色的函数setbkcolor和setcolor,函数首部分别为: void setbkcolor(int color) void setcolor(int color) 前者的作用是设置背景色,后者的作用是设置前景色。其中color表示一个整数,不同的整数代表不同的颜色。各种颜色与整数及符号常数对应情况如表10-1所示。,表10-1 屏幕颜色及对应数值表,10.2.4 获取颜色的函数getbkcolor和getcolor 函数首部分别为: int getbkcolor(void) int setcolor(void) 前者返回当前背景色对应的数值,后者返回当前前景色对应的数值。 10.2.5 清除屏幕函数cleardevice 函数首部为: void cleardevice(void) 函数功能:将屏幕上已有内容清除掉。,10.2.6 获取像素和画像素的函数getpixel和putpixel 函数首部分别为: unsigned getpixel(int x,int y) void putpixel(int x,int y,int color) 其中(x,y)是屏幕坐标,color是颜色。函数getpixel的功能是获取屏幕上(x,y)处的颜色;函数putpixel的功能是在屏幕上(x,y)处画颜色为color的点。 下面程序画出在-100x100内的一段抛物线,颜色取白色。程序运行结果如图10-2所示。,图10-2 抛物线,#include main() int x,y; int graphdriver=DETECT,graphmode; initgraph ( ,10.2.7 画线段的函数line、lineto和linerel 函数首部分别为: void line (int x1,int y1,int x2,int y2) void lineto (int x,int y) void linerel (int dx,int dy) 其中x、y表示坐标点,dx、dy分别表示针对当前点的横坐标增量和纵坐标增量。函数line的功能是从点(x1,y1)到(x2,y2)画线段;函数lineto的功能是从当前点到点(x,y)画线段;函数linerel的功能是从当前点(x0,y0)到点(x0+dx,y0+dy)画线段。,10.2.8 设置画线类型的函数setlinestyle 函数首部为: void setlinestyle(int linestyle,unsigned upattern,int thickness) 其中,参数linestyle代表直线类型,upattern代表图案(一般取0),thickness代表直线粗细。例如下面程序:,#include main() int graphdriver=DETECT,graphmode; initgraph ( ,画出的三个线段如图10-3所示。,图10-3 不同类型的直线,10.2.9 画矩形的函数rectangle和画实心矩形的函数bar 函数首部分别为: void rectangle(int left,int top,int right,int bottom) void bar(int left,int top,int right,int bottom) 其中(left,top)和(right,bottom)分别代表矩形的左上角和右下角在屏幕上的坐标。函数rectangle的功能是画矩形;函数bar的功能是画实心矩形。,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 x,int y,int stangle,int endangle,int xradius,int yradius),其中x、y为圆心或椭圆中心的坐标,stangle、endangle为角度的初值和终值(角度以度为单位),radius为圆的半径,xradius和yradius分别为椭圆的长半轴和短半轴。函数circle的功能是画以(x,y)为圆心,以radius为半径的圆;函数arc的功能是画一段圆弧,对应角度从stangle到endangle;函数ellipse的功能是画一段椭圆弧,当然当角度范围为0360时画出椭圆;函数sector的功能是画一个扇区,即由角度为stangle和endangle对应的半径以及对应椭圆弧所围成的实心区域。,10.2.11 画多边形的函数drawpoly 函数首部为: void drawpoly (int numpoints,int *polypoints) 其中,numpoints表示多边形的顶点数;polypoints包含了顶点的全部坐标。因为是用首尾相同的顶点序列来表示封闭的多边形,所以numpoints要比普通意义下的顶点数多1,polypoints中的第一个和最后一个顶点的坐标相同。例如若要画顶点序列(100,100),(120,110),(120,120),(100,130),(80,120),(80,110)构成的多边形,可用如下程序:,#include main() int graphdriver=DETECT,graphmode; initgraph( ,画出的六边形如图10-4所示。,图10-4 六边形,10.2.12 设置封闭区域填充式样和颜色的函数setfillstyle 函数首部为: void setfillstyle(int pattern,int color) 其中,参数pattern表示图形模式(即样式,详见表10-2),color代表颜色。例如: setfillstyle (SOLID_FILL,WHITE); /*表示以实填充和取白色)/,表10-2 填充式样的规定,10.2.13 封闭区域填充的函数floodfill 函数首部为: void floodfill(int x,int y,int border) 其中(x,y)是封闭图形内的任一点,border是封闭图形的边框颜色。需要注意的是: (1)由setcolor确定的封闭图形的边框颜色必须和border一致,否则会填充到别处。不过由setfillstyle确定的填充颜色可以不同。 (2)点(x,y)必须位于封闭图形之内。若在边界上,则填充无效;若在界外,则在外部填充。,下面程序是画一个以点(300,100)为中心、长半轴为40、短半轴为20的椭圆,并在其内用红色反斜线填充,边界使用默认的白色。程序运行结果如图10-5所示。,图10-5 椭圆内填充,#include main() int graphdriver=DETECT,graphmode; initgraph( ,10.2.14 设置字体、方向及大小的函数settextstyle 函数首部为: void settextstyle(int font,int direction,int charsize) 其中,font代表字体,如表10-3所示,direction代表输出方向(0是水平输出,1是垂直输出),charsize代表字的大小,如表10-4所示。 表10-3 字体的符号常数表,表10-3 字体的符号常数表,表10-4 字的大小的符号常数表,为在图形方式下输出文本,Turbo C提供了一个88点阵表示其图像的字形库,也称字模。它嵌入在图形系统中,随图形系统初始化进入内存,这便是默认的情况下文本输出的字体。另外。Turbo C图形接口软件还提供了四种笔画字体,分别为三倍笔画字体、小笔画字体、无衬笔画字体和黑体笔画字体。当选定了某一字体时,其相应的笔画字库就被调入内存。,10.2.15 输出字符串的函数outtext和outtextxy 函数首部分别为: void outtext(char *textstring) void outtextxy(int x,int y,char *textstring) 其中(x,y)代表字符串的左上角的像元坐标,textstring 代表字符串的指针。函数outtext的功能是在当前坐标处输出字符串,函数outtextxy的功能是在(x,y)处输出字符串。 下面程序的功能是在指定位置显示不同字体、不同大小的字符串。程序运行结果如图10-6所示。,#include main() int graphdriver=DETECT,graphmode; initgraph ( outtextxy (5,20,“abcdefg“); ,表2-3 实型和双精度型数据,图10-6 不同字体、不同大小的字符,10.2.16 设置窗口的函数setviewport和清除窗口的函数clearviewport 函数首部为: void setviewport (int left,int top,int right,int bottom,int clip) void clearviewport (void) 其中,(left,top)和(right,bottom)分别代表窗口左上角和右下角相对于整个屏幕的坐标;clip取0和1两个值,分别代表窗口以外的部分可以接触或不可以接触,即是窗口的内容能否溢出。,使用窗口设置函数时有几点值得注意: (1)这样设置的窗口在屏幕上不显示边界,若要显示边界,可在设置窗口前画出与窗口边界重叠的矩形。 (2)屏幕背景色和窗口背景色只能是同一种颜色。 (3)一旦设置了窗口,除非使用清除窗口函数,使用图形输出函数时均是针对窗口而言,窗口内任一点的像元坐标都以窗口左上角作为相对的坐标原点。 下面程序的功能是在屏幕上设置一个左上角和右下角坐标分别为(100,100)和(200,200)的窗口,用单线表示窗口边界,并在窗口中心位置显示半径为30的圆,在圆内显示英文字母“A”。程序运行结果如图10-7所示。,图10-7 在窗口相对位置输出图形,#include main() int graphdriver=DETECT,graphmode; initgraph ( outtextxy (38,38,“A“); ,10.2.17 将屏幕图像存入缓冲区的函数getimage 函数首部为: void getimage(int left,int top,int right,int bottom,void *bitmap) 其中(left,top)和(right,bootom)分别代表图像左上角和右下角的坐标。该函数的功能是将屏幕上左上角为(left,top),右下角为(right,bootom)的矩形内的图像存储到bitmap指向的内存缓冲区。,10.2.18 将缓冲区的图形送往显示器的函数putimage 函数首部为: void putimage(int left,int top,void *bitmap,int op) 其中(left,top)代表图像左上角的坐标。该函数的功能是将bitmap指向的内存缓冲区的图形送往显示器左上角为(left,top)的矩形内显示;由op规定显示方式,一般取复制(COPY_PUT)。 10.2.19 测定缓冲区大小的函数imagesize,函数首部为: unsigned imagesize(int left,int top,int right,int bottom) 其中(left,top)和(right,bootom)分别代表图像左上角和右下角的坐标。该函数的返回值是屏幕上左上角坐标为(left,top),右下角为(right,bootom)的矩形内的图像所占的字节数。 需要说明的是,图形函数不在ANSI公布的标准之中,但各种C编译系统都提供了许多图形函数供用户调用。本章介绍的各种图形函数,其他C编译系统也同样提供,不过有些函数的名称略有不同。读者若使用不同的C编译系统时,可查阅有关使用手册。 a,b,10.3 图形处理应用实例,本节举两个石油化工方面的实例,利用前面介绍的图形函数,绘制所需表格或图形。 【例10-1】输出如表10-5所示。,表10-5 稠油的分类,程序如下: #include #include int main() int x,y,drv=0,mode; initgraph ( /*1,0,1分别表示字体、水平打印方式、字号*/,outtextxy (200,10,“表10-4 稠油的分类“); /* 输出表格标题 */ line (10,30,500,30); /*以下八条语句画表格横线和竖线*/ line (10,90,500,90); line (10,120,500,120); line (10,150,500,150); line (10,30,10,150); line (500,30,500,150); line (173,30,173,150); line (336,30,336,150);,line (10,30,173,90); /* 画斜线 */ outtextxy (90,35,“标“); /* 以下填写表中内容 */ outtextxy (140,45,“准“); outtextxy (30,50,“种“); outtextxy (80,60,“类“); outtextxy(193,40,“动力粘度(PAs) “); outtextxy(220,60,“(50C)“); outtextxy(380,35,“相对密度“); outtextxy(390,60,“d“); outtextxy(405,55,“15.6“); outtextxy(405,70,“15.6“);,outtextxy(50,95,“稠 油“); outtextxy(220,95,“10100“); outtextxy(380,95,“0.9341.000“); outtextxy(50,125,“沥 青“); outtextxy(220,125,“100“); outtextxy(380,125,“1.000“); outtextxy(250,400,“Any key to continue ! “);,getch(); /* 按任意键结束*/ closegraph(); return(1); , 到目前为止,我们是在系统默认的文本方式下设计和运行程序的。所谓文本方式,是以一个西文符号或汉字为基本操作单位,一屏的容量一般是25行,每行为80个西文符号或40个汉字。如果画图,就需要图形方式。所谓图形方式就是以一个像素(像元)为基本单位进行各种操作。一个像素是一个点,可以显示不同的颜色。如何进入图形方式,如何调用编译系统提供的各种图形函数绘图,是本章要介绍的主要内容。 第10章 图形处理第10章 图形处理 10.1 图形输出初始化和显示模式设 10.2 绘图函数 10.3 图形处理应用实例10.1 图形输出初始化和显示模式设置10.1.1 图形输出初始化本章开头已提到,如果要使用C语言画图,就需要图形方式。所谓图形方式就是以一个像素(像元)为基本单位进行各种操作。一个像素是一个点,可以显示不同的颜色。图形的品质取决于像素的多少,像素越多越清晰;如果用显示模式来表示,则分高分辨率和低分辨率显示模式。显示模式与PC插槽中的显示适配器(显示卡)有关。例如,VGA适配器的显示模式从200行到480行不等,每行有640个像素。AGP适配器的显示模式有640480,800600,1024768,12801024等多种规格。同一个图形在不同的模式下显示,不仅分辨率有别,而且形状也不同。在640480模式下显示的图形,在640200模式下图形宽度不变,但实际高度会变大。适配器的作用是把显示的字符和图形以数字形式存储在图形卡上的视频存储器(VRAM)中,再将其变成视频模拟信号送往显示器,如图10-1所示。图10-1 主机、适配器、显示器的关系 C语言编译系统提供了许多画图函数,只要在程序中包含头文件graphics.h,便可以调用这些函数。计算机配有的显示器不同,其适配器类型也不同。在使用图形函数之前,必须先确定适配器类型,并选定其中的一种显示模式,然后启动相应的驱动程序。这一工作称为图形系统初始化,由下面的函数来完成。void initgraph (int *graphdriver,int *graphmode,char *pathtodriver);其中graphdriver和graphmode分别代表适配器类型和显示模式,pathtodriver是寻找图形驱动程序的路径。驱动程序一般以.bgi为扩展名,所在的目录通常为c:TC。 当适配器的类型未知时,可以通过下面的语句启动驱动程序:int graphdriver=DETECT,graphmode;initgraph (&graphdriver,&graphmode,c:TC);其中DETECT是字符常量,其数值为0。当graphdriver =DETECT时,函数initgraph又调用系统检测函数detectgraph进行硬件测试,确定适配器类型;然后将代表适配器类型的符号常数(或整型数)赋给graphdriver;同时将代表适配器的最高分辨率模式的符号常数(或整型数)赋给graphmode;最后启动驱动程序。 在C语言中提到的适配器类型是用一个整数来表示的,不同的适配器对应不同的整数。显示器模式也是用整数表示的,不同的显示模式对应不同的分辨率。也可以通过下面的程序来测定适配器类型和最高分辨率模式:void main()int graphdriver=DETECT,graphmode;initgraph(&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.1 获取显示模式范围的函数函数原型:void getmoderange(int graphdriver,int *lowmode,int *himode);其中,graphdriver代表适配器类型,通过参数lowmode和himode分别获得显示模式的最低和最高值。例如对于VGA显卡,用以下语句可得到显示模式的范围: int lowmode,himode;getmoderange (9,lowmode,himode);printf (%d,%d, &lowmode,&himode);例如,若得到0,2,说明显示模式的范围为0,1,2。10.1.2.2 设置显示模式的函数函数原型:void setgraphmode (int mode);其中,参数mode代表要设置的显示模式。例如对于VGA显卡,用以下函数调用语句可将显示模式设置为0(对应的分辨率为640200): setgraphmode (0);注意:在调用模式设置函数时,设置之前显示的内容会自动清除。 10.1.2.3 获取适配器名称的函数函数原型:char *getdrivername (void);函数返回值代表显示适配器的名称。例如对于VGA显卡,用以下语句可得到适配器名称:char *drivername;drivername=getdrivername();printf (%s, drivername);结果:EGAVGA10.1.2.4 获取显示模式名称(包括分辨率和显卡名称)的函数函数原型:char *getmodename (int *mode_number);其中,mode_number代表显示模式,函数返回值代表显示模式对应的名称(包括分辨率和显卡名称)。例如对于VGA显卡,用以下语句可得到显示模式为2的模式名称: char *modename;modename=getmodename(2);printf (%s, modename);结果:640480 VGA本章随后几节使用其他绘图函数时,均假定在分辨率为640480对应的显示模式下进行。10.1.3 退出图形方式图形输出初始化也就是进入图形输出方式,那是由initgraph函数来完成的。进入图形方式后,才能使用各种图形函数。如果要退出图形方式,即恢复文本方式,就要使用另一个函数closegraph (),或称关闭图形方式的函数。函数原型:void closegraph (void);注意:关闭图形方式后,前面显示的图形会自动清除。 10.2 绘图函数 前一节介绍了图形方式初始化的函数和设置显示模式的函数,本节介绍绘制各种图形的函数。在C语言程序中,要使用各种图形函数,必须首先进行图形输出初始化,必要时进行模式设置(如果要改变默认显示模式时)。本节及下一节中在使用各种图形函数时,均假定已进入图形方式,且当前显示模式对应的分辨率为640480。 屏幕上的默认坐标系左上角为(0,0),右下角为(列数-1,行数-1)。横坐标轴为X轴,纵坐标轴为Y轴,X轴正方向朝右,Y轴正方向朝下。以分辨率640480为例,在屏幕上X和Y的最小值都是0,最大值分别为640和480。在屏幕上作图的很多函数都涉及到坐标点(x,y)。下面介绍各种函数。 10.2.1 绝对移动函数moveto和相对移动函数函数首部分别为:void moveto(int x,int y)void moverel(int dx,int dy)其中x、y表示坐标点,dx、dy分别表示针对当前点的横坐标增量和纵坐标增量。函数moveto的功能是将点(x,y)作为当前点,作为后边绘图的默认起点。函数moverel的功能是将当前点移动相对位置后的值作为当前点。 10.2.2 获取当前点的函数getx和gety函数首部分别为:int getx(void)int gety(void)这两个函数分别返回当前点的X坐标和Y坐标。10.2.3 设置颜色的函数setbkcolor和setcolor函数首部分别为:void setbkcolor(int color)void setcolor(int color)前者的作用是设置背景色,后者的作用是设置前景色。其中color表示一个整数,不同的整数代表不同的颜色。各种颜色与整数及符号常数对应情况如表10-1所示。 表10-1 屏幕颜色及对应数值表 10.2.4 获取颜色的函数getbkcolor和getcolor函数首部分别为:int getbkcolor(void)int setcolor(void)前者返回当前背景色对应的数值,后者返回当前前景色对应的数值。10.2.5 清除屏幕函数cleardevice函数首部为:void cleardevice(void)函数功能:将屏幕上已有内容清除掉。 10.2.6 获取像素和画像素的函数getpixel和putpixel函数首部分别为:unsigned getpixel(int x,int y)void putpixel(int x,int y,int color)其中(x,y)是屏幕坐标,color是颜色。函数getpixel的功能是获取屏幕上(x,y)处的颜色;函数putpixel的功能是在屏幕上(x,y)处画颜色为color的点。下面程序画出在-100x100内的一段抛物线,颜色取白色。程序运行结果如图10-2所示。图10-2 抛物线 #includemain()int x,y; int graphdriver=DETECT,graphmode; initgraph (&graphdriver,&graphmode,c:TC); setgraphmode(2); /*对VGA显卡,模式2对应的分辨率为640480*/ for (x=-100; x=100;x+) y=1.0/100*x*x; putpixel (x,y,WHITE);10.2.7 画线段的函数line、lineto和linerel函数首部分别为:void line (int x1,int y1,int x2,int y2)void lineto (int x,int y)void linerel (int dx,int dy)其中x、y表示坐标点,dx、dy分别表示针对当前点的横坐标增量和纵坐标增量。函数line的功能是从点(x1,y1)到(x2,y2)画线段;函数lineto的功能是从当前点到点(x,y)画线段;函数linerel的功能是从当前点(x0,y0)到点(x0+dx,y0+dy)画线段。 10.2.8 设置画线类型的函数setlinestyle函数首部为: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显卡,模式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 right,int bottom)void bar(int left,int top,int right,int bottom)其中(left,top)和(right,bottom)分别代表矩形的左上角和右下角在屏幕上的坐标。函数rectangle的功能是画矩形;函数bar的功能是画实心矩形。 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 x,int y,int stangle,int endangle,int xradius,int yradius)其中x、y为圆心或椭圆中心的坐标,stangle、endangle为角度的初值和终值(角度以度为单位),radius为圆的半径,xradius和yradius分别为椭圆的长半轴和短半轴。函数circle的功能是画以(x,y)为圆心,以radius为半径的圆;函数arc的功能是画一段圆弧,对应角度从stangle到endangle;函数ellipse的功能是画一段椭圆弧,当然当角度范围为0360时画出椭圆;函数sector的功能是画一个扇区,即由角度为stangle和endangle对应的半径以及对应椭圆弧所围成的实心区域。10.2.11 画多边形的函数drawpoly函数首部为:void drawpoly (int numpoints,int *polypoints)其中,numpoints表示多边形的顶点数;polypoints包含了顶点的全部坐标。因为是用首尾相同的顶点序列来表示封闭的多边形,所以numpoints要比普通意义下的顶点数多1,polypoints中的第一个和最后一个顶点的坐标相同。例如若要画顶点序列(100,100),(120,110),(120,120),(100,130),(80,120),(80,110)构成的多边形,可用如下程序: #includemain() int graphdriver=DETECT,graphmode;initgraph(&graphdriver,&graphmode,c:TC); setgraphmode(2); /*对VGA显卡,模式2对应的分辨率为640480*/ int polypoints14=100,100,120,110,120,120,100,130,80,120,80,110,100,100;drawpoly(7,polypoints); 画出的六边形如图10-4所示。 图10-4 六边形 10.2.12 设置封闭区域填充式样和颜色的函数setfillstyle函数首部为:void setfillstyle(int pattern,int color)其中,参数pattern表示图形模式(即样式,详见表10-2),color代表颜色。例如:setfillstyle (SOLID_FILL,WHITE); /*表示以实填充和取白色)/ 表10-2 填充式样的规定 10.2.13 封闭区域填充的函数floodfill函数首部为:void floodfill(int x,int y,int border)其中(x,y)是封闭图形内的任一点,border是封闭图形的边框颜色。需要注意的是:(1)由setcolor确定的封闭图形的边框颜色必须和border一致,否则会填充到别处。不过由setfillstyle确定的填充颜色可以不同。(2)点(x,y)必须位于封闭图形之内。若在边界上,则填充无效;若在界外,则在外部填充。下面程序是画一个以点(300,100)为中心、长半轴为40、短半轴为20的椭圆,并在其内用红色反斜线填充,边界使用默认的白色。程序运行结果如图10-5所示。 图10-5 椭圆内填充 #include main() int graphdriver=DETECT,graphmode; initgraph(&graphdriver,&graphmode,c:TC); setgraphmode(2); /*对VGA显卡,模式2对应的分辨率为640480*/ setfillstyle(LTBKSLASH,RED); ellipse(300,100,0,360,40,20); floodfill(300,100,WHITE);10.2.14 设置字体、方向及大小的函数settextstyle函数首部为:void settextstyle(int font,int direction,int charsize)其中,font代表字体,如表10-3所示,direction代表输出方向(0是水平输出,1是垂直输出),charsize代表字的大小,如表10-4所示。表10-3 字体的符号常数表表10-3 字体的符号常数表 表10-4 字的大小的符号常数表 为在图形方式下输出文本,Turbo C提供了一个88点阵表示其图像的字形库,也称字模。它嵌入在图形系统中,随图形系统初始化进入内存,这便是默认的情况下文本输出的字体。另外。Turbo C图形接口软件还提供了四种笔画字体,分别为三倍笔画字体、小笔画字体、无衬笔画字体和黑体笔画字体。当选定了某一字体时,其相应的笔画字库就被调入内存。 10.2.15 输出字符串的函数outtext和outtextxy函数首部分别为:void outtext(char *textstring)void outtextxy(int x,int y,char *textstring)其中(x,y)代表字符串的左上角的像元坐标,textstring 代表字符串的指针。函数outtext的功能是在当前坐标处输出字符串,函数outtextxy的功能是在(x,y)处输出字符串。 下面程序的功能是在指定位置显示不同字体、不同大小的字符串。程序运行结果如图10-6所示。 #include main() int graphdriver=DETECT,graphmode; initgraph (&graphdriver,&graphmode,c:TC); settextstyle(0,0,1); outtextxy (5,1,abcdefg); settextstyle (0,0,3); outtextxy (5,10,abcdefg); settextstyle (1,0,8); outtextxy (5,20,abcdefg); 表2-3 实型和双精度型数据 图10-6 不同字体、不同大小的字符 10.2.16 设置窗口的函数setviewport和清除窗口的函数clearviewport函数首部为:void setviewport (int left,int top,int right,int bottom,int clip)void clearviewport (void)其中,(left,top)和(right,bottom)分别代表窗口左上角和右下角相对于整个屏幕的坐标;clip取0和1两个值,分别代表窗口以外的部分可以接触或不可以接触,即是窗口的内容能否溢出。使用窗口设置函数时有几点值得注意:(1)这样设置的窗口在屏幕上不显示边界,若要显示边界,可在设置窗口前画出与窗口边界重叠的矩形。(2)屏幕背景色和窗口背景色只能是同一种颜色。(3)一旦设置了窗口,除非使用清除窗口函数,使用图形输出函数时均是针对窗口而言,窗口内任一点的像元坐标都以窗口左上角作为相对的坐标原点。下面程序的功能是在屏幕上设置一个左上角和右下角坐标分别为(100,100)和(20
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。