版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本章要求:,了解C语言的图形化界面与文本界面的特点; 掌握图形接口函数的使用,图形方式屏幕的坐标系; 掌握常用图形函数的使用,并能设计简单的二维平图形的应用程序。,本章难点: 使用常用图形函数设计简单的图形应用程序,本章重点: 图形接口函数的使用,图形方式屏幕的坐标系,*第10章 屏幕控制与绘图,*第10章 屏幕控制与绘图,随着计算机的迅速发展,图形和图像已经称为其最具特色的特征之一。图形、图像由于是人们最易接受和最直观的信息,不仅仅用于装点计算机软件的门面,而且在各个方面都被广泛的应用。因此,图形处理在计算机的程序设计中也是一个重要的内容。 本章仅对Turbo C环境下图形处理功能做一个简单
2、的介绍,读者如果需要深入了解C语言的图形图像处理功能,请参阅其它书籍资料。,10.1 文本模式 10.2 图形模式 10.3 图形函数及其使用,10.1 文本模式,10.1.1 文本窗口(字符屏幕)的创建,1. Turbo C可以定义屏幕上的一个矩形域作为窗口,使用window()函数定义。窗口定义之后,用有关窗口的输入输出函数就可以只在此窗口内进行操作而不超出窗口的边界。 2. window()函数的调用格式为: window(int left, int top, int right, int bottom); 该函数的原型在conio.h中。函数中形式参数(int left, int to
3、p)是窗口左上角的坐标,(int right, int bottom)是窗口的右下角坐标,其中(left, top)和(right, bottom) 是相对于整个屏幕而言的。,10.1 文本模式,10.1.1 文本窗口(字符屏幕)的创建,3. Turbo C规定整个屏幕的左上角坐标为(1, 1),右下角坐标为(80, 25),并规定沿水平方向为X轴,方向朝右;沿垂直方向为Y轴,方向朝下。 4.若window()函数中的坐标超过了屏幕坐标的界限,则窗口的定义就失去了意义,也就是说定义将不起作用,但程序编译链接时并不出错。 例如,要定义一个窗口左上角在屏幕(10, 20)处,大小为30列15行的窗
4、口可写成: window(10, 20, 40, 35);,10.1 文本模式,10.1.2 文本窗口屏幕处理函数,1设置背景颜色和字符颜色 在文本窗口中可以设置背景颜色和设置输出字符的颜色,使用的函数为: 设置背景颜色:void textbackground(int color) 设置字符颜色:void textcolor(int color) 2在文本窗口内的输出函数输出 格式输出函数: int cprintf( char *format, va_list arglist.) 格式输入函数: int cscanf(char *format, va_list arglist.),10.1 文
5、本模式,10.1.2 文本窗口屏幕处理函数,2在文本窗口内的输出函数输出 字符输入输出函数: 输入字符串:char *cgets(char *str) 输出字符串:int cputs(char *str) 输入一个字符:int getche(void) 输出一个字符:int putch(int ch),10.1 文本模式,10.1.2 文本窗口屏幕处理函数,3其它有关字符屏幕操作函数 (1)void clrscr(void); 清除当前窗口文本内容,并把光标定位在窗口左上角(1, 1)处。 (2)void clreol(void) 清除当前窗口从光标位置到行尾的所有字符,光标位置不变。 (3)
6、void gotoxy(x, y) 定位光标在当前窗口中的位置。,10.1 文本模式,10.1.2 文本窗口屏幕处理函数,3其它有关字符屏幕操作函数 (4)int gettext(int xl, int yl, int x2, int y2, void *buffer) 将屏幕上指定的矩形区域内文本内容存入buffer 指针指向的一个内存空间。 (5)int puttext(int x1,int y1,int x2,int y2,void *buffer) 将gettext()函数存入内存buffer中的文字内容拷贝到屏幕上指定的位置。 (6)int movetext(int x1,int x
7、2,int y2,int x3,int y3) 将屏幕左上角为(x1,y1),右下角为(x2,y2)的一矩形窗口内的文本内容拷贝到左上角为(x3,y3)的新位置。,10.2 图形模式,10.2.1 设置图形模式,在未设置图形模式之前,系统默认屏幕为文本模式(25,80列,字符模式)。所以要使用图形功能,必须先根据显示器的种类将显示器设置成为某种图形模式。,1设置屏幕为图形模式 设置屏幕为图形模式,可用图形初始化函数initgraph,其调用格式为: initgraph(int *gdriver,int *gmode,char *path); 其中,gdriver和gmode分别表示图形驱动器和
8、模式,path是指图形驱动程序所在的路径。有关图形驱动器、图形模式的符号常数及对应的分辨率见教材P265表10-1。,10.2 图形模式,10.2.1 设置图形模式,2自动检测显示器种类的函数 有时程序设计人员并不知道了解所使用的显示器种类,或者编写的程序将用于不同显示器,因此 Turbo C提供了一个自动检测显示器种类的函数,其调用格式为: detectgraph(int *gdriver,*gmode); 其中gdriver和gmode的意义与上面介绍的initgraph函数中的参数相同。,10.2 图形模式,10.2.1 设置图形模式,3退出图形状态 Turbo C提供的退出图形状态的函
9、数closegraph(),其调用格式为: closegraph(); 调用该函数后,系统退出图形模式而进入文本模式,并释放用于保存图形驱动程序和字体的系统内存。,10.2 图形模式,10.2.1 设置图形模式,例. 直接设置VGA高分辨率图形模式。 #include void main() int gdriver,gmode; gdriver=VGA; gmode=VGAHI; initgraph( ,10.2 图形模式,10.2.1 设置图形模式,例.使用系统的自动检测显示器种类的函数detectgraph()来进行硬件测试后,按检测结果自动进行图形模式设置。 #include void
10、main() int gdriver,gmode; detectgraph( ,10.2 图形模式,10.2.1 设置图形模式,例.采用Turbo C提供的一种更简单的方法,即用gdriver= DETECT 语句后再使用initgraph()函数。 #include void main() int gdriver=DETECT,gmode; initgraph( ,10.2 图形模式,10.2.1 设置图形模式,以上三例的运行效果,10.2 图形模式,10.2.2 图形窗口,与文本模式下可以设定屏幕窗口一样,图形模式下也可以在屏幕上某一区域设定窗口,只是设定的为图形窗口而已,其后的有关图形操
11、作都将以这个窗口的左上角(0,0)作为坐标原点,而且可通过设置使窗口之外的区域为不可接触。这样,所有的图形操作就被限定在窗口内进行。,10.2 图形模式,10.2.2 图形窗口,1设置屏幕图形窗口 void setviewport(int xl,int yl,int x2,int y2,int clipflag) 设定一个以(xl,yl)象元点为左上角,(x2,y2)象元为右下角的图形窗口,其中x1,y1,x2,y2是相对于整个屏幕的坐标。若clipflag为非0,则设定的图形以外部分不可接触,若clipflag为0,则图形窗口以外可以接触。,10.2 图形模式,10.2.2 图形窗口,2用于
12、图形窗口的输入输出函数 在图形模式下,只能用标准输出函数,如printf(),puts(),putchar()函数输出文本到屏幕。 除此之外,其它输出函数(如窗口输出函数)不能使用,即是可以输出的标准函数,也只以前景色为白色,按80列,25行的文本方式输出。 Turbo C也提供了一些专门用于在图形显示模式下的文本输出函数:,10.2 图形模式,10.2.2 图形窗口,(1)void outtext(char *textstring) 功能是:在当前位置输出字符串指针textstring所指的文本。 (2)void outtextxy(int x,int y,char *textstring)
13、 功能是:在指定的(x,y)位置输出字符串指针textstring所指 的文本。其中x和y为象元坐标。 (3)void sprintf(char *buffer, char *format, va_list arglist); 功能是:将变量va_list arglist按format指定的格式输出到指针buffer所指的字符串中。然后再使用outtext()函数或outtextxy()函数输出。,10.2 图形模式,10.2.2 图形窗口,3清除图形窗口内容 (1)void clearviewport(void) 此函数用于清除视图区内显示的内容,并且把当前点重新定位于视图区的左上角。 (2
14、)void cleardevice(void) 该函数是清除屏幕上的所有内容,并且把当前坐标点重新定位于屏幕的左上角。在文本模式下的清屏函数是clrscr()。,10.3 图形函数及其应用,10.3.1 颜色函数,1设置屏幕背景和前景颜色 设置背景色: void setbkcolor( int color); 设置前景色: void setcolor(int color); 2获取屏幕背景和前景颜色函数 获取屏幕背景颜色函数:int getbkcolor(void); 返回整型数值。 获取屏幕前景颜色函数:int getcolor(void); 返回整型数值。 3获取指定点的图形颜色函数 获得
15、点(x,y)的颜色值的函数:int getpixel(int x,int y); 返回整型数值。,10.3 图形函数及其应用,10.3.1 颜色函数,有关屏幕颜色的符号常数表,10.3 图形函数及其应用,10.3.2 屏幕坐标位置的函数,(1)int getmaxx(void); 该函数返回x轴的最大值。 (2)int getmaxy(void); 该函数返回y轴的最大值。 (3)int getx(void); 该函数返回游标在x轴的位置。 (4)void gety(void); 该函数返回游标有y轴的位置。 (5)void moveto(int x, int y); 该函数移动游标到(x,y
16、)点。 (6)void moverel(int dx, int dy); 该函数移动游标从当前位置(x,y)移动到(x+dx,y+dy位置。,10.3 图形函数及其应用,10.3.3 基本图形函数,1画点函数 void putpixel(int x,int y,int color); 该函数表示在指定象元上画一个按color所确定颜色的点,而x,y是指该图形象元的坐标值。 在图形模式下,是按象元来定义坐标的。对VGA适配器,它的最高分辨率为640 x480,其中640为整个屏幕从左到右所有象元的个数,480为整个屏幕从上到下所有象元的个数。 屏幕的左上角坐标为(0,0),右下角坐标为(639,
17、479),水平方向从左到右为x轴正向,垂直方向从上到下为y轴正向。Turbo C的图形函数都是相对于图形屏幕坐标,即象元来说的。,10.3 图形函数及其应用,10.3.3 基本图形函数,2画直线函数 (1)void line(int x0,int y0,int x1,int y1); 画一条从点(x0,y0)到(x1,y1)的直线。 (2)void lineto(int x,int y); 画一条从当前点位置到点(x,y)的直线。 (3)void linerel(int dx,int dy); 画一条从当前点位置(x,y)到按相对增量确定的点(x+dx,y+dy)的直线。,10.3 图形函数及
18、其应用,10.3.3 基本图形函数,3画圆、圆弧及椭圆函数 (1)void circle(int x,int y,int radius); 画一个以(x,y)为圆心,radius为半径的圆。 (2)void arc(int x,int y,int stangle,int endangle,int radius); 画一段以(x,y)为圆心,radius为半径,从stangle开始到endangle结束(用度表示)的圆弧线。在Turbo C中规定x轴正向为0度,逆时针方向角度递增。 (3)void ellipse(int x,int y,int stangle,int endangle,int
19、xradius,int yradius); 以(x,y)为中心,xradius,yradius为x轴和y轴半径,从度角stangle开始到endangle结束画一段椭圆线,当stangle=0,endangle=360时,则画出一个完整的椭圆。,10.3 图形函数及其应用,10.3.3 基本图形函数,4画矩形框和多边形函数 (1)画矩形框:void rectangle(int x1,int y1,int x2,inty2); 以点(x1,y1)为左上角,点(x2,y2)为右下角画一个矩形框。 (2)画多边形:void drawpoly(int numpoints,int *polypoints
20、); 画一个顶点数为numpoints,各顶点坐标由polypoints 给出的多边形。polypoints整型数组必须至少有2倍顶点数个元素。每一个顶点的坐标都定义为x,y,并且x在前。值得注意的是当画一个封闭的多边形时,numpoints 的值取实际多边形的顶点数加一,并且数组polypoints中第一个和最后一个点的坐标相同。,10.3 图形函数及其应用,10.3.3 基本图形函数,5设定线型函数 在没有对线的特性进行设定之前,Turbo C用其默认的一点宽的实线,但Turbo C也提供了可以改变线型的函数。线型包括:宽度和形状。其中宽度只有两种选择: 一点宽和三点宽。而线的形状则有五种
21、。,(1)设置线形状:void setlinestyle(int linestyle,unsigned upattern,int thickness); 该函数用来设置线的有关信息,其中linestyle是线形状的规定,thickness是线的宽度,见下表。,10.3 图形函数及其应用,有关线的形状(linestyle),有关线宽(thickness),10.3 图形函数及其应用,10.3.3 基本图形函数,(2)设置画线方式函数 void setwritemode(int mode); 参数mode=0,则表示画线时将所画位置的原来信息覆盖了(这是Turbo C的默认方式)。 如果mode=
22、1,则表示画线时用现在特性的线与所画之处原有的线进行异或(XOR)操作,实际上画出的线是原有线与现在规定的线进行异或后的结果。 因此,当线的特性不变,进行两次画线操作相当于没有画线。,10.3 图形函数及其应用,10.3.3 基本图形函数,6封闭图形的填充 填充就是用规定的颜色和模式填满一个封闭图形。,(1)设定填充方式 设置填充方式的函数: void setfillstyle(int pattern,int color); color的值是当前屏幕图形模式时颜色的有效值。pattern的值及与其等价的符号常数如下表所示。 其中除USER_FILL(用户定义填充式样)外,其它填充式样均可由se
23、tfillstyle()函数设置。当选用USER_FILL时,该函数对填充图模和颜色不作任何改变。之所以定义USER_FILL主要因为在获得有关填充信息时用到此项。,10.3 图形函数及其应用,关于填充式样pattern的规定,10.3 图形函数及其应用,10.3.3 基本图形函数,(2)任意封闭图形的填充 void floodfill(int x,int y,int border); 其中:x,y为封闭图形内的任意一点。border为边界的颜色,也就是封闭图形轮廓的颜色。调用了该函数后,将用规定的颜色和图模填满整个封闭图形。其他说明: 如果x或y取在边界上,则不进行填充。 如果不是封闭图形则填充会从没有封闭的地方溢出去,填满其它地方。 如果x或y在图形外面,则填充封闭图形外的屏幕区域。 由border指定的颜色值必须与图形轮廓的颜色值相同,但填充色可选任意颜色。,10.3 图形函数及其应用,10.3.3 基本图形函数,(3)画基本填充图形 void bar(int x1,int y1,int x2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江西省萍乡市2024-2025学年高二上学期期末考试物理试卷(含答案)
- 广东省广州市白云区2025-2026学年八年级上学期期末考试英语试题(含答案无听力音频及原文)
- 五年级期末考试卷及答案
- 微生物学试题及答案
- 北京航空航天大学《德国文学选读》2024 - 2025 学年第一学期期末试卷
- 2025 四年级科学上册小学科学上册综合复习课件
- 2021年湖南历史高考一分一段位次表出炉
- 2023年人教版一年级语文下册期中试卷(及参考答案)
- 南通事业单位招聘2022年考试全真模拟试题4套及答案解析(附后)
- 道路工程施工技术要点
- 专题13 三角函数中的最值模型之胡不归模型(原卷版)
- 门诊药房西药管理制度
- 新能源汽车生产代工合同
- 2025年中煤科工集团重庆研究院有限公司招聘笔试参考题库含答案解析
- 消防救援预防职务犯罪
- 一体化泵站安装施工方案
- 畜禽粪污资源化利用培训
- 《抢救药物知识》课件
- 广州数控GSK 980TDc车床CNC使用手册
- 校区打印店合作服务 投标方案(技术方案)
- 建筑工程咨询服务合同(标准版)
评论
0/150
提交评论