资源描述
第12章,图形与音乐设计,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,重庆电力高等专科学校,*,12.1,图形设计,12.2,音乐设计,12.1 图形设计,12.1.1 图形设计根底,1.Turbo C与图形接口,C语言具有相当强的图形处理能力,支持CGA、MCGA、EGA、VGA和IBM8514等图形显示器。,图形模式下,屏幕上每一个可以控制的单元叫做像素pixel,它是组成图形的根本元素,一般称为点。,通常把屏幕上所包含的像素的个数叫做分辨率。分辨率越高,显示的图形越细致,质量越好。,2.Turbo C图形库函数,Turbo C 但凡在程序中要调用这些图形函数,都必须在程序文件的开头写上文件包含命令“include。,Turbo C图形函数库中提供的函数包括7类:,1图形系统控制函数,2画线与填充函数,3管理屏幕和视口函数,4图形方式下的字符输出函数,5颜色控制函数,6图形方式下的错误处理函数,7状态查询函数,3.Turbo C绘图的根本步骤,1设置图形模式,Turbo C提供图形方式初始化函数initgraph()。,2绘制图形,在图形方式下使用各种绘图函数绘制图形,这是图形设计的第二步。,如circle(100,200,50)就可以在点(100,200)处绘制一个半径为50的圆。,3关闭图形方式,closegraph()函数用来关闭图形方式返回文本方式,这是图形设计的第三步。,【例12.1】使用Turbo C图形系统的一个简单实例。,#include/调用图形库函数,#include,main(),int gdrive=DETECT,gomde;,int x_max,y_max;,initgraph(/初始化图形方式,x_max=getmaxx();,y_max=getmaxy();,moveto(x_max/2,0);,lineto(0,y_max);,lineto(x_max,y_max);,lineto(x_max/2,0);,getch();,closegraph();/关闭图形方式 ,12.1.2 图形模式设置,1.图形方式初始化,初始化通过函数initgraph来完成。其调用格式为:,initgraph(*gdriver,*gmode,*path);,函数initgraph通过从磁盘装入一个图形驱动程序来完成初始化图形系统,并将系统设置为图形方式,其中3个参数的含义如下。,1gdriver是一个枚举型变量,它属于显示器驱动程序的枚举类型:,Enum graphics_driverDETECT,CGA,MCGA,EGA,EGA64,EGAMONO,IBM8514,HERCMONO,ATT400,VGA,PC3270;,2gmode是一个整型值,用来设置图形显示模式,不同的图形驱动程序有不同的图形显示模式,即使是同一个图形驱动程序下,也有几种图形显示模式。,3path是一个字符串,用来指定图形驱动程序所在的路径即BGI的存储路径。,2.关闭图形方式,在运行图形程序绘图结束后,要回到文本方式,以进行其他工作,这时应关闭图形方式。关闭图形方式要调用的函数closegraph。其调用格式为:,closegraph;,其作用是释放所有图形系统分配的存储区,恢复到调用initgraph之前的状态。,12.1.3 根本图形绘制,图形由点、线、面组成,图形的绘制使用根本绘图函数来完成的。主要介绍几类根本图形的绘制方法。,1.画点,画点函数如下:,putpixel(int x,int y,intcolor);,它表示在指定的x,y位置画一个点,点的显示颜色由设置的color值决定,关于颜色的设置,将在设置颜色函数中介绍。,如:putpixel(10,10,WHITE);/*在10,10处画一白点*/,2.画直线,1line函数,line(int x1,int y1,int x2,int y2);,line函数用于在指定两点之间画一条直线段,参数x1,y1,x2、y2使用绝对坐标,x1,y1和x2,y2分别为直线的两个端点坐标。用line函数画直线时,当前点位置不变。,2lineto函数,lineto(int x,int y);,lineto函数用于从当前点位置到指定位置x,y画一条直线,并改变当前点的位置。所以画一条直线的同时,当前点的位置也移到了指定点,即直线的终点。,3moveto函数,movetoint x,int y;/将当前点移动到x,y。,4linerel函数,linerelint dx,int dy;,linerel函数使用相对坐标画直线。其功能是从当前点位置开始画线到指定点位置,指定点位置的坐标不是以绝对坐标的形式给出的,而是以其相对于当前点位置的坐标增量给出的。假设当前点位置坐标是x,y,那么“linereldx,dy等效为“linetox+dx,y+dy。,5moverel函数,moverelint dx,int dy;,该函数的功能与moveto函数相似,但他使用的是相对坐标。用于将当前点位置在x和y方向上分别移动增量dx和dy。,【例12.2】绘制直线,#include graphics.h,void main(),int gd=DETECT,gm;,initgraph(,cleardevice();,printf(n Draw lines with function line.);,line(160,120,480,120);,line(480,120,480,360);,line(480,360,160,360);,line(160,360,160,120);,getch();,cleardevice();,printf(n Draw lines with function lineto.);,moveto(160,120);,lineto(480,120);,lineto(480,360);,lineto(160,360);,lineto(160,120);,getch();,cleardevice();,getch();,printf(n Draw lines with function linerel.);,moveto(160,120);,linerel(320,0);,linerel(0,240);,linerel(320,0);,linerel(0,240);,getch();,closegraph();,3.画矩形和条形,画矩形函数rectangle将画出一个矩形框,而画条形函数bar将以给定的填充模式和填充颜色画出一个条形图来。,1画矩形函数,rectangleint x1,int y1,int x2,int y2;,该函数将以x1,y1为左上角,x2,y2为右下角画一个矩 形框。,2画条形函数,barint x1,int y1,int x2,int y2;,该函数将以x1,y1为左上角,x2,y2为右下角画一实形条状图,没有边框,图的颜色和填充模式可以设定。如果没有设定,那么可以使用缺省模式。,【例12.3】绘制矩形和条形图,#include graphics.h,main(),int gd=DETECT,gm,x;,initgraph(,cleardevice();,rectangle(100,20,200,50);,bar(100,80,150,180);,getch();,closegraph();,4.画椭圆、圆和扇形图形,1画椭圆函数,ellipse(int x,int y,int stangle,int endangle,int xradius,int yradius);,2画圆函数,circleint x,int y,int radius;,3画圆弧函数,arc(int x,int y,int stangle,int endangle,int radius);,4画扇形函数,piestiliceint x,int y,int stangle,int endangle,int radius;,12.1.4 图形属性设置,1.屏幕颜色控制,图形模式的屏幕颜色设置分为背景色的设置和前景色的设置。在Turbo C中分别用下面两个函数来实现。,设置背景色:setbkcolorint color;,设置作图色:setcolorint color;,【例12.5】在蓝色背景屏幕窗口画一个红色边线的圆。,#include,main(),int gd=DETECT,gm;,initgraph(,cleardevice();,setbkcolor(1);,setcolor(4);,circle(200,200,100);,getch();,closegraph();,2.设置线条类型,设置线条类型采用函数setlinestyle来实现。该函数用于设置当前绘图所用的线型和宽度。其调用格式为:,setlinestyleint sty,int pat,int b;,该函数所用的3个参数含义如下:,1sty用来定义所画直线的类型。,2pat用于用户自定义直线的类型,如果sty值取0-3系统预定义的线型,那么pat不起作用,可赋值为0。如果sty取值为4时,用户可自定义线型。,3b表示所画线的粗细,以像素为单位。可取NORM_WIDTH和THICK_WIDTH,对应数值为1和3,含义是1个像素宽和3个像素宽。,3设置填充类型和填充颜色,填充即用规定的颜色和图模填满一个封闭的图形。,1设置填充模式和填充颜色函数setfillstyle,其调用格式:,setfillstyle(int pattern,int color);,其中,参数pattern用于指定填充模式。,2常用的填充函数。,barint x1,int y1,int x2,int y2函数,以x1,y1为左上角,x2,y2为右下角画矩形窗口并填充。,fillellipseint x,int y,int rx,int ry函数,以x,y为中心坐标,rx、ry分别为x轴和y轴半径,画椭圆并填充。,sectorint x,int y,int stangle,int endange,int rx,int ry,以x,y为圆心,rx、ry分别为x轴和y轴半径,从起始角stangle开始到endangle角结束,画椭圆扇形,并填充。,3任意封闭图形的填充,floodfill函数可以实现对任意封闭图形区域的填充操作,其调用格式为:,floodfillint x,int y,int bcolor;,参数x,y指位于填充区域内任意一点坐标,以该点作为填充起始点。bcolor为填充区域边界的颜色。,例如:,setcolorRED;,circle(320,240,150);,setfillstyleSOLID_FILL,GREEN;,floodfill320,240,RED;,该段程序的作用是,用红色画一个圆,然后用绿色色块填充该圆。可以看出任意封闭图形的填充步骤为:先确定填充图形边界比方例题中的画圆语句,然后用setfillstyle函数确定填充模式和颜色,最后用floodfill函数填充图形区域。,12.1.5 图形方式下文本的输出,Turbo C 2.0提供了专门用于在图形模式下输出文本的函数。,1.文本输出函数,outtext(char far*textstring);在当前位置输出字符串指针textstring所指的文本。,outtextxy(int x,int y,char far*textstring);在(x,y)坐标处输出字符串指针textstring所指的文本。,2.定义文本字型,settextstyle(font,direction,charsize);设置文本字型、方向和大小,其中三个参数都为整型。,【,例12.9,】,#include graphics.h,main(),int gd=DETECT,gm;,char s30;,initgraph(,settextjustify(CENTER_TEXT,CE
展开阅读全文