《实用C语言程序设计教程》-陈建铎-电子教案 第10章

上传人:E**** 文档编号:89409794 上传时间:2019-05-24 格式:PPT 页数:61 大小:581KB
返回 下载 相关 举报
《实用C语言程序设计教程》-陈建铎-电子教案 第10章_第1页
第1页 / 共61页
《实用C语言程序设计教程》-陈建铎-电子教案 第10章_第2页
第2页 / 共61页
《实用C语言程序设计教程》-陈建铎-电子教案 第10章_第3页
第3页 / 共61页
《实用C语言程序设计教程》-陈建铎-电子教案 第10章_第4页
第4页 / 共61页
《实用C语言程序设计教程》-陈建铎-电子教案 第10章_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《《实用C语言程序设计教程》-陈建铎-电子教案 第10章》由会员分享,可在线阅读,更多相关《《实用C语言程序设计教程》-陈建铎-电子教案 第10章(61页珍藏版)》请在金锄头文库上搜索。

1、,到目前为止,我们是在系统默认的文本方式下设计和运行程序的。所谓文本方式,是以一个西文符号或汉字为基本操作单位,一屏的容量一般是25行,每行为80个西文符号或40个汉字。如果画图,就需要图形方式。所谓图形方式就是以一个像素(像元)为基本单位进行各种操作。一个像素是一个点,可以显示不同的颜色。如何进入图形方式,如何调用编译系统提供的各种图形函数绘图,是本章要介绍的主要内容。,第10章 图形处理,第10章 图形处理,10.1 图形输出初始化和显示模式设 10.2 绘图函数 10.3 图形处理应用实例,10.1 图形输出初始化和显示模式设置,10.1.1 图形输出初始化 本章开头已提到,如果要使用C

2、语言画图,就需要图形方式。所谓图形方式就是以一个像素(像元)为基本单位进行各种操作。一个像素是一个点,可以显示不同的颜色。图形的品质取决于像素的多少,像素越多越清晰;如果用显示模式来表示,则分高分辨率和低分辨率显示模式。,显示模式与PC插槽中的显示适配器(显示卡)有关。例如,VGA适配器的显示模式从200行到480行不等,每行有640个像素。AGP适配器的显示模式有640480,800600,1024768,12801024等多种规格。同一个图形在不同的模式下显示,不仅分辨率有别,而且形状也不同。在640480模式下显示的图形,在640200模式下图形宽度不变,但实际高度会变大。 适配器的作用

3、是把显示的字符和图形以数字形式存储在图形卡上的视频存储器(VRAM)中,再将其变成视频模拟信号送往显示器,如图10-1所示。,图10-1 主机、适配器、显示器的关系,C语言编译系统提供了许多画图函数,只要在程序中包含头文件graphics.h,便可以调用这些函数。计算机配有的显示器不同,其适配器类型也不同。在使用图形函数之前,必须先确定适配器类型,并选定其中的一种显示模式,然后启动相应的驱动程序。这一工作称为图形系统初始化,由下面的函数来完成。,void initgraph (int *graphdriver,int *graphmode,char *pathtodriver); 其中grap

4、hdriver和graphmode分别代表适配器类型和显示模式,pathtodriver是寻找图形驱动程序的路径。驱动程序一般以.bgi为扩展名,所在的目录通常为c:TC。,当适配器的类型未知时,可以通过下面的语句启动驱动程序: int graphdriver=DETECT,graphmode; initgraph ( 其中DETECT是字符常量,其数值为0。当graphdriver =DETECT时,函数initgraph又调用系统检测函数detectgraph进行硬件测试,确定适配器类型;然后将代表适配器类型的符号常数(或整型数)赋给graphdriver;同时将代表适配器的最高分辨率模式

5、的符号常数(或整型数)赋给graphmode;最后启动驱动程序。,在C语言中提到的适配器类型是用一个整数来表示的,不同的适配器对应不同的整数。显示器模式也是用整数表示的,不同的显示模式对应不同的分辨率。也可以通过下面的程序来测定适配器类型和最高分辨率模式: void main() int graphdriver=DETECT,graphmode; initgraph( ,以VGA显示卡为例,测定结果: 9,2 然后用测得的结果,直接指定适配器类型和显示模式进行图形输出初始化: int graphdriver=9,graphmode=2; initgraph(,10.1.2 显示模式的设置 图形

6、输出初始化以后,就可以使用各种图形函数。这里介绍获取显示模式范围的函数、设置显示模式的函数、获取适配器名称的函数和获取显示模式名称(包括分辨率和适配器名称)的函数。 10.1.2.1 获取显示模式范围的函数 函数原型: void getmoderange(int graphdriver,int *lowmode,int *himode); 其中,graphdriver代表适配器类型,通过参数lowmode和himode分别获得显示模式的最低和最高值。例如对于VGA显卡,用以下语句可得到显示模式的范围:,int lowmode,himode; getmoderange (9,lowmode,hi

7、mode); printf (“%d,%d“, 其中,参数mode代表要设置的显示模式。例如对于VGA显卡,用以下函数调用语句可将显示模式设置为0(对应的分辨率为640200):,setgraphmode (0); 注意:在调用模式设置函数时,设置之前显示的内容会自动清除。 10.1.2.3 获取适配器名称的函数 函数原型: char *getdrivername (void); 函数返回值代表显示适配器的名称。例如对于VGA显卡,用以下语句可得到适配器名称:,char *drivername; drivername=getdrivername(); printf (“%s“, drivern

8、ame); 结果: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

9、.3 退出图形方式 图形输出初始化也就是进入图形输出方式,那是由initgraph函数来完成的。进入图形方式后,才能使用各种图形函数。如果要退出图形方式,即恢复文本方式,就要使用另一个函数closegraph (),或称关闭图形方式的函数。 函数原型: void closegraph (void); 注意:关闭图形方式后,前面显示的图形会自动清除。,10.2 绘图函数,前一节介绍了图形方式初始化的函数和设置显示模式的函数,本节介绍绘制各种图形的函数。在C语言程序中,要使用各种图形函数,必须首先进行图形输出初始化,必要时进行模式设置(如果要改变默认显示模式时)。本节及下一节中在使用各种图形函数时

10、,均假定已进入图形方式,且当前显示模式对应的分辨率为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分别表示针对当前点的横坐标增量和纵坐

11、标增量。函数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表示一个整数,不同的整数代表

12、不同的颜色。各种颜色与整数及符号常数对应情况如表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(i

13、nt 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 函数首

14、部分别为: 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 l

15、inestyle,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) vo

16、id 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、

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号