
图形程序设计.ppt
65页图形程序设计,郭建方,Turbo C为用户提供了一个功能很强的画图软件库,它又称为Borland图形接口(BGI),它包括图形库文件(graphics.lib),图形头文件(graphics.h)和许多图形显示器(图形终端)的驱动程序(如CGA.BGI、EGAVGA.BGI等)及一些字符集的字体驱动程序(如goth.chr黑体字符集等) 编写图形程序时用到的一些图形库函数均在graphics.lib中,执行这些函数时,所需的有关信息(如宏定义等)则包含在graphics.h头文件中图形显示的坐标,显示器的屏幕如同一张坐标纸,在其上显示图形时,图形上任一点的位置均有确定的坐标,即可用x,y坐标值来表示图形显示的坐标--象素,显示器显示的图形均由一些圆点组成(其亮度、颜色不同),这些点称为象素(或称象点),它们是组成图形的最小单位 象素的大小可以通过设置不同的显示方式来改变象素在屏幕上的位置则可由其所在的x,y坐标来决定图形显示器与适配器,计算机中要显示的字符和图形均以数字形式存储在存储器中,而显示器接收的应是模拟信号 常用的显示器有三条模拟红绿兰颜色的模拟信号输入线,每条输入线的电压决定了颜色的亮度,只要能产生出可区分的电压来,它们不同的组合,便可使显示器显示出不同的颜色来。
图形显示器与适配器,插在PC微机插槽中的图形卡(即适配器),其作用就是将要显示的字符和图形以数字形式存储在卡上的视频存储器VRAM中,再将其变成视频模拟信号送往相应适配的显示器进行显示,也即适配器在计算机主机和显示器之间起到了信息转换和视频发送作用 由于计算机配有的显示器种类不同,因而适配器种类不同,常用的几种适配器,1.单色显示适配器(MDA);仅显示一种颜色,仅支持80×25行的字符显示 2.彩色图形适配器(CGA);这是PC/XT等微机配用的显示器图形卡,它可以产生单色或彩色字符和图形 3.增强型图形适配器〔EGA);除支持CGA的四种显示模式外,还增加了分辨率为640×200的16色显示方式, (EGAHI),也可显示16色常用的几种适配器,4.视频图形阵列适配器(VGA);它是目前流行的PC微机显示标准,它支持CGA,EGA的所有显示方式,但自己还有640×480的高分辨显示方式(VGAHI)、640×350的中分辨显示方式(VGAMED)和640×200的低分辨显示方式(VGALO),它们均可有16种显示颜色可供选择常用的几种适配器,5.TVGA;它是目前市面上最流行的PC 486,586微机配的显示器标准,在图形方式下,它可有640×400,640×480,800×600,1024×768及768×1024等分辨率,可选颜色达256种,在文本方式下,可支持25、30、43、60行,132列的字符显示。
它也兼容CGA、EGA、VGA的显示方式,由于Turbo C早于该产品出现,因而上述增强了的显示方式均不支持,但对于高级编程者,可通过对TVGA各专用寄存器直接编程来实现这些功能常用的几种适配器,6.PVGA;它是paradise VGA的缩写,它由Western Digital公司生产,有的叫SVGA(香港Surperking公司生产的386微机上使用)还有称为EVGA(Extended VGA),它们和PVGA在软硬件上均是兼容的PVGA完全兼容CGA、EGA、VGA的所有工作方式,它还有自己一些特有的工作模式,与TVGA类似 7.XGA;XGA是IBM公司新推出的一种增强性图形适配器,它是VGA的换代产品,具有更高的分辨率和性能,它有和CGA,EGA,VGA全兼容的工作方式,但显示速度却比VGA快一倍常用的几种适配器,8.CVGA;这是国内研制的带有显示汉字功能的VGA图形适配器,它带有汉字字库,该适配器提供了和CGA、EGA、VGA全兼容的工作方式,还提供了在文本工作方式下的高分辨图形显示功能在它的ROM BIOS中提供了INT10H的功能号为30H-38H的功能调用,因而提供了方便的汉字处理功能。
显示器工作方式,文本方式或称字符显示方式 图形显示方式 它们的主要差别是显示存储器(VRAM)中存的信息不同字符方式时,VRAM存放要显示字符的ASCII码,用它作为地址,取出字符发生器ROM(固定存储器)中存放的相应字符的图象(又称字模),变成视频信号在显示器屏上进行显示图形方式时,则要显示的图形的图象直接存在VRAM中,VRAM中某地址单元存放的数就表示了相应屏幕上某行和列上的象素及颜色Turbo C支持的适配器和图形模式,1.MCGA(多色图形阵列);它和VGA是PS/2系列微机的主要适配器,MCGA功能上同CGA相似,它和CGA是部分兼容的,但有些功能又和VGA类似,可有640×480的二色模式 2.IBM8514;该适配器可插入PS/2微机中,它有较强的图形功能,最高分辨率可达1024×768,可有256种颜色 3.HERC;大力神公司生产的一种单色适配器,是PC系列微机早期的第三种显示标准(其它两种MDA和CGA),它采用720×348高分辨单色显示模式 4.EGAMONO;EGA单色适配器,它只有一种640×350单色显示模式图形系统的初始化,即要用什么类型的图形显示适配器的驱动程序, 采用什么模式的图形方式(也就是相应程序的入口地址), 适配器驱动程序的寻找路径名。
注意:所用系统的显示适配器一定要支持所选用的显示模式,否则将出错图形系统的初始化 图形系统的初始化函数,,void far initgraph(int far *driver,int far *mode,char far *path_for_driver);,其中gdriver和gmode分别表示图形驱动器和模式,path是指图形驱动程序所在的目录路径图形驱动程序由TurboC出版商提供,文件扩展名为.BGI根据不同的图形适配器有不同的图形驱动程序例如对于EGA、VGA图形适配器的图形驱动程序为EGAVGA.BGI图形系统的初始化 图形系统检测函数,,void far detectgraph(int far *graphdriver,int far *graphmode);,有时编程者并不知道所用的图形显示器适配器种类,而且我们为了将编写的程序可以用于不同图形驱动器,增强程序的通用性,我们通常不指定图形显示器适配器种类,而使用Turbo C提供了一个自动检测显示器硬件的函数, 其中gdriver和gmode意义同上例1:自动进行硬件测试后进行图形初始化,#include “graphics.h“ main( ) { int gdriver, gmode; detectgraph( },上例程序中先对图形显示器自动检测,然后再用图形初始化函数进行初始化设置。
其中,closegraph()为退出图形状态的函数,其调用格式为:voidfarclosegraph(void);调用该函数后可退出图形状态而进入文本方式,并释放用于保存图形驱动程序和字体的系统内存同时TurboC提供了一种更简单的初始化图形的方法,即用gdriver=DETECT语句后再跟initgraph()函数就行了比如,上例可改为例2的样子例2:自动进行硬件测试后进行图形初始化,#include “graphics.h“ main() { int gdriver=DETECT, gmode; initgraph( },屏幕颜色的设置,对于图形模式的屏幕颜色设置,同样分为背景色的设置和前景色的设置在Turbo c中分别使用以下两个函数: void far setbkcolor (int color); 设置背景色 void far setcolor (int color); 设置作图色 其中color为图形方式下颜色的规定数值,符号常数及数值如下所示屏幕颜色的设置,符号常数 数值 含义 字符或背景 BLACK 0 黑 两者均可 BLUE 1 兰 两者均可 GREEN 2 绿 两者均可 CYAN 3 青 两者均可 RED 4 红 两者均可 MAGENTA 5 洋红 两者均可 BROWN 6 棕 两者均可 LIGHTGRAY 7 淡灰 两者均可 DARKGRAY 8 深灰 只用于字符 LIGHTBLUE 9 淡兰 只用于字符 LIGHTGREEN 10 淡绿 只用于字符 LIGHTCYAN 11 淡青 只用于字符 LIGHTRED 12 淡红 只用于字符 LIGHTMAGENTA 13 淡洋红 只用于字符 YELLOW 14 黄 只用于字符 WHITE 15 白 只用于字符 BLINK 128 闪烁 只用于字符,清除图形屏幕内容使用清屏函数,其调用格式如下 void far cleardevice(void); 有关颜色设置、清屏函数的使用请看例3。
例3: #include “stdio.h“ #include “graphics.h“ main() { int gdriver, gmode, i,j; gdriver=DETECT; registerbgidriver(EGAVGA_driver); initgraph( /*延迟3000毫秒*/ },for(i=0; i=15; i++) { setbkcolor(i); /*设置不同背景色*/ cleardevice(); for(j=0; j=15;j++) { setcolor(j); /*设置不同作图色*/ circle(319, 239, 20+j*15); /*画半径不同的圆*/ delay(3000); } } getch(); closegraph(); },,另外,TURBO C也提供了几个获得现行颜色设置情况的函数 int far getbkcolor(void); 返回现行背景颜色值 int far getcolor(void); 返回现行作图颜色值 int far getmaxcolor(void); 返回最高可用的颜色值。
基本图形函数 基本图形函数包括画点,线以及其它一些基本图形的函数画点,1. 画点函数 void far putpixel(int x, int y, int color);该函数表示有指定的象元画一个按color 所确定颜色的点对于颜色color的值可从上表中获得而对x,y是指图形象元的坐标在图形模式下,是按象元来定义坐标的对VGA适配器,它的最高分辨率为640x480,其中640为整个屏幕从左到右所有象元的个数,480为整个屏幕从上到下所有象元的个数屏幕的左上角坐标为(0,0),右下角坐标为(639, 479),水平方向从左到右为x轴正向,垂直方向从上到下为y轴正向TURBO C的图形函数都是相对于图形屏幕坐标,即象元来说的关于点的另外一个函数是: int fargetpixel(int x, int y); 它获得当前点(x, y)的颜色值画点,2. 有关坐标位置的函数 int far getmaxx(void); 返回x轴的最大值 int far getmaxy(void); 返回y轴的最大值 int far getx(void); 返回游标在x轴的位置 void far gety(void); 返回游标有y轴的位置。
void far moveto(int x, int y); 移动游标到(x, y)点,不是画点,在移动过程中亦画点 void far moverel(int dx, int dy); 移动游标从现行位置(x, y)移动到(x+dx, y+dy)的位置,移动过程中不画点画线与线型设定,1. 画线函数 TURBO C提供了一系列画线函数,下面分别叙述: void far lin。












