版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2023/9/2西安工程大学数学系13.1、屏幕设置我们在屏幕上进行绘制图形,一般要按以下几个步骤执行:(1)把屏幕设置为图形模式;(2)选择背景与显示实体的颜色;(3)计算图形显示坐标;(4)调用绘图语句绘制实体3.1.1、屏幕显示模式与坐标系1.文本模式与字符坐标系
在屏幕上只能显示字符的方式称为文本模式。在文本模式下,屏幕上可以显示的最小单位是字符。为了能在指定的位置显示每个字符,C语言提供了字符坐标系。
C语言图形程序设计基础2023/9/2西安工程大学数学系2字符坐标系是以屏幕的左上角为坐标原点,水平方向为X轴,垂直方向为Y轴,如下图-1所示:图-1字符坐标系MaxxMaxy(1,1)注:字符坐标系的原点为(1,1),水平方向(X轴)分为若干列,垂直方向(Y轴)分为若干行,用一对坐标可以指定屏幕上一个位置。(8,20)表示字符位于屏幕的第8行第20列C语言图形程序设计基础2023/9/2西安工程大学数学系3(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行。C语言图形程序设计基础由于显示模式的不同,所显示的字符的列数和行数以及颜色也不相同。C支持以下6种不同的显示方式。2023/9/2西安工程大学数学系4在不同的显示模式下,屏幕所显示的字符数量也不一样。X方向一般为40列或80列,Y方向一般为25行,但EGA和VGA适配器可达43行或50行。在文本模式下,屏幕最多可显示80X50=4000个字符,至少可显示40X25=1000个字符。显示字符越多,每个字符尺寸越小,反之越大。显示模式不同,屏幕坐标的构成也不相同。比如:(1)在BW40方式下,最大坐标位置为(25,40);(2)在C4350方式下,最大坐标位置为(50,80);注:C语言图形程序设计基础2023/9/2西安工程大学数学系52.图形模式与点坐标系
在屏幕上显示图形的方式称为图形模式。在图形模式下,屏幕是由像素点组成的,像素点的多少决定了屏幕的分辨率。分辨率越高,显示图形越细致,质量越好。
如右图所示1.屏幕由许多像素点组成;2.图形的显示效果取决于分辨率的高低;C语言图形程序设计基础2023/9/2西安工程大学数学系6例如:CGA显示器的分辨率为300X200,TVG显示器的分辨率为1024X768,TVGA比CGA分率高。图-2点坐标系MaxxMaxy(0,0)注:点坐标系坐标值的范围取决于所用的适配器/显示分辨率C语言图形程序设计基础在图形模式下,屏幕上每个像素的显示位置用点坐标来描述的。点坐标系是以屏幕左上角为坐标原点(0,0),水平方向为X轴,自左向右;垂直方向为Y轴,自上向下。如下图所示:2023/9/2西安工程大学数学系7由于屏幕的分辨率不同,水平方向和垂直方向的点数也不一样,从而点坐标系的Maxx、 Maxy数值也不同。
在TurboC中,坐标数据可以用两种形式给出:一种是绝对坐标,另一种是相对坐标。(1)绝对坐标的参考点是坐标的原点(0,0),x和y只能取规定范围(0,Maxx
)和(0,Maxy)内的正整数;(2)相对坐标是相对“当前点”的坐标,其坐标的参考点是当前点。在相对坐标中,x和y的取值是相对当前点在x方向和y方向上的增量,故x和y可以为正整数,也可以为负整数。C语言图形程序设计基础2023/9/2西安工程大学数学系83.1.2、图形驱动程序与图形模式1.图形驱动程序对于不同的图形显示器,其控制方式各有差异,因此要显示图形就需要先装入相应的图形驱动程序。TurboC支持以下几种图形驱动程序:
符号常量
数值符号常量
数值DETECT0IBM85146CGA1HERCMONO7MCGA2ATT4008EGA3VGA9EGA644PC327010EGAMONO5C语言图形程序设计基础2023/9/2西安工程大学数学系92.图形模式由于每种图形显示器都有几种不同的图形显示模式,所以要显示图形,不但要先装入相应的驱动程序,而且还要决定所用的显示模式。TurboC常采用的几种图形驱动程序及相应的模式驱动程序(driver)图形(gmode)等价值分辨(dpi)CGAC00320X200
CGACGAC11320X200CGAC22320X200CGAC33320X200CGAHI4640X200表2.2图形驱动程序及相应的模式C语言图形程序设计基础2023/9/2西安工程大学数学系10驱动程序(driver)图形(gmode)等价值分辨(dpi)EGAEGAHI0640X200EGALO1640X350VGALO0640X200VGAVGAMED1640X350VGAHI2640X480注:1.不同的图形驱动程序有不同的图形模式;2.同一图形驱动程序,也可能会有几种图形模式;C语言图形程序设计基础2023/9/2西安工程大学数学系11TurboC提供了十分丰富的图形库函数,共有70多个,所有图形函数的原型均在头文件“graphics.h”中定义。所以,在任何使用图形函数的程序中,都要求其头部包含文件graphics.h,即在程序文件的开头写上文件包含命令:
#include<graphics.h>
同时将集成开发环境option/Linker中的graphics.lib选项设置为”on”。下面我们介绍:图形系统的初始化、图形系统的关闭、
图形模式控制。3.1.3、图形系统初始化和模式控制C语言图形程序设计基础2023/9/2西安工程大学数学系12图形系统初始化首先要调用initgraph()函数,它通过从磁盘上装入一个图形驱动程序来初始化图形系统,并将系统设置为图形模式。
1.图形系统的初始化图形模式是有别于文本模式的一种计算机屏幕显示模式。屏幕一般在默认情况下为80列25行的文本模式,在文本模式下,所有的图形函数均不能操作,因此在使用图形函数绘图之前,必须将屏幕显示适配器设置为一种图形模式,即为图形初始化过程。C语言图形程序设计基础2023/9/2西安工程大学数学系13[功能]将图形驱动软件装入内存,使屏幕显示适配器设置为图形模式,即图形系统初始化;[说明]1.gdriver是一个整型值,用来指定要装入的图形驱动程序;该值在头文件graphics.h中定义;2.gmode是一个整型值,用来设置图形显示模式。图形显示模式决定了显示的分辨率和显示的颜色的多少等;3.path是一个字符串,用来指明图形驱动程序所在的路径.1.若驱动程序就在用户当前目录下,则path可为空字符串,否则应给出具体路径名。一般情况下,TurboC安装在C盘的TC目录中,则该路径为:C:\TC,若写在参数中则为“C:\\TC”;2.前两个参数实际上是整型指针,调用时应加上地址运算符“&”;注:initgraph()函数[格式]
voidfarinitgraph(int*gdriver,int*gmode,char*path);C语言图形程序设计基础2023/9/2西安工程大学数学系14(1)已知显示器类型的图形系统初始化。
如果已经知道所用图形显示器的种类和要使用的图形模式则图形系统的初始化可用下面程序,例如:例1画一实心矩形#include"graphics.h"main(){intgdriver,gmode;gdriver=CGA;/*设置显示模式CGA*/gmode=CGAC0;/*选用CGA图形模式*/initgraph(&gdriver,&gmode,“D:\\TC");/*初始化图形系统*/C语言图形程序设计基础2023/9/2西安工程大学数学系15
bar3d(10,20,50,80,0,0);/*画一条形图*/getch();/*等待按一键结束*/closegraph();/*关闭图形系统,回到文本模式*/}程序注释:bar3d()函数
[格式]:voidbar3d(intx1,inty1,intx2,inty2,intdepth,inttopflag);[功能]:画一填充的三维条形图;[说明]:depth为条形的深度;topflag=0则不加顶,否则在条形图上加一个顶。C语言图形程序设计基础2023/9/2西安工程大学数学系16[格式]voidfardetectgraph(int*gdriver,int*gmode);[功能]在计算机有图形适配器的情况下,确定图形适配器的类型;[说明]1.若系统有图形适配器,则把gdriver指的变量设置为适合于适配器的图形驱动程序的代码,并把gmode所指的变量设置为适配器所能支持的最高分辨率。2.若系统无图形适配器,则gdriver所指的变量为-2.(2)不知显示器类型的图形系统初始化。若在编写程序过程中,不知道当前系统屏幕硬件的类型或编写的程序要用于不同的图形显示器,这就要求所编程序能知当前图形显示器的代码,TurboC供了一个对图形显示器硬件测试的函数detectgraph()。detectgraph()函数C语言图形程序设计基础2023/9/2西安工程大学数学系17例2、测试硬件显示模式和绘制图形#include"graphics.h"main(){intgdriver,gmode;detectgraph(&gdriver,&gmode);
/*测试结果存放于gdriver,gmode中*/if(gdriver<0){printf("thereisnotgraphicsdisplayer\n");exit(1);}/*无图形显示模式时,显示信息,停止程序*/
printf("detectgraphicsdriveris#%d,modeis#%d\n",gdriver,gmode);/*显示硬件测试结果*/
getch();/*等待按一键结束*/C语言图形程序设计基础2023/9/2西安工程大学数学系18initgraph(&gdriver,&gmode,"c:\\tc");/*初始化图形系统*/bar3d(10,20,50,80,10,1);getch();/*等待按一键结束*/closegraph();/*关闭图形系统,回到文本模式*/return(0);}C语言图形程序设计基础2023/9/2西安工程大学数学系19例3自动搜索显示类型和模式并初始化画图
#include"graphics.h"main(){(3)自动初始化图形系统。一般在程序设计中,可以把对图形显示器的检测和初始化工作放在一起来自动完成,规定Gdriver=DETECT,则initgraph()函数会自动按照系统所配置的图形显示器来确定驱动程序,并把图形模式设置为检测到的驱动程序的最高分辨率,实现图形系统的初始化.C语言图形程序设计基础2023/9/2西安工程大学数学系20
intgdriver=DETECT,gmode;
/*自动搜索显示器类型和显示模式*/
initgraph(&gdriver,&gmode,“C:\\TC");
/*初始化图形系统*/
bar3d(10,20,50,80,10,1);
/*画一三维立体有顶矩形*/
getch();
/*等待按一键结束*/closegraph();
/*关闭图形系统,回到文本模式*/return(0);}C语言图形程序设计基础2023/9/2西安工程大学数学系212.图形系统的关闭
在图形编程中,我们均用函数initgraph()对图形系统进行初始化,即启动图形系统,进入绘图状态,在程序结束时都用函数closegraph()关闭图形系统。closegraph()函数[格式]voidfarclosegraph();[功能]关闭图形模式。[说明]函数closegraph()用来关闭图形模式,释放用于保存图形驱动程序和字体所占用的内存空间。当一个程序需要从图形模式下退出,且回到文本模式下继续运行时可调用该函数。注:所有有关图形显示的程序一定是在initgraph()和closegraph()之间。C语言图形程序设计基础2023/9/2西安工程大学数学系223.图形模式的控制
为了对图形模式进行控制,即
1.从图形模式转换成文本模式,或从文本模式转换成图形模式;
2.设置驱动器有效模式或读取当前图形模式和范围。
TurboC都提供了相关的函数来实现其控制。1.getgraphmode()函数[格式]voidfargetgraphmode(void);[功能]返回当前图形模式值,其返回值如前表所示。C语言图形程序设计基础2023/9/2西安工程大学数学系23[功能]恢复屏幕在图形初始化前的模式。[说明]该函数使initgraph()函数所选定图形模式关闭,返回到调用initgraph()前的状态。注意它与closegraph()函数的区别。3.setgraphmode()函数[格式]voidfarsetgraphmode(intgmode);[功能]设置系统图形模式并清屏幕。[说明]该函数把当前的图形模式设置为gmode所指定的模式。C语言图形程序设计基础2.restorecrtmode()函数[格式]voidfarrestorecrtmode(void);2023/9/2西安工程大学数学系24注:通过调用以上函数,可实现使显示器暂时离开图形模式进入文本模式,进行文本输出,然后不经过initgraph()函数再返回图形模式的功能.4.getmoderange()函数[格式]voidfargetmoderange(intdriver,int*lomode,int*himode);[功能]获取图形驱动器可使用的模式范围。[说明]该函数可以确定由driver所指定图形驱动器能够支持的最低和最高模式,并将这些值放在由lomode和himode所指向的变量中.C语言图形程序设计基础2023/9/2西安工程大学数学系25例4图形模式控制函数应用程序#include"graphics.h"#include"stdio.h"#include"stdlib.h"main(){intgdriver,gmode,lo,hi;gdriver=CGA;/*设置显示模式为CGA*/getmoderange(CGA,&lo,&hi);/*获得CGA的图形模式范围*/printf("CGAsurpportingmodesrangefrom%dto%d.\n",lo,hi);/*显示CGA的显示模式范围/initgraph(&gdriver,&lo,"c:\\tc");/*初始化CGAC0图形系统*/bar3d(100,30,130,150,0,0);C语言图形程序设计基础2023/9/2西安工程大学数学系26getch();/*等待按一键结束*/
gmode=getgraphmode();/*获得现行图形模式*/restorecrtmode();/*返回图形初始化前的现实模式*/printf("NOWintextmode,pressanykeybacktographicsmode.\n");getch();
setgraphmode(gmode);/*再回到图形模式*/rectangle(50,30,100,130);/*画一矩形*/getch();closegraph();/*关闭图形系统,回到文本模式*/return(0);}C语言图形程序设计基础2023/9/2西安工程大学数学系27我们在画图时需要运用光标定点,即确定坐标位置。当屏幕处于文本状态时,左上角坐标原点为(1,1);而在图形模式下,以左上角为坐标原点(0,0),水平方向向右为X轴,垂直方向向下为Y轴。由于图形显示器和显示模式的不同,x、y坐标的最大值也就不同,可利用TurboC提供的函数来设定坐标(定点),读取当前光标的位置以及x、y轴的最大值。3.1.4、图形坐标的设置moveto()函数[格式]voidfarmoveto(intx,inty);[功能]把当前光标移到所需的位置(x,y)。1.定点C语言图形程序设计基础2023/9/2西安工程大学数学系28[说明]该函数把当前窗口中的当前光标位置(CP)移到所需的(x,y)位置。注:不是画线。例如:moveto(100,100)表示把当前光标移到点(100,100)位置上。moverel()函数[格式]voidfarmoverel(intdeltax,intdeltay);[功能]以增量方式移动当前光标。[说明]此函数把光标从当前位置(CP)开始,在x,y方向分别移动deltax和deltay,即由(x,y)(x+deltax,y+deltay).例如:若当前光标在(10,10)位置,执行moverel(10,20)后即移到(20,30)的位置上.C语言图形程序设计基础2023/9/2西安工程大学数学系29注:moveto(10,20)表示把当前光标移到点(10,20)位置上。moverel(10,20)后即移到(20,30)的位置上.MaxxMaxy(0,0)(10,10)(10,20)(20,30)当前光标movetomoverel图形模式C语言图形程序设计基础2023/9/2西安工程大学数学系30例如:语句printf(“cp’sloc:%d%d”,getx(),gety());显示光标当前位置的x值2.读取当前光标位置getx()函数[格式]intfargetx(void);[功能]读取当前光标在x轴的位置。gety()函数[格式]intfargety(void);[功能]读取当前光标在y轴的位置。C语言图形程序设计基础2023/9/2西安工程大学数学系31例5、显示系统中图形硬件支持的最大的x,y值.程序:#include"stdio.h"
#include"conio.h"3.读取x,y轴的最大值getmaxx()函数[格式]intfargetmaxx(void);[功能]读取当前光标在x轴的最大值。getmaxy()函数[格式]intfargetmaxy(void);[功能]读取当前光标在y轴的最大值。C语言图形程序设计基础2023/9/2西安工程大学数学系32#include"graphics.h"voidmain(){intgdriver,gmode;gdriver=CGA;gmode=CGAC0;initgraph(&gdriver,&gmode,"");printf("maxx,yis%d,%d",getmaxx(),getmaxy());getch();}输出结果为;maxx,yis319,199为什么?C语言图形程序设计基础2023/9/2西安工程大学数学系333.2图形颜色设置
在绘图时,往往要求配置一定的颜色加以渲染.在绘图系统中颜色分为前景色和背景色。前景色是指构成字符和图形点的颜色,而背景色是指整个显示屏幕的颜色。TurboC提供了多个颜色控制函数来设置前景色、背景色等。C语言图形程序设计基础2023/9/2西安工程大学数学系341.设置当前背景色setbkcolor()函数[格式]voidfarsetbkcolor(intcolor);[功能]设置当前背景颜色。[说明]
该函数将背景色设置成color所指定的颜色值。参数color可以用名字,也可以用数字,它们的对应关系在graphics.h
中定义。如下表:符号常量数值含义BLACK0黑色BLUE1蓝色GREEN2绿色Color取值可以由0到15C语言图形程序设计基础2023/9/2西安工程大学数学系352.设置当前画图颜色setcolor()函数[格式]voidfarsetcolor(intcolor);[功能]设置当前画图颜色。[说明]
该函数把当前画图颜色设置成color所指定的颜色值,即画笔的颜色。参数color可以用名字,也可以用数字,但当缺省时,默认是白色。C语言图形程序设计基础2023/9/2西安工程大学数学系363获取颜色信息getbkcolor()函数[格式]intfargetbkcolor(void);[功能]读取当前背景颜色。[说明]
该函数返回当前背景颜色。getcolor()函数[格式]intfargetcolor(void);[功能]读取当前画图颜色。[说明]
该函数返回当前画笔颜色。C语言图形程序设计基础2023/9/2西安工程大学数学系373.3.画点,画线putpixel()函数[格式]voidfarputpixel(intx,inty,intcolor);[功能]在点(x,y)处画一规定颜色的点。[说明]
该函数把color所指定的颜色写到(x,y)处的像素上。例如:语句putpixel(10,20,GREEN)使点(10,20)的像素成为绿色。getpixel()函数[格式]intfargetpixel(intx,inty);[功能]读取点(x,y)的颜色。[说明]
该函数返回指定点(x,y)位置上的像素颜色值。C语言图形程序设计基础2023/9/2西安工程大学数学系38#include"graphics.h#include"conio.h"voidmain(){intgdriver=DETECT,gmode;intcolor,i,max;initgraph(&gdriver,&gmode,"");/*初始化图形系统*/max=getmaxcolor();for(i=0;i<20;i++)putpixel(50+i*10,20,max);color=getpixel(50,20);putpixel(150,150,color);getch();closegraph();}例6、在不同位置画点C语言图形程序设计基础2023/9/2西安工程大学数学系39
line()函数[格式]voidfarline(intx1,inty1,intx2,inty2);[功能]指定两点间画一直线。[说明]该函数用当前颜色从点(x1,y1)到点(x2,y2)画一条直线,当前位置(CP)不变。
直线类函数lineto()函数[格式]voidfarlineto(intx,inty);[功能]从当前位置到点(x,y)画一条直线。[说明]并把当前位置(CP)定位在点(x,y)处。
C语言图形程序设计基础2023/9/2西安工程大学数学系40
linerel()函数[格式]voidfarlinerel(intdeltax,intdeltay);[功能]从当前位置相对CP位置在X方向增大deltax,在Y方向增大deltay处画一直线。线的特性设定我们在用画线函数画线时,其默认值均属于一个像素点宽度的实线。但往往有时需要改变线型和线的宽度,TurboC提供了一些可以改变线型和线宽的函数,具体如下:C语言图形程序设计基础2023/9/2西安工程大学数学系41setlinestyle()函数[格式]voidfarsetlinestyle(intlinestyle,unsignedpattern,intwidth);[功能]改变线型和线宽。[说明]
该函数所用的3个参数具体含义为:〈1〉linestyle为整型值,用来定义所画直线类型,如下表所示:C语言图形程序设计基础2023/9/2西安工程大学数学系42代号名代号说明SOLID_LINE0实线DOTTEN_LINE1点线CENTER_LINE2中心线DASHED_LINE3虚线USERBIT_LINE4用户定义的线型注:表中前4种为系统预定的类型,第5种为用户自定义类型〈2〉pattern为无符号整型数。该参数在需要用户自定义线型时才使用,若是使用前四种系统预定义的线型,则该参数可取0值。C语言图形程序设计基础2023/9/2西安工程大学数学系43〈3〉width为整型数。主要用来指定所画直线的粗细,以像素为单位,分两种情况,如下表所示:符号常量值含义NORM_WIDTH11个像素宽(缺省)THICK_WIDTH33个像素宽注:通过上述3个参数的不同组合,可以根据需要画出不同类型、不用粗细的直线。C语言图形程序设计基础2023/9/2西安工程大学数学系44例如:从点(10,20)到(150,70)画一条红色的点划线可用下面的语句:
setcolor(RED);setlinestyle(DASHED_LINE,0,THICK_WIDTH);line(10,20,150,70);注意:当函数setlinestyle的第一个参数为USERBIT_LINE(或4)时,用户可以自己定义直线类型。此时第三个参数意义不变而pattern才变得有意义,直线的类型由pattern来定义,该参数是一个16位二进制码,每一位(bit)表示一个像素。C语言图形程序设计基础2023/9/2西安工程大学数学系45若某一位置为1时表示直线上相应位置以当前颜色显示;若某一位置为0时,则其对应像素不显示或不改变原来的颜色;例如:
1.1111111111111111
表示16位全置1,因此可画一条16个像素的点实线。2.1010101010101010
表示隔一位置1,因此可画一条16个像素的点虚线。但:在实际编写程序时,一般要把16位二进制数转换为4位十六进制数,每4位二进制数转换为1位十六进制数。例如1111111111111111
FFFF。函数调用方法为:setlinestyle(4,0xFFFF,1);
可定义各种线型。C语言图形程序设计基础2023/9/2西安工程大学数学系46
在图形模式下主要是绘制图形,为了有效地对图形进行操作,TurboC提供了图形屏幕、图形窗口的处理功能,即在图形模式下开设“窗口”(又称为视图区),并对屏幕和图形进行处理。屏幕窗口操作1.图形屏幕处理cleardevice()函数[格式]voidfarcleardevice(void);[功能]清除整个图形屏幕(但保留底色),并把当前光标位置(CP)重新设置为(0,0)。C语言图形程序设计基础2023/9/2西安工程大学数学系47setactivepage()函数[格式]voidfarsetactivepage(intpage);[功能]设置图形输出活动页。[说明]该函数确定接受图形函数所输出的活动页,缺省值为屏幕显示0页。保存显示在屏幕上信息的RAM称为页(Page)。例如:语句setactivepage(1)表示设置第1页为活动页。setvisualpage()函数[格式]voidfarsetvisualpage(intpage);[功能]该函数显示Page所指定的可见图形页。例如:语句setvisualpage(1)表示选择显示第1页。C语言图形程序设计基础2023/9/2西安工程大学数学系48#include"graphics.h"#include"conio.h"voidmain(){intgdriver,gmode;gdriver=VGA;/*设置VGA图形设备器(驱动程序)*/gmode=VGAHI;/*设置VGA图形模式*/initgraph(&gdriver,&gmode,"");
/*初始化图形系统*/cleardevice();
/*清屏*/例7图形屏幕处理函数应用程序
C语言图形程序设计基础2023/9/2西安工程大学数学系49setactivepage(1);/*设置图形输出活动页为1*/circle(150,130,80);/*画一个圆*/setactivepage(0);/*设置图形活动页为0*/rectangle(40,160,90,180);/*画一个矩形*/getch();setvisualpage(1);/*设置可见图形1页*/getch();setvisualpage(0);
/*设置可见图形0页*/getch();closegraph();
/*关闭图形系统*/}C语言图形程序设计基础2023/9/2西安工程大学数学系50TurboC提供了图形窗口处理功能,并可以在屏幕某处设置一个图形窗口,以后有关图形的操作均相对于这个窗口的左上角为坐标原点(0,0)。可设置图形窗口之外的区域是不可接触的,这样所有的图形操作只在所指定图形窗口中进行,而不会出现在窗口之外。2.屏幕窗口操作clearviewport()函数[格式]voidfarclearviewport(void);[功能]清除当前图形窗口,并把当前光标位置(CP)重置为(0,0)。C语言图形程序设计基础2023/9/2西安工程大学数学系51若clipflag为1,则超出窗口的输出部分自动剪裁掉;若clipflag为0,则超出图形窗口之外的部分不被剪裁掉;setviewport()函数[格式]voidfarsetviewport(intleft,inttop,intright,intbottom,intclipflag);[功能]设置图形窗口。[说明]该函数建立一个新的图形窗口,窗口大小用左上角坐标(left,top)与右下角坐(right,bottom)来定义。C语言图形程序设计基础2023/9/2西安工程大学数学系52#include"graphics.h"#include"conio.h"voidmain(){
intgdriver=CGA,gmode=0;/*设置图形模式*/initgraph(&gdriver,&gmode,"");
/*初始化图形系统*/rectangle(30,25,80,80);
/*画一矩形*/setviewport(30,25,80,80,0);
/*设置窗口,其大小与前面所画图形,窗口之外不剪裁*/line(0,0,100,150);
/*画直线*/例8、窗口设置与清除作用
C语言图形程序设计基础2023/9/2西安工程大学数学系53getch();clearviewport();
/*清除窗口*/getch();cleardevice();
/*清屏*/getch();setviewport(20,15,80,80,1);/*重置窗口,窗口之外裁剪*/rectangle(0,0,60,65);
/*画一矩形*/line(0,0,100,150);
/*画直线*/getch();closegraph();/*关闭图形系统,回到文本模式*/}C语言图形程序设计基础2023/9/2西安工程大学数学系54为了能按照一定的要求对图形进行填充,通常应规定填充的模式和颜色。图形填充时,使用的是当前模式和颜色;若没有设置填充模式和颜色,则填充时使用缺省值。缺省填充模式为SOLID_FILL,填充颜色为函数返回值(一般为白色)。填充1.填充模式和颜色设置setfillstyle()函数[格式]voidfarsetfillstyle(intpattern,intcolor);[功能]设置当前填充模式和填充颜色。C语言图形程序设计基础2023/9/2西安工程大学数学系55[说明]
该函数用来设置当前填充模式和填充颜色,以便用于填充一个指定的封闭区域。其中参数〈1〉pattern用于指定填充模式,取值有12中,如下表:符号值含义图样
(数字为值)EMPTY_FILL0用背景色填充SOLID_FILL1实填充1LINE_FILL2用线“—”填充2LTSLASH_FILL3用斜杠填充3SLASH_FILL4用粗斜杠填充4BKSLASH_FILL5用粗反斜杠填充5C语言图形程序设计基础2023/9/2西安工程大学数学系56LTBKSLASH_FILL6用反斜杠填充6HATCH_FILL7网络线填充7XHATCH_FILL8斜网络线填充8INTERLEAVE_FILL9隔点填充9WIDE_DOT_FILL10稀疏点填充10CLOSE_DOT_FILL11密集点填充11USER_FILL12用户定义的模式〈2〉color是用于指定填充用的颜色,取值必须是当前屏幕模式的有效值.C语言图形程序设计基础2023/9/2西安工程大学数学系57例9、画一个二维和三维条形并填图。
#include"graphics.h"#include"conio.h"voidmain(){inti,gdriver=DETECT,gmode;/*自动搜索显示器类型和显示模式*/initgraph(&gdriver,&gmode,"D:\\TC");/*初始化图形系统*/setfillstyle(SOLID_FILL,GREEN);bar(100,100,150,200);setfillstyle(SOLID_FILL,RED);bar3d(200,100,250,200,10,1);C语言图形程序设计基础2023/9/2西安工程大学数学系58setfillstyle(HATCH_FILL,RED);bar3d(300,100,350,200,10,1);setfillstyle(SLASH_FILL,GREEN);bar3d(400,100,450,200,10,1);setfillstyle(CLOSE_DOT_FILL,BLUE);bar3d(500,100,550,200,10,1);getch();closegraph();}C语言图形程序设计基础2023/9/2西安工程大学数学系59C语言图形程序设计基础2023/9/2西安工程大学数学系60setfillpattern()函数[格式]voidsetfillpattern(char*upattern,intcolor)[功能]设置用户自定义填充模式。[说明]其中upattern指向用户定义的着色模式数据,即一指向8字节序列的指针。color代表用户定义的添充颜色。例如:我们来看下面这个例子。
若填充模式为用户定义USER_FILL,不能将setfillstyle的参数pattern的值取为12(USER_FILL),而用户必须用8个字节定义一个8X8点阵着色模式,再调用函数setfillpattern设置该模式.注:C语言图形程序设计基础2023/9/2西安工程大学数学系61例10设计如右图所示的填充图案。#include<graphics.h>main(){intgd=DETECT,gm;charp[8]={0x00,0x10,0x20,0x40,0x7e,0x40,0x20,0x10};initgraph(&gd,&gm,"D:\\TC");setbkcolor(15);
setfillpattern(p,2);bar(100,100,400,400);getch();closegraph();}0x000x100x200x400x7e0x400x200x10注:每个字节与该模式下的8个像素相对应。一旦某模式字节中的一位被置为1,则对应的像素被画出来。C语言图形程序设计基础2023/9/2西安工程大学数学系62例11、演示预定义的12种着色模式。
#include<graphics.h>main(){intgd=DETECT,gm,h,w; initgraph(&gd,&gm,"D:\\TC");setbkcolor(15);for(h=0;h<3;h++)for(w=0;w<4;w++){setfillstyle(h*4+w,9);bar(10+150*w,50+150*h,110+150*w,150+150*h);}getch();closegraph();}C语言图形程序设计基础2023/9/2西安工程大学数学系63运行结果—效果图C语言图形程序设计基础2023/9/2西安工程大学数学系642.漫延填充floodfill()函数[格式]voidfarfloodfill(intx,inty,border);[功能]填充一块有界的封闭区域。[说明]
该函数用来填充一块有界的封闭区域,(x,y)是待填充的起点,border指定填充区域边界所使用颜色。〈1〉若起点在封闭区域内,则区域内部被填充;
〈2〉若起点在封闭区域外,则区域外部被填充;注:用floodfill填充时,使用的是当前填充模式的填充颜色,也可以通过setfillstyle来改变设置。C语言图形程序设计基础2023/9/2西安工程大学数学系65例如下面三种情况:.(x,y)填充情况(二).(x,y)setfillstyle(SOLID_FILL,4);circle(100,100,80);填充情况(三)circle(100,100,80);setfillstyle(SOLID_FILL,4);floodfill(100,100,0);circle(100,100,80);setfillstyle(SOLID_FILL,4);floodfill(20,20,0);填充情况(一)注意:上面三种填充程序的区别C语言图形程序设计基础2023/9/2西安工程大学数学系66例2.15填充一个封闭圆。#include"graphics.h"#include"conio.h"voidmain(){inti,gdriver=DETECT,gmode;/*自动搜索显示器类型和显示模式*/initgraph(&gdriver,&gmode,"D:\\TC");/*初始化图形系统*/setbkcolor(1);/*定背景色(蓝)*/setcolor(4);/*定画笔色(红)*/C语言图形程序设计基础2023/9/2西安工程大学数学系67circle(100,100,30); /*画一个圆*/
setcolor(2);/*定画笔色(绿)*/circle(200,200,80);/*画一个圆*/setfillstyle(SLASH_FILL,14);/*定填充模式和填充色*/floodfill(100,100,4);/*填充一个封闭圆*/getch();closegraph();}执行结果C语言图形程序设计基础2023/9/2西安工程大学数学系68为了在图形模式下对文本进行操作,TurboC提供了对图形进行字符串输出,以及对输出字符的字型大小和方位进行控制等有关的文本输出函数。
图形模式下文本处理2.4.1文本输出函数outtext()函数[格式]voidfarouttext(char*textstring);[功能]把一字符串输出至屏幕当前光标位置。[说明]该函数在当前位置上输出一字符串。参数textstring是一个文本字符串。
注:若当前方向是水平的,则光标位置移动量为该字符串的长度,否则光标位置不变。C语言图形程序设计基础2023/9/2西安工程大学数学系69例如:语句outtext(“thisisastring”);将在当前位置输出字符串。outtextxy()函数[格式]voidfarouttextxy(intx,inty,char*textstring);[功能]在屏幕指定位置上输出一字符串。[说明]
该函数在指定位置(x,y)处输出字符串textstring。例如:语句outtextxy(70,100,“thisisastring”);将在点(70,100)处输出字符串thisisastring。
sprintf()函数[格式]sprintf(*str,*format,variable_list);C语言图形程序设计基础2023/9/2西安工程大学数学系70[功能]把要输出信息写入由str所指向的字符串中。[说明]由于前面两个函数只能输出字符串,若需要在图形模式下输出数值或其他类型数据,利用sprintf()函数就可以解决这个问题。其中str是字符串,format是格式字符串,variable_list是变量列表.例如:charstr[80];sprintf(str,”%s%d%c”,”one”,2,3);执行后,字符串的内容为one23.
注:1.sprintf的原型在头文件stdio中,因此它并不是一个图形函数,只是一个格式化输出函数,它的作用是产生含有多种类型数据的字符串。C语言图形程序设计基础2023/9/2西安工程大学数学系712.在图形模式下并不直接使用该函数,而是使用由它产生的结果,即字符串值,这个字符串中可以含有多种类型数据,有了这样的字符串,再用outtext和outtextxy输出其内容就能满足各种需要.例2.16画直线,并标注起始点坐标。#include"stdio.h"#include"graphics.h"#include"conio.h"voidmain(){charmsg[80],str[80];inti,gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"D:\\TC");C语言图形程序设计基础2023/9/2西安工程大学数学系72moveto(20,30);sprintf(msg,"%d,%d",getx(),gety());outtextxy(20,30,msg);linerel(100,100);sprintf(msg,"%d,%d",getx(),gety());outtext(msg);sprintf(str,"%s%s%s%c%s","who","=","I",3,"you");outtextxy(200,200,str);getch();closegraph();}注:“%s%s%s%c%s”改为“%s,%s,%s,%c,%s”结果会如何?C语言图形程序设计基础2023/9/2西安工程大学数学系731.设置输出文本字体、方向与字符大小在图形模式下,提供了两种向屏幕上写字符的方法:〈1〉位映像字符,也称点阵字符。位映像字符由8X8像素组成,每一位对应一个像素,如果某一位为1,则相应的像素将以当前颜色显示;若为0则相应的像素被置为背景色.例如下图为位映像字符A的展开图。输出文本的设置注:位映像字符是缺省方式,即在一般情况下,用C语言编写的程序将自动建立位映像字符。用C语言函数向屏幕输出文本时,都以位映像字符显示。C语言图形程序设计基础2023/9/2西安工程大学数学系74〈2〉笔画字符,也称矢量字符。笔画字符不是以位模式存储的,每个字符被定义成一系列的线段或笔画组合。笔画字符可以灵活地改变其大小,而且不会降低其分辨率。C语言提供了4种不同笔画字体,即小号字体、三倍字体、无衬线字体和黑体。每种笔画字体都放在独立字体文件中,如下表所示:文件名说明Goth.chr笔画黑体Litt.chr笔画小字体Sans.chr无衬线笔画字体Trip.chr三倍笔画字体注:使用笔画字体,必须装入字体文件,可通过settextstyle()函数来实现。C语言图形程序设计基础2023/9/2西安工程大学数学系75settextstyle()函数[格式]settextstyle(intfont,intdiretion,intcharsize);[功能]设置当前输出文本字体、显示方向和字符大小。[说明]函数共有3个参数,其含义如下:〈1〉:font是一个整型数,用来指定所用的字体,取值如下表。符号常量值含义DEFAULT_FONT08X8点阵字符TRIPLEX_FONT1三倍笔画字体SMALL_FONT2小号笔画字体SAN_SERIF_FONT3无衬线笔画字体GOTHIC_FONT4黑体笔画字体C语言图形程序设计基础2023/9/2西安工程大学数学系76〈2〉direction是一个整型数,用来指定文本输出方向。其取值如下表:符号常量值含义HORIZ_DIR0从左到右输出(缺省)VERT_DR1从上到下〈3〉charsize是一个整型数,该参数实际上是一个因子,它表示8X8点阵字符的放大倍数,即影响点阵字符,也影响笔画字符(注:settextstyle()函数来规定字符大小,但对笔画字符,字体只能在x,y方向上以相同倍数放大)。其取值如下表:C语言图形程序设计基础2023/9/2西安工程大学数学系77值或符号常量含义值或符号常量含义18X8点阵756X56点阵216X16点阵864X64点阵324X24点阵972X72点阵432X32点阵1080X80点阵540X40点阵USER_CHAR-SIZE(或O)用户定义字符的大小648X48点阵参数charsize的取值C语言图形程序设计基础2023/9/2西安工程大学数学系78例2.17画AAA,并放大。#include"graphics.h"#include"conio.h"voidmain(){charstr[80];inti,gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"D:\\TC");
setbkcolor(1);/*定背景色*/
setcolor(4);/*定画笔色*/settextstyle(TRIPLEX_FONT,HORIZ_DIR,2);outtextxy(10,10,"AAAA");C语言图形程序设计基础2023/9/2西安工程大学数学系79settextstyle(TRIPLEX_FONT,HORIZ_DIR,7);setcolor(2);outtextxy(30,30,"AAAA");settextstyle(TRIPLEX_FONT,HORIZ_DIR,12);setcolor(3);outtextxy(120,120,"AAAA");
settextstyle(TRIPLEX_FONT,HORIZ_DIR,1);sprintf(str,"%s","-printf:AAAA-hugang^2004.4.8");outtextxy(300,300,str);getch();closegraph();}C语言图形程序设计基础2023/9/2西安工程大学数学系802.设置文本对齐方式settextjustify()函数[格式]voidfarsettextjustify(inthoriz,intvert);[功能]设置文本输出在水平和垂直方向的输出方式。[说明]参数horiz和vert是整型数,其取值如下表:方向符号常量值功能当前位置LEFT_TEXT0左对齐在左边水平CENTER_TEXT1中间对齐在中部RIGHT_TEXT2右对齐在右边BOTTOM_TEXT0下对齐在底部垂直CENTER_text1中间对齐在中部Top_text2上对齐在顶边C语言图形程序设计基础2023/9/2西安工程大学数学系81注:其中参数horiz确定水平方向的对齐位置;参数vert确定垂直方向的对齐位置。例如:settextjustify(LEFT_TEXT,TOP_TEXT);所确定位置在文本字符串的左上角。在这以后,当用函数outtextxy()输出字符串时,这个位置就对准函数中的(x,y)位置,如下图所示:
CENTER,CENTERCENTER,TOPRIGHT,TOPRIGHT,CENTERRIGHT,BOTTOMLEFT,BOTTOMLEFT,CENTERLEFT,TOPCENTER,BOTTOMC语言图形程序设计基础2023/9/2西安工程大学数学系82settextstyle()函数来规定字符大小,但对笔画字体,字体只能在x,y方向上以相同倍数放大。TurboC提供了setusercharsize()函数对笔画字体在x,y方向规定不同的放大系数。3.改变矢量字体宽度和高度setusercharsize()函数[格式]setusercharsize(intmultx,intdivx,int
multy,intdivy);[功能]设置用户定义的笔画字型放大系数。[说明]x,y方向的放大系数分别为multx/divx和multy/divy。调用该函数后,显示在屏幕上的字型都以缺省值大小乘以multx/divx为字符宽,乘以multy/divy为其字符高。C语言图形程序设计基础2023/9/2西安工程大学数学系83注:这种方式只是在voidfarsettextstyle(intfont,intdiretion,intcharsize)函数中的charsize=0时才起作用.例2.18输出Normal和Neuron。#include"graphics.h"#include"conio.h"voidmain(){charstr[80];intgdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"D:\\TC");
C语言图形程序设计基础2023/9/2西安工程大学数学系84setbkcolor(1);/*定背景色*/
setcolor(4);outtext("Normal");settextstyle(TRIPLEX_FONT,HORIZ_DIR,USER_CHAR_SIZE);setusercharsize(5,1,3,1);outtext("neuron");getch();restorecrtmode();closegraph();}说明:三倍笔画字体、从左到右输出、用户自定义大小.C语言图形程序设计基础2023/9/2西安工程大学数学系85图形存取处理在图形模式下,图形存取有着十分重要的作用,这是图形动画的基础。图形存取的基本原理是:把屏幕上某个区域的信息存入一个缓冲区,然后在另一个区域把它的内容显示出来。imagesize()函数[格式]unsignedfarimgaesize(intx1,inty1,intx2,inty2);[功能]检测存储某区域所需的内存。[说明]1.该函数返回一个无符号整数值,它是存储图形所需要的字节数。2.5.1
检测所需内存C语言图形程序设计基础2023/9/2西安工程大学数学系862.参数x1,y1,x2,y2均为整数,用来确定要存储的屏幕区域。这个区域是一个矩形
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026安徽第二医学院高层次人才招聘20人备考题库附参考答案详解(研优卷)
- 2026春季乐山市商业银行校园招聘100人备考题库含答案详解(培优b卷)
- 2026湖南益阳市市直医疗卫生单位招聘及引进紧缺(急需)专业人才39人备考题库及答案详解(夺冠)
- 2026浙江宁波市镇海区骆驼街道工作人员、行政村后备干部及农村社工招聘10人备考题库及参考答案详解(达标题)
- 2026湖南益阳市市直医疗卫生单位招聘及引进紧缺(急需)专业人才39人备考题库附参考答案详解(培优a卷)
- 2026内蒙古通辽市科尔沁左翼后旗招聘政府专职消防员29人备考题库及参考答案详解(预热题)
- 2026辽宁丹东市公安局招聘警务辅助人员282人备考题库含答案详解(达标题)
- 2026四川达州大竹县公安局招聘警务辅助人员18人备考题库参考答案详解
- 2026河南黄金叶投资管理有限公司所属企业大学生招聘29人备考题库(第一批次)附答案详解(培优b卷)
- 雨课堂学堂在线学堂云《食品研究生实验技能综合训练(江南)》单元测试考核答案
- 非理想流动课件
- JG/T 137-2007结构用高频焊接薄壁H型钢
- 2024年山东司法警官职业学院招聘笔试真题
- 新人教版初中7七年级数学下册全册完整教案
- 2025年土地使用权永久性转让协议书
- DBJ41T 201-2018 民用建筑信息模型应用标准
- 灰土挤密桩施工分包合同
- 2024年广东省东莞市常平镇机关事业单位招聘编外86人历年(高频重点提升专题训练)共500题附带答案详解
- 2024山东特检集团招聘24人公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版
- 2022版义务教育(道德与法治)课程标准(附课标解读)
- 设计学研究方法书
评论
0/150
提交评论