C语言图形函数.ppt
Turbo C绘图程序设计绘图程序设计.图形显示器的工作方式图形显示器的工作方式IBM PC IBM PC 机的显示器可以在两种基机的显示器可以在两种基本视频方式下工作:文本方式;图本视频方式下工作:文本方式;图形方式。形方式。(1)文本方式文本方式屏幕上可以显示的最小单位屏幕上可以显示的最小单位是字符,字符在屏幕上以行、是字符,字符在屏幕上以行、列排列,如列排列,如2580个字符个字符。(2)图形方式图形方式屏幕上可以控制的最小单元称作屏幕上可以控制的最小单元称作像素像素(pixel),它是组成图形的,它是组成图形的基本元素。基本元素。在图形方式下,屏幕上每个像素的显在图形方式下,屏幕上每个像素的显示位置用屏幕坐标系来描述。在该坐示位置用屏幕坐标系来描述。在该坐 标系中,屏幕左上角为坐标系的原点,标系中,屏幕左上角为坐标系的原点,坐标值为坐标值为(0,0)。屏幕坐标系屏幕坐标系坐标值的范围决定于所用显示器的坐标值的范围决定于所用显示器的 分辨率。分辨率。.图形函数及其用法图形函数及其用法Turbo C 的图形函数均在一个头文件的图形函数均在一个头文件“graphics.h”中定义。所以,凡是在中定义。所以,凡是在程序中要调用这些图形函数,都必须程序中要调用这些图形函数,都必须在源程序的开头写上文件包含命令:在源程序的开头写上文件包含命令:#include TC绘图程序:绘图程序:图形系统初始化图形系统初始化 绘图绘图 关闭图形模式关闭图形模式图形方式初始化图形方式初始化通过从磁盘上装入一个图形驱动程序通过从磁盘上装入一个图形驱动程序 来初始化图形系统,并将系统设置为来初始化图形系统,并将系统设置为 图形模式。其调用格式为:图形模式。其调用格式为:initgraph(&gdriver,&gmode,path);若若 gdriver=DETECT;则由系统自动检测图形适配器则由系统自动检测图形适配器的最高分辨率模式的最高分辨率模式,并装入相应的图形驱动程序并装入相应的图形驱动程序.path是一个字符串,用来指明图形驱动程序所在的路径。是一个字符串,用来指明图形驱动程序所在的路径。若图形驱动程序在用户当前目录下,则若图形驱动程序在用户当前目录下,则path为空串为空串.举例:举例:int gdriver=DETECT,gmode ;initgraph(&gdriver,&gmode,“”);关闭图形模式关闭图形模式closegraph();LINE 函数:函数:在指定两点之间画直线。在指定两点之间画直线。如:如:line(x1,y1,x2,y2);MOVETO 函数:函数:移到指定点(不画线)。移到指定点(不画线)。如:如:moveto(x,y);CIRCLE 函数:函数:指定圆心和半径画圆。指定圆心和半径画圆。如:如:circle(xc,yc,r);ARC 函数:函数:画一段圆弧。要求指定圆弧所在圆的画一段圆弧。要求指定圆弧所在圆的圆心、半径,以及圆弧的起始角度和终圆心、半径,以及圆弧的起始角度和终止角度。止角度。如:如:arc(xc,yc,angs,ange,r);RECTANGLE 函数:函数:指定矩形的左上角和右下角画一个矩形。指定矩形的左上角和右下角画一个矩形。如:如:rectangle(x1,y1,x2,y2);DRAWPOLY 函数:函数:画一条多边折线。画一条多边折线。如:如:drawpoly(n,p);其中,其中,n 为多边折线的顶点数;为多边折线的顶点数;p 为存放为存放顶点坐标值的数组名。数组顶点坐标值的数组名。数组元素个数为元素个数为2*n.如果如果首尾两点重合,则可以绘制一个多边形首尾两点重合,则可以绘制一个多边形。例如:例如:#include “graphics.h”main()int gdriver,gmode;static int p 8=10,20,150,150,200,30,10,20;gdriver=DETECT;initgraph(&gdriver,&gmode,“”);/*图形系统初始化图形系统初始化*/drawpoly(4,p);/*画一个三角形画一个三角形*/getch();closegraph();/*关闭图形系统,返回文本方式关闭图形系统,返回文本方式 */图形的属性指颜色和线型,颜色又分图形的属性指颜色和线型,颜色又分 为背景色和前景色。为背景色和前景色。系统的默认值为:背景色为黑色;前系统的默认值为:背景色为黑色;前景色为白色;线型为实线。景色为白色;线型为实线。setbkcolor(背景色);设置背景色(背景色);设置背景色 如:如:setbkcolor(BLUE);设置背景色为兰色);设置背景色为兰色 setbkcolor(12);设置背景色为);设置背景色为12号色号色setcolor(画笔色);设置画笔色(画笔色);设置画笔色 如:如:setcolor(YELLOW);设置画笔色为黄色);设置画笔色为黄色 setcolor(5);设置画笔色为);设置画笔色为5号色号色注意:背景色和画笔色可以是名字或数字。见下表。注意:背景色和画笔色可以是名字或数字。见下表。符号名数值颜色BLACKBLUEGREENCYANREDMAGENTABROWNLIGHTGRAYDARKGRAYLIGHTBLUE0123456789黑色蓝色绿色青色红色紫红色棕色浅灰色深灰色浅蓝色表表符号名数值颜色LIGHTGREENLIGHTCYANLIGHTREDLIGHTMAGENTAYELLOWWHITE101112131415浅绿色浅青色浅红色浅紫色黄色白色putpixel(x,y,color););在(在(x,y)处以)处以color色画一点色画一点 例:例:putpixel(10,20,RED);在();在(10,20)处)处画一红点画一红点getpixel(x,y);得到得到(x,y)处的颜色值处的颜色值 例例:if(getpixel(300,270)=7)outtextxy(x,y,”字符串字符串”););从(从(x,y)处开始显示字符串)处开始显示字符串例:例:outtextxy(10,20,”ABCF”);在();在(10,20)处显示)处显示ABCFsetfillstyle(p,color);设置填充模式设置填充模式p(取值为(取值为0-12)及填充色)及填充色color。floodfill(x,y,bcolor);从从(x,y)开始,用开始,用setfillstyle设置好的填充模式及填充色向四设置好的填充模式及填充色向四周填充,直到边界(边界色为周填充,直到边界(边界色为bcolor)为)为止。止。例例:setcolor(RED);circle(300,200,50);setfillstyle(2,GREEN);floodfill(300,200,RED);从(从(300,200)开始,按)开始,按setfillstyle设置的模式及颜色开始设置的模式及颜色开始填充,一直到红色边界填充,一直到红色边界(圆周边界圆周边界)才停止。才停止。bar(x1,y1,x2,y2);由由setcolor设置的颜色画一个矩形,设置的颜色画一个矩形,并自并自动动按按setfillstyle设置的模式及颜色对矩形设置的模式及颜色对矩形填充填充.矩形的左上角坐标矩形的左上角坐标(x1,y1),矩形的右下角坐标矩形的右下角坐标(x2,y2)pieslice(x,y,a1,a2,r);由由setcolor设置的颜色画一个扇形,并设置的颜色画一个扇形,并自自动动按按setfillstyle设置的模式及颜色对扇形设置的模式及颜色对扇形填充填充.起始角度起始角度a1,终止角度,终止角度a2,圆心(,圆心(x,y),半径),半径r下面是与动画有关的几个函数:下面是与动画有关的几个函数:getimage(x1,y1,x2,y2,p);将屏幕左上角将屏幕左上角(x1,y1),右下角右下角(x2,y2)的矩形区域内的图象的矩形区域内的图象存到指针存到指针P所指向的内存区域中。所指向的内存区域中。putimage(x,y,p,op);将将p所指向的内存区域的内容在屏幕上显示所指向的内存区域的内容在屏幕上显示,左上角坐标左上角坐标(x,y)。op=0:预先对屏幕不进行任何操作预先对屏幕不进行任何操作;1:预先对屏幕进行预先对屏幕进行“异或异或”操作操作;2:预先对屏幕进行预先对屏幕进行“或或”操作操作;3:预先对屏幕进行预先对屏幕进行“与与”操作操作;4:预先对缓冲区内容进行求预先对缓冲区内容进行求“反反”操作操作;imagesize(x1,y1,x2,y2)返回保存位图象所需的字节数。返回保存位图象所需的字节数。例:图形移动例:图形移动 (一个矩形块水平右移一个矩形块水平右移)。#include”graphics.h”#include”stdlib.h”main()void *w;int driver=DETECT,mode,i;initgraph(&driver,&mode,”);rectangle(20,150,70,200);w=malloc(imagesize(20,150,70,200);getimage(20,150,70,200,w);for(i=1;i500;i+)putimage(i+20,150,w,0);/*清除当前矩形清除当前矩形*/putimage(i+20,150,w,1);/*在新位置显示矩形在新位置显示矩形*/free(w);getch();closegraph();屏幕管理屏幕管理:setviewport(x1,y1,x2,y2,c);设置视图区。设置视图区。(x1,y1)为为视视图图区区的的左左上上角角坐坐标标;(x2,y2)为为视视图图区区的的右右下下角角坐标。坐标。c为为裁裁剪剪状状态态参参数数,当当c=1时时,则则超超出出视视图图区区的的图图形形部部分分被被自自动裁剪掉;当动裁剪掉;当c=0时,则对超出视图区的图形不作裁剪处理。时,则对超出视图区的图形不作裁剪处理。注注意意:视视图图区区建建立立以以后后,所所有有的的图图形形输输出出坐坐标标都都是是相相对对于于当当前前视视图图区区的的,即即视视图图区区左左上上角角点点为为坐坐标标(0,0)点点,而而与与图图形在屏幕上的位置无关。形在屏幕上的位置无关。clearviewport();清除视图区。清除视图区。cleardevice();清除屏幕,并将当前点位置设置为原点清除屏幕,并将当前点位置设置为原点(0,0)。但是其它的。但是其它的图形系统设置将保持不变,如线型、填充模式、视图区的设图形系统设置将保持不变,如线型、填充模式、视图区的设置等。置等。