版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
*第9章C语言图形程序设计基础9.3图形操作函数9.4综合程序案例本章小结学生自我完善练习目录9.1屏幕设置9.2图形处理函数9.1屏幕设置我们在屏幕上进行绘制图形,一般要按以下几个步骤执行。(1)把屏幕设置为图形模式。(2)选择背景与显示实体的颜色。(3)计算图形显示坐标。(4)调用绘图语句绘制实体。9.1屏幕设置9.1.1屏幕显示模式与坐标系1.文本模式与字符坐标系在屏幕上只能显示字符的方式称为文本模式。在文本模式下,屏幕上可以显示的最小单位是字符。为了能在指定的位置显示每个字符,C语言提供了字符坐标系。
字符坐标系是以屏幕的左上角为坐标原点,水平方向为X轴,垂直方向为Y轴,如图9-1所示。9.1.1屏幕显示模式与坐标系图9-1字符坐标系9.1屏幕设置由于显示模式的不同,所显示的字符的列数和行数以及颜色也不相同。C支持以下6种不同的显示方式。(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行。在不同的显示模式下,屏幕所显示的字符数量也不一样。X方向一般为40列或80列,Y方向一般为25行,但EGA和VGA适配器可达43行或50行。在文本模式下,屏幕最多可显示80×50=4000个字符,至少可显示40×25=1000个字符。显示字符越多,每个字符尺寸越小,反之越大。显示模式不同,屏幕坐标的构成也不相同。(1)在BW40方式下,最大坐标位置为(25,40)。(2)在C4350方式下,最大坐标位置为(50,80)。9.1.1屏幕显示模式与坐标系9.1屏幕设置2.图形模式与点坐标系在屏幕上显示图形的方式称为图形模式。在图形模式下,屏幕是由像素点组成的,像素点的多少决定了屏幕的分辨率。分辨率越高,显示图形越细致,质量越好。如图9-2所示。(1)屏幕由许多像素点组成。(2)图形的显示效果取决于分辨率的高低。例如:CGA显示器的分辨率为300X200,TVG显示器的分辨率为1024X768,TVGA比CGA分率高。在图形模式下,屏幕上每个像素的显示位置是用点坐标来描述的。点坐标系是以屏幕左上角为坐标原点(0,0),水平方向为X轴,自左向右;垂直方向为Y轴,自上向下,如图9-3所示。9.1.1屏幕显示模式与坐标系图9-2屏幕上的图像由像素点组成图9-3点坐标系9.1屏幕设置由于屏幕的分辨率不同,水平方向和垂直方向的点数也不一样,从而点坐标系的Maxx、Maxy数值也不同。在TurboC中,坐标数据可以用两种形式给出:一种是绝对坐标,另一种是相对坐标。(1)绝对坐标的参考点是坐标的原点(0,0),x和y只能取规定范围(0,Maxx)和(0,Maxy)内的正整数。(2)相对坐标是相对“当前点”的坐标,其坐标的参考点是当前点。在相对坐标中,x和y的取值是相对当前点在x方向和y方向上的增量,故x和y可以为正整数,也可以为负整数。9.1.1屏幕显示模式与坐标系9.1屏幕设置1.图形驱动程序对于不同的图形显示器,其控制方式各有差异,因此要显示图形就需要先装入相应的图形驱动程序。TurboC支持如表9-1所示的几种图形驱动程序。
表9-1TurboC支持的图形驱动程序9.1.2图形驱动程序与图形模式符号常数数值符号常数数值DETECT0IBM85146CGA1HERCMONO7MCGA2ATT4008EGA3VGA9EGA644PC327010EGAMONO5
9.1屏幕设置2.图形模式由于每种图形显示器都有几种不同的图形显示模式,所以要显示图形,不但要先装入相应的驱动程序,而且还要决定所用的显示模式。TurboC常采用的几种图形驱动程序及相应的模式如表9-2所示。
表9-2TurboC常采用的几种图形驱动程序及相应的模式9.1.2图形驱动程序与图形模式驱动程序(driver)图形(gmode)等价值分辨(dpi)CGACGAC00320×200CGAC11320×200CGAC22320×200CGAC33320×200CGAHI4640×200EGAEGAHI0640×200EGALO1640×350VGAVGALO0640×200VGAMED1640×350VGAHI2640×4809.1屏幕设置TurboC2.0提供了70多个图形库函数,因此其图形功能极为丰富。所有这些库函数均在头文件“grapics.h”中定义,所以,凡是在程序中在调用这些图形函数,都必须在程序文件的开头写上文件包含命令“#include<graphics.h>”。使用图形函数时要确保有显示器图形驱动程序*BGI,同时将集成开发环境Options/Linker中的Graphicslib选为on,只有这样才能保证正确使用图形函数。TC2.0的图形库函数主要有6大类:图形系统管理、屏幕管理、绘图函数、图形属性控制、填充和图形方式下的文本操作等,下面介绍一下各个图形库函数。9.1.3TC2.0图形库函数9.2图形处理函数在一般缺省情况下,屏幕为80列50行的文本方式,此时,所有的图形函数均不能操作,因此在使用图形函数绘图之前,必须将屏幕显示适配器设置为一种图形模式,即所谓的“图形方式初始化”。在绘图完毕后,要回到文本方式,必须关闭图形方式。TC2.0提供了14个函数对图形系统进行控制和管理工作。
1.图形模式的初始化不同的显示器适配器有不同的图形分辨率,在屏幕作图之前,必须根据显示器适配器种类将显示器设置成为某种图形模式,在未设置图形模式之前,计算机系统默认屏幕为字符模式(80列,25行字符模式),此时所有图形函数均不能工作。设置屏幕为图形模式,可用下列图形初始化函数initgraph(),其函数调用格式为:9.2.1图形系统管理函数initgraph(*gdriver,*gmode,*path);9.2图形处理函数gdriver是一个整数值,用来指定要装入的图形驱动程序,该值在头文件graphics.h中定义,常用的是DETECT、EGA、VGA和IBM8514。使用DETECT,由系统自动检测图形适配器的最高分辨率模式,并装入相应的图形驱动程序。gmode是一个整数值,用来设置图形显示模式,不同的图形驱动程序有不同的图形显示模式,即使是同一个图形驱动程序下,也有几种形式显示模式。图形显示模式决定了显示的分辨率、可同时显示的颜色的多少、调色板的设置方式以及存储图形的页数。常用的几种显示模式如表9-3所示。path是一个字符串,用来指明图形驱动程序所在的路径。如果驱动程序就在用户当前目录下,则该参数可以为空字符串,否则应给出具体的路径。一般情况下,TurboC安装在C盘的TC目录中,则该路径为C:\\TC,如果写在参数中则为“C:\\TC”。若在《C及C++实验系统》中进行调试程序,则其对应的图形库函数文件位置为C:\\JMSOFT\\DRV,如果写在参数中则为“C:\\JMSOFT\\DRV”。9.2.1图形系统管理函数9.2图形处理函数表9-3图形驱动器、模式的符号常数及数值9.2.1图形系统管理函数图形驱动器(gdriver)图形模式(gmode)色
调分
辨
率符号常数数值符号常数数值
EGA3EGALO016色640×200EGAHI116色640×350VGA9VGALO016色640×200VGAMED116色640×350VGAHI216色640×480IBM85146IBM8514LO0256色640×480IBM8514HI1256色1024×7689.2图形处理函数例如,在程序中使用VGA图形驱动程序,图形显示模式为VGAHI,即VGA高分辨率图形模式,分辨率为640×480,则initgraph的调用方式如下。intgdriver=VGA,gmode=VGAHI;initgraph(&gdriver,&gmode,"C:\\TC");也可以用整型常数代替符号常数,例如:intgdriver=9,gmode=2;initgraph(&gdriver,&gmode,"C:\\TC");这两种方法是等效的。另外,可以使用由TurboC提供的DETECT模式,由系统自动检测,并把图形显示模式设置为检测到的驱动程序的最高分辨率。例如:intgdriver=VDTECT,gmode;initgraph(&gdriver,&gmode,”C:\\TC”);9.2.1图形系统管理函数9.2图形处理函数2.关闭图形方式在运行图形程序绘图结束后,要回到文本方式,以进行其他工作,这时应关闭图形方式。关闭图形方式要调用函数closegraph,其调用格式为:其作用是释放所有图形系统分配的存储区,恢复到调用initgraph之前的状态。9.2.1图形系统管理函数closegraph();9.2图形处理函数TC2.0提供了11个函数用于对屏幕和视图区进行控制管理。常用的有以下几种。
1.设置视图区使用setviewport函数可以建立一个视图区,其调用格式如下:
该函数在屏幕上定义一个以(x1,y1)为左上角坐标,(x2,y2)为右下角坐标的视图区,c为裁剪状态参数,若c=1,出视图区的图形部分被自动裁剪掉;若c=0,则对超出视图区的图形不做裁剪处理。视图区建立后,所有的图形输出坐标都是相对于当前视图区的,即视图区左上角点为坐标原点(0,0),而与图形在屏幕上的位置无关。9.2.2屏幕管理和颜色设置函数setviewport(xl,yl,x2,y2,c);9.2图形处理函数2.清除视图区清除现行图形窗口的内容函数clearviewport,其调用格式如下:
该函数的功能是清除当前的视图区,将当前点位置设置于屏幕的左上角(0,0)点。执行后,原先的视图区不再存在。
3.清屏清除图形屏幕内容使用清屏函数cleardevice,其调用格式如下:
该函数的功能是清除当前的视图区,将当前点位置设置于屏幕的左上角(0,0)。但是其他的图形系统设置保持不变,如线型、填充模式、文本格式和模式等,如果设置了视图区,则视图区的设置保持不变,包括当前点位置设置在视图区的左上角。9.2.2屏幕管理和颜色设置函数clearviewport();cleardevice();9.2图形处理函数
4.屏幕颜色的设置对于图形模式的屏幕颜色设置,同样分为背景色的设置和前景色的设置。在TurboC中分别用两个函数,设置背景色函数setbkcolor和设置绘图色函数setcolor。(1)设置背景色函数setbkcolor的调用格式为:
(2)设置绘图色函数setcolor的调用格式为:
其中color为图形方式下颜色的规定数值,对EGA、VGA显示器适配器,有关颜色的符号常数及数值如表9-4所示。9.2.2屏幕管理和颜色设置函数setbkcolor(color);setcolor(color);9.2图形处理函数表9-4有关屏幕颜色的符号常数表9.2.2屏幕管理和颜色设置函数符号常数数值含义符号常数数值含义BLACK0黑色DARKGRAY8深灰BLUE1蓝色LIGHTBLUE9淡蓝GREEN2绿色LIGHTGREEN10淡绿CYAN3青色LIGHTCYAN11淡青RED4红色LIGHTRED12淡红MAGENTA5洋红LIGHTMAGENTA13淡洋红BROWN6棕色YELLOW14黄色LIGHTGRAY7淡灰WHITE15白色9.2图形处理函数对于CGA适配器,背景色可以为表9-4中16种颜色的一种,但前景色依赖于不同的调色板。共有4种调色板,每种调色板上有4种颜色可供选择。CGA调色板与颜色值表如表9-5所示。
表9-5CGA调色板与颜色值表9.2.2屏幕管理和颜色设置函数调
色
板颜
色
值符号常数数值0123C00背景绿红黄C11背景青洋红白C22背景淡绿淡红黄C33背景淡青淡洋红白9.2图形处理函数1.画点函数画点函数的函数格式如下:
函数功能:用指定的像元画一个按color所确定颜色的点。对于颜色color的值可从表9-4中获得,而x和y是指图形像元的坐标。在图形模式下,是按像元来定义坐标的。对VGA适配器,它的最高分辨率为640×480,其中640为整个屏幕从左到右所有像元的个数,480为整个屏幕从上到下所有像元的个数。屏幕的左上角坐标为(0,0),右下角坐标为(639,479),水平方向从左到右为x轴正向,垂直方向从上到下为y轴正向。TurboC的图形函数都是相对于图形屏幕坐标,即像元来说的。关于点的另外一个函数是:函数功能:获得当前点(x,y)的颜色值。9.2.3画点函数putpixel(intx,inty,intcolor);getpixel(intx,inty);9.2图形处理函数
2.有关坐标位置的函数(1)获得x轴最大值函数getmaxx。
函数功能:返回x轴的最大值。(2)获得y轴最大值函数getmaxy。
函数功能:返回y轴的最大值。(3)返回游标在x轴的位置函数getx。
函数功能:返回游标在x轴的位置。9.2.3画点函数getmaxx();getmaxy();getx();9.2图形处理函数(4)返回游标在x轴的位置函数gety。
函数功能:返回游标有y轴的位置。(5)移动游标到(x,y)点函数moveto。
函数功能:移动游标到(x,y)点,不是画点,在移动过程中亦画点。(6)移动游标到(x,y)点函数moverel。
函数功能:移动游标从现行位置(x,y)移动到(x+dx,y+dy)的位置,移动过程中不画点。9.2.3画点函数gety();moveto(intx,inty);moverel(intdx,intdy);9.2图形处理函数绘图函数是编写绘图程序的基础,也是任何一种图形软件的核心内容。TurboC的BGI(BorlandGraphicsInterface)提供了大量的基本绘图函数,以方便图形设计。基本图形函数包括直线类、圆弧类、多边形类等图形的函数。下面对这些函数进行介绍。
1.画直线函数line画直线函数line的函数格式如下:
函数功能:画一条从点(x0,y0)到(x1,y1)的直线。其中x0、y0、x1、y1都是整数,表示坐标值。9.2.4绘图函数line(intx0,inty0,intx1,inty1);9.2图形处理函数
2.画圆函数circle画圆函数circle的函数格式如下:
函数功能:以(x,y)为圆心,radius为半径,画一个圆。其中x、y、radius都是整数。
3.画圆弧函数arc画圆弧函数arc函数格式如下:
函数功能:以(x,y)为圆心,radius为半径,从stangle开始到endangle结束(用度表示)画一段圆弧线。9.2.4绘图函数circle(intx,inty,intradius);arc(intx,inty,intstangle,intendangle,intradius);9.2图形处理函数
2.画圆函数circle画圆函数circle的函数格式如下:
函数功能:以(x,y)为圆心,radius为半径,画一个圆。其中x、y、radius都是整数。
3.画圆弧函数arc画圆弧函数arc函数格式如下:
函数功能:以(x,y)为圆心,radius为半径,从stangle开始到endangle结束(用度表示)画一段圆弧线。在TurboC中规定x轴正向为0°,逆时针方向旋转一周,依次为90°、180°、270°和360°(其他有关函数也按此规定,不再重述)。9.2.4绘图函数circle(intx,inty,intradius);arc(intx,inty,intstangle,intendangle,intradius);9.2图形处理函数4.画椭圆函数ellipse画椭圆函数ellipse函数格式如下:
函数功能:以(x,y)为中心,xradius、yradius分别为x轴和y轴半径,从角stangle开始到endangle结束画一段椭圆线,当stangle=0,endangle=360时,画出一个完整的椭圆。
5.画矩形函数rectangle画矩形函数rectangle函数格式如下:
函数功能:以(x1,y1)为左上角,(x2,y2)为右下角画一个矩形框。9.2.4绘图函数ellipse(intx,inty,intstangle,intendangle,intxradius,intyradius);rectangle(intx1,inty1,intx2,inty2);9.2图形处理函数6.画多边形函数drawpoly画多边形函数drawpoly函数格式如下:
函数功能:画一个顶点数为numpoints,各顶点坐标由polypoints给出的多边形。polypoints整型数组必须至少有2倍顶点数个元素。每一个顶点的坐标都定义为(x,y),并且x在前。需要注意的是当画一个封闭的多边形时,numpoints的值取实际多边形的顶点数加1,并且数组polypoints中第一个和最后一个点的坐标相同。9.2.4绘图函数drawpoly(intnumpoints,intfar*polypoints);9.2图形处理函数【案例9-1】首先初始化图形界面,设置图形背景颜色为黑色,然后设置不同的颜色,画半径不同的同心圆,每个圆延迟500毫秒。再重新设置背景色,每次变换背景色,并在该背景色上画半径逐渐变大的圆,最后结束程序。程序分析:该程序先使用初始化函数initgraph对屏幕进行初始化,然后使用setbkcolor函数设置背景色为黑色,清屏,然后在循环体中,设置绘图色,画不同半径的圆,设置延迟时间,即可在黑色屏幕上绘制不同颜色、不同半径的同心圆。然后在第二个循环体中,设置背景颜色,清屏,绘制不同半径的白色圆,设置延迟时间,即可在不同背景颜色中,每次绘制一个逐渐增大的圆。打开源程序程序运行结果如下:左图是在黑色背景上开始画不同颜色的同心圆,右图是背景切换成各种颜色,在中心某一时刻画一个圆的效果。9.2图形处理函数在没有对线的特性进行设定之前,TurboC用其默认值,即1点宽的实线,但TurboC也提供了可以改变线型的函数。线型包括:宽度和形状。其中宽度只有两种选择:1点宽和3点宽。而线的形状则有5种。1.线型的设置函数setlinestyle线型的设置函数setlinestyle函数格式如下:
函数功能:该函数用来设置线的有关信息,包括线的形状和线的宽度等。其中linestyle是线的形状的规定,如表9-6所示。9.2.5设定线型函数setlinestyle(intlinestyle,unsignedupattern,intthickness);9.2图形处理函数表9-6有关线的形状(linestyle)9.2.5设定线型函数符号常数数
值含
义SOLID_LINE0实线DOTTED_LINE1点线CENTER_LINE2中心线DASHED_LINE3点画线USERBIT_LINE4用户定义线9.2图形处理函数thickness是线的宽度,如表9-7所示。
表9-7有关线宽(thickness)对于upattern,只有linestyle选USERBIT_LINE时才有意义(选其他线型,uppattern取0即可)。此时uppattern的16位二进制数的每一位代表一个像元,如果16位二进制数的某一位为1,则对应该像元打开,否则该像元关闭。
9.2.5设定线型函数符号常数数
值含
义NORM_WIDTH11点宽THIC_WIDTH33点宽9.2图形处理函数2.返回线信息函数getlinesettings返回线信息函数getlinesettings函数格式如下:
函数功能:该函数将有关线的信息存放到由lineinfo指向的结构中,其中linesettingstype的结构如下:structlinesettingstype{intlinestyle;unsignedupattern;intthickness;}例如,下面两条语句程序可以读出当前线的特性。structlinesettingstype*info;getlinesettings(info);9.2.5设定线型函数getlinesettings(structlinesettingstypefar*lineinfo);9.2图形处理函数
3.画线方式设置函数setwritemode画线方式设置函数setwritemode函数格式如下:
函数功能:该函数规定了画线的方式。如果mode=0,则表示画线时将所画位置的原来信息覆盖了(这是TurboC的默认方式)。如果mode=1,则表示画线时用现在特性的线与所画之处原有的线进行异或(XOR)操作,实际上画出的线是原有线与现在规定的线进行异或后的结果。因此,当线的特性不变,进行两次画线操作相当于没有画线。9.2.5设定线型函数setwritemode(intmode);9.2图形处理函数【案例9-2】绘制各种图形和设置线条类型标例。程序分析分析程序,初始化屏幕,清屏。然后设置背景颜色为绿色,绘图颜色为紫色。双层循环中,外层循环j循环2次,值为从1到2,内层循环i值从0到3循环4次。在循环体中,设置线型的样式和粗细(如第一次线型粗细k值为1,第二次线型k值粗细为3),i值(从0到3)分别为实线、点线、中心线和点画线,然后在屏幕不同位置画斜线、矩形、圆。绘制完成后关闭绘图屏幕,程序运行结束。打开源程序调试运行程序9.2图形处理函数1.基本图形的填充填充就是用规定的颜色和图模填满一个封闭图形。先画轮廓再填充。TurboC提供了一些先画出基本图形轮廓,再按规定图模和颜色填充整个封闭图形的函数。在没有改变填充方式时,TurboC以默认方式填充。(1)矩形填充函数bar。矩形填充函数bar的格式如下:函数功能:确定一个以(x1,y1)为左上角,(x2,y2)为右下角的矩形窗口,再按规定图模和颜色填充。说明:此函数不画出边框,所以填充色为边框。9.2.6基本图形的填充及填充方式的设定bar(intx1,inty1,intx2,inty2);9.2图形处理函数(2)三维长方体填充函数bar3d。三维长方体填充函数bar3d的格式如下:
函数功能:当topflag为非0时,画出一个三维的长方体。当topflag为0时,三维图形不封顶,实际上很少这样使用。说明:bar3d函数中,长方体第三维的方向不随任何参数而变,即始终为45°的方向。(3)扇形填充函数pieslice。扇形填充函数pieslice的格式如下:
函数功能:画一个以(x,y)为圆心,radius为半径,stangle为起始角度,endangle为终止角度的扇形,再按规定大鹏ds方式填充。当stangle=0,endangle=360时变成一个实心圆,并在圆内从圆点沿x轴正向画一条半径。9.2.6基本图形的填充及填充方式的设定bar3d(intx1,inty1,intx2,inty2,intdepth,inttopflag);pieslice(intx,inty,intstangle,intendangle,intradius);9.2图形处理函数(4)椭圆填充函数sector。椭圆填充函数sector函数格式如下:
函数功能:画一个以(x,y)为圆心分别以xradius、yradius为x轴和y轴半径,stangle为起始角,endangle为终止角的椭圆扇形,再按规定方式填充。2.设定填充方式TurboC有4个与填充方式有关的函数,下面分别介绍。(1)设置填充模式和颜色函数setfillstyle。设置填充模式和颜色函数setfillstyle的调用格式为:该函数功能是用来设置当前填充模式和填充颜色,以便用于填充一个指定的封闭区域。9.2.6基本图形的填充及填充方式的设定sector(intx,inty,intstanle,intendangle,intxradius,intyradius);setfillstyle(intpattern,intcolor);9.2图形处理函数color的值是当前屏幕为图形模式时颜色的有效值,pattern的值及与其等价的符号常数和含义如表9-8所示。
表9-8关于填充式样pattern的规定9.2.6基本图形的填充及填充方式的设定符号常数数
值含
义EMPTY_FILL0以背景颜色填充SOLID_FILL1以实体填充LINE_FILL2以直线填充LTSLASH_FILL3以斜线填充(阴影线)SLASH_FILL4以粗斜线填充(粗阴影线)BKSLASH_FILL5以粗反斜线填充(粗阴影线)LTBKSLASH_FILL6以反斜线填充(阴影线)HATCH_FILL7以直方网格填充XHATCH_FILL8以斜网格填充INTTERLEAVE_FILL9以间隔点填充WIDE_DOT_FILL10以稀疏点填充CLOSE_DOS_FILL11以密集点填充USER_FILL12以用户定义式样填充9.2图形处理函数(2)设置填充图模颜色函数setfillpattern。设置填充图模颜色函数setfillpattern的调用格式为:
该函数的功能是设置用户定义的填充图模的颜色以供对封闭图形填充。其中upattern是一个指向8字节的指针。这8字节定义了8×8点阵的图形。每个字节的8位二进制数表示水平8点,8个字节表示8行,然后以此为模型向整个封闭区域填充。(3)存储填充图模函数getfillpattern。存储填充图模函数getfillpattern的调用格式为:
函数功能是将用户定义的填充图模存入upattern指针指向的内存区域。9.2.6基本图形的填充及填充方式的设定setfillpattern(char*upattern,intcolor);getfillpattern(char*upattern);9.2图形处理函数(4)返回填充图模信息函数getfillsetings。返回填充图模信息函数getfillsetings的调用格式为:
该函数获得现行图模的颜色并将其存入结构指针变量fillinfo中。其中fillsettingstype结构定义如下:structfillsettingstype{intpattern;/*现行填充模式*/intcolor;/*现行填充颜色*/};9.2.6基本图形的填充及填充方式的设定getfillsetings(structfillsettingstype
far*fillinfo);9.2图形处理函数【案例9-3】分析以下程序的运行结果,注意各图形的填充方法。程序分析该程序初始化后,设置界面背景为白色,在界面上画了4个图形:矩形、长方体、扇形和椭圆扇形。并用各种颜色和填充模式进行填充,最后用绿色画出各图形的边框,并在最后显示出用户定义的模式和颜色代码。打开源程序调试运行程序下面是其中两个时刻的运行效果。9.2图形处理函数
3.任意封闭图形的填充函数TurboC提供了一个可对任意封闭图形填充的函数floodfill,其调用格式如下:
该函数的功能是用规定的颜色和图模填满整个封闭图形。其中x和y为封闭图形内的任意一个border为边界的颜色,也就是封闭图形轮廓的颜色。(1)如果x或y取在边界上,则不进行填充。(2)如果不是封闭图形则填充会从没有封闭的地方溢出去,填满其他地方。(3)如果x或y在图形外面,则填充封闭图形外的屏幕区域。(4)由border指定的颜色值必须与图形轮廓的颜色值相同,但填充色可选任意颜色。9.2.6基本图形的填充及填充方式的设定floodfill(intx,inty,intborder);9.2图形处理函数【案例9-4】本例是有关floodfill函数的用法,填充使用函数bar3d所画长方体中其他两个未填充的面,完成整个长方体的填充。程序分析该程序初始化后,首先设置界面背景为浅绿色,其次设置当前颜色为淡红色,设置线型为实线,线宽为3点宽。再设置填充为实填充,填充颜色为黄色。最后画出长方体,并将未填充的两个面以黄色填充。再画一个小矩形(边框为淡红色),最后对矩形用黄色进行填充。打开源程序调试运行程序9.3图形操作函数1.图形操作函数如同字符方式下可以设定屏幕窗口一样,图形方式下也可以在屏幕上某一区域设定窗口,只是设定的为图形窗口而已,其后的有关图形操作都将以这个窗口的左上角(0,0)作为坐标原点,而且可通过设置使窗口之外的区域为不可接触。这样,所有的图形操作就被限定在窗口内进行。(1)设定图形窗口函数setviewport。设定图形窗口函数setviewport的调用格式为:
该函数的功能是设定一个以(x1,y1)像元为左上角,(x2,y2)像元为右下角的图形窗口,其中x1,y1,x2,y2是相对于整个屏幕的坐标。若clipflag为非0,则设定的图形以外部分不可接触;若clipflag为0,则图形窗口以外可以接触。9.3.1图形窗口操作函数setviewport(intxl,intyl,intx2,inty2,intclipflag);9.3图形操作函数(2)清除现行图形窗口的内容函数clearviewport。清除现行图形窗口的内容函数clearviewport的调用格式为:
该函数的功能是清除现行图形窗口中的内容。(3)返回现行窗口信息函数getviewsettings。返回现行窗口信息函数getviewsettings的调用格式为:
该函数的功能是获得关于现行窗口的信息,并将其存于viewporttype定义的结构变量viewport中,其中viewporttype的结构说明如下:structviewporttype{intleft,top,right,bottom;intcliplag;};9.3.1图形窗口操作函数clearviewport();getviewsettings(structviewporttype
far*viewport);9.3图形操作函数2.屏幕操作函数除了清屏函数以外,关于屏幕操作还有以下几个函数。(1)为图形输出选择激活页函数setactivepage。为图形输出选择激活页函数setactivepage的调用格式为:
函数功能:setctivepage函数是为图形输出选择激活页。所谓激活页,是指后续图形的输出被写到函数选定的pagenum页面,该页面并不一定可见。(2)使指定页变成可见页函数setvisualpage。使指定页变成可见页函数setvisualpage的调用格式为:
函数功能:setvisualpage函数才使pagenum所指定的页面变成可见页,页面从0开始(TurboC默认页)。9.3.1图形窗口操作函数setactivepage(intpagenum);setvisualpage(intpagenum);9.3图形操作函数(3)屏幕图像存取函数。屏幕图像存取函数有3个函数,其调用格式分别为:这3个函数用于将屏幕上的图像复制到内存,然后将内存中的图像送回到屏幕上。首先通过函数imagesize测试要保存左上角为(x1,y1),右下角为(x2,y2)的图形屏幕区域内的全部内容需多少字节,然后再给mapbuf分配一个所测数字节内存空间的指针。9.3.1图形窗口操作函数getimage(intxl,intyl,intx2,inty2,voidfar*mapbuf);putimge(intx,inty,voidfar*mapbuf,intop);imagesize(intxl,intyl,intx2,inty2);9.3图形操作函数通过调用getimage函数就可将该区域内的图像保存在内存中,需要时可用putimage函数将该图像输出到左上角为点(x,y)的位置上,其中putimage函数中的参数op规定如何释放内存中图像,关于这个参数的定义如表9-9所示。
表9-9putimage函数中的op值9.3.1图形窗口操作函数符号常数数
值含
义COPY_PUT0复制XOR_PUT1与屏幕图像异或后复制OR_PUT2与屏幕图像或后复制AND_PUT3与屏幕图像与后复制NOT_PUT4复制反像的图形9.3图形操作函数【案例9-5】编写程序模拟两个小球动态碰撞的过程。程序分析该程序初始化后,设置界面背景为黄色,设置当前颜色为浅红色,线型为实线,线宽为1点宽。然后再设置填充为实填充,填充颜色为淡绿色,画出小球。通过循环地将屏幕图形存储到内存,再从内存中取出,达到动画的效果。打开源程序调试运行程序下面为某一时刻两个小球运动情况的截图:9.3图形操作函数在图形模式下,只能用标准输出函数,如printf、puts、putchar函数输出文本到屏幕。除此之外,其他输出函数(如窗口输出函数)不能使用,即使可以输出标准函数,也只能以前景色为白色,按80列、25行的文本方式输出。TurboC2.0提供了一些专门用于在图形显示模式下的文本输出函数。
1.文本输出函数(1)当前位置输出字符函数outtext。当前位置输出字符函数outtext的调用格式为:函数功能:该函数输出字符串指针textstring所指的文本在现行位置。9.3.2图形模式下的字符outtext(charfar*textstring);9.3图形操作函数(2)指定位置输出字符函数outtextxy。指定位置输出字符函数outtextxy的调用格式为:
函数功能:该函数输出字符串指针textstring所指的文本在规定的(x,y)位置,其中(x,y)为像元坐标。(3)按格式化规定的内容写字符串函数sprintf。按格式化规定的内容写字符串函数sprintf的调用格式为:
函数功能:sprintf与printf函数不同之处是将按格式化规定的内容写入str指向的字符串中,返回值等于写入的字符个数。例如:sprintf(s,"yourTOEFLscoreis%d",mark);这里s应是字符串指针或数组,mark为整型变量。9.3.2图形模式下的字符outtextxy(intx,inty,charfar*textstring);sprintf(char*str,char*format,variable-list);9.3图形操作函数
2.文本字体、字型和输出方式的设置有关图形方式下的文本输出函数,可以通过setcolor()函数设置输出文本的颜色。另外,也可以改变文本字体大小以及选择是水平方向输出还是垂直方向输出。(1)定位输出字符串函数settextjustify。定位输出字符串函数settextjustify的调用格式为:函数功能:该函数用于定位输出字符串。9.3.2图形模式下的字符settexjustify(inthoriz,intvert);9.3图形操作函数settextjustify函数的第一个参数horiz指出水平方向3个位置中的一个,第二个参数vert指出垂直方向3个位置中的一个,二者就确定了一个位置。当规定了这个位置后,用outtextxy函数输出字符串时,字符串长方形的这个规定位置就对准函数中的(x,y)位置。而对用outtext函数输出字符串时,这个规定的位置就位于现行游标的位置。有关参数horiz和vert的取值如表9-10。表9-10参数horiz和vert的取值9.3.2图形模式下的字符符号常数数
值用
于LEFT_TEXT0水平RIGHT_TEXT2水平BOTTOM_TEXT0垂直TOP_TEXT2垂直CENTER_TEXT1水平或垂直9.3图形操作函数设置字符模式函数settextstyle的调用格式为:
该函数用来设置输出字符的字形(由font确定)、输出方向(由direction确定)和字符大小(由charsize确定)等特性。TurboC2.0对函数中各个参数的规定如表9-11至表9-13所示。表9-11font的取值9.3.2图形模式下的字符settextstyle(intfont,intdirection,intcharsize);符号常数数
值含
义DEFAULT_FONT08×8点阵字(缺省值)TRIPLEX_FONT13倍笔画字体SMALL_FONT2小号笔画字体SANSSERIF_FONT3无衬线笔画字体GOTHIC_FONT4黑体笔画字9.3图形操作函数表9-12direction的取值表9-13charsize的取值9.3.2图形模式下的字符符号常数数
值含
义HORIZ_DIR0从左到右VERT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026及未来5年中国圆运动振动筛数据监测研究报告
- 2026及未来5年中国吸塑镜框数据监测研究报告
- 2026事业单位工勤技能-江苏-江苏放射技术员三级(高级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-江苏-江苏保育员三级(高级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-新疆-新疆水工闸门运行工四级(中级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-广西-广西药剂员五级(初级工)历年参考题库含答案详解3套试卷
- 2026 年地震应急物资管理规范学习课堂
- 胆囊结石健康宣教参考模版
- 2026年秋季开学大四证书备考学业规划课件
- 2026年秋季开学大学一年级新生军训队列训练规范课件
- 2026 年秋季开学初中新生入学适应教育课件
- 广东梅州市2026年基层公共就业创业服务岗位招聘考试试卷-含答案解析
- GB/T 47770.1-2026家用快热式电热水器性能测试方法第1部分:总则
- 中心静脉导管相关血流感染(CLABSI)防控与集束化护理策略
- 2026年河北省中考语文真题试卷及答案
- 2026-2030中国来氟米特市场运行状况监测与发展态势展望研究报告
- 化工生产防火防爆安全培训
- 2026新教材语文 18威尼斯的小艇 教学课件
- 2026年事业单位工作人员处分暂行规定及处分程序试题
- 西安智测无忧行测题库及答案
- 国企内纪检监察工作制度
评论
0/150
提交评论