C语言图形设计.doc
《C语言图形设计.doc》由会员分享,可在线阅读,更多相关《C语言图形设计.doc(22页珍藏版)》请在沃文网上搜索。
1、第11章 图形设计第11章 图形设计图形设计在计算机应用领域占有很重要的地位,它广泛应用于计算机辅助设计、计算机辅助制造、医学等领域,即使是软件本身也越来越多地以图形界面进行人机交互。各种微机上的C语言都提供了图形处理功能,事实上,各自的标准库函数中大部分是图形处理函数。不同的C编译系统,图形功能可能有些差别,相同功能所用的库函数名也可能不一样,但它们的处理方法基本上是一致的。本章以Turbo C2.0作为工作环境,介绍图形程序的设计。11.1 图形处理基本概念11.1.1 图形处理与显示适配器计算机中的图形显示都是经过显示适配器(又称显卡)的处理才能输出到显示器上,显示适配器在图形处理中有着
2、重要的作用。由于显示适配器的不同,所支持的图形模式也不同,下面介绍一下Turbo C2.0所支持的显示适配器类型。1、CGACGA是PC/XT等微机配置的彩色图形适配器,它可以显示单色或彩色字符和图形。在图形方式下,Turbo C支持两种分辨率:一种是高分辨率方式(CGAHI),这种方式分辨率可达640*200像素,达到这种最高分辨率时,背景色是黑色(也可以重新设置),前景色可以选择一种(也只能选择一种),因此图形只显示两种色彩(即前景色和背景色);另一种是中分辨率显示方式,这种方式分辨率可达320*200像素,其背景色和前景色均可由用户选择,但仅能显示4种颜色。因此,可以有4种颜色模式供选择
3、,即CGAC0、CGAC1、CGAC2和CGAC3,主要区别是显示的4种颜色不同。2、EGAEGA是一种增强图形适配器,它除了能支持CGA的4种显示模式外, Turbo C中支持两种分辨率:一种是低分辨率方式(EGALO),分辨率为640*200像素的16色显示方式;另一种是高分辨率显示方式(EGAHI),分辨率为640*350像素的16色显示方式。3、VGAVGA是目前流行的显示标准,称为视频图形阵列适配器,它支持CGA、EGA的所有显示方式,同时还有640*480像素的高分辨率显示方式(VGAHI),还支持640*350像素的中分辨率显示方式(VGAMED)和620*200像素的低分辨率显
4、示方式(VGALO),它们均可达到16种显示颜色。4、MCGAMCGA的功能与CGA相似,它和CGA部分兼容,但有些功能又和VGA类似,它有640*480像素的2色模式。5、IBM8514IBM8514适配器有较强的图形功能,最高分辨率可达1024*768像素,有256种颜色。6、EGAMONOEGAMONO(单色适配器)是一种640*350像素单色显示模式。其他Turbo C支持的适配器及其显示模式参见后面的表11.3。11.1.2 文本模式文本模式是显示文本字符的一种显示方式,它显示的是字符,而在图形模式下,显示的是像素。在文本模式下绘图时需要对显示字符的位置进行定位,这种定位是由坐标系统
5、来决定的,由于是文本显示模式,要控制字符的位置就可以用字符显示时的行、列为设置坐标的单位。在缺省方式下,Turbo C规定屏幕坐标为每屏80列25行,屏幕的左上角为第1行第1列,右下角为25行80列,如图11.1所示。第1列第1行第25行第80列(1,1)图11.1 文本模式坐标系统在Turbo C中除了缺省的80列25行显示方式外,还提供了其他文本显示方式(见表11.1)。在文本模式下,可以显示各种字符,可以控制字符的色彩、亮度和背景色等,Turbo C中提供了很多在文本模式下进行屏幕处理的函数,这些函数在使用时需要包含头文件“conio.h”。11.1.3 图形模式yx(0,0)图11.2
6、 图形屏幕坐标系统在图形模式下,显示的基本单位是像素,像素作为图形处理的基本单位,在屏幕上显示为一个点(又称像素点)。屏幕上像素的数目就是我们常说的屏幕分辨率,分辨率的高低取决于显示适配器、显示器和屏幕显示模式。显示图形时,也可以通过屏幕坐标系统来决定像素点的位置,在屏幕坐标系统中,以左上角为坐标原点,x轴向右,y轴向下,原点坐标为(0,0),如:(310,195)表示第310列、195行处像素的坐标。如图11.2所示。在程序设计中使用像素时,先必须初始化屏幕,其中必须指定图形模式,Turbo C中使用到的图形模式参见后面的表11.3。四、设计图形程序的步骤利用C语言设计的图形程序,通常具有以
7、下程序框架:(1)确定图形显示方式,即图形模式的初始化;(2)设置屏幕的背景色和前景色等属性;(3)利用图形函数,在规定的坐标位置上画图形或写文字;(4)在一些封闭的图形区域填充颜色;(5)关闭图形显示方式。11.2 文本模式下的图形处理在文本模式下,Turbo C提供了一系列屏幕处理函数,这些函数包含在头文件“conio.h”中。11.2.1 文本模式设置文本模式的设置可以通过函数textmode()来实现。该函数的使用格式如下:textmode(int mode);参数mode是将要设置的文本模式,可以取的参数值如表11.1所示。表11.1 文本模式文本模式名称文本模式代码坐标行列数颜色模
8、式BW40040*25(40列25行)黑白C40140*25(40列25行)彩色BW80280*25(80列25行)黑白C80380*25(80列25行)彩色MONO780*25(80列25行)单色LASTMODE-1上一次的行列数上一次的颜色模式在函数textmode()使用时,参数mode可以是文本模式名,也可以是文本模式代码,例如,下面的程序代码都是设置文本模式为彩色、40*25。textmode(1);textmode(C40);11.2.2 颜色设置在文本模式下,如果使用了彩色的文本模式,就可以设置输出时的文本颜色及背景颜色,这些设置可以由相应的函数完成。一、文本颜色设置文本颜色可以
9、由函数textcolor()来设置。该函数的功能是:设置显示文本的前景色,也就是字符的颜色。该函数使用格式如下:textcolor(int color);参数color是将要设置的颜色,可以取的参数值如表11.2所示。表11.2 屏幕颜色表颜色常量数值含义颜色常量数值含义BLACK0黑色LIGHTBLUE9淡蓝色BLUE1蓝色LIGHTGREEN10淡绿色GREEN2绿色LIGHTCYAN11淡青色CYAN3青色LIGHTRED12浅红色RED4红色LIGHTMAGENTA13淡洋红色MAGENTA5洋红色YELLOW14黄色BROWN6棕色WHITE15白色LIGHTGRAY7浅灰色BLIN
10、K16闪烁DARKGRAY8深灰色可以使用颜色常量或数值来设置文本颜色,例如,textcolor(GREEN);textcolor(2);上面的两行语句都可以设置文本的前景色为绿色。二、文本背景颜色设置除了可以设置文件的前景色外,还可以设置文本的背景色,文本的背景色由函数textbackground()来设置。该函数使用格式如下:textbackground(int color);参数color是将要设置的颜色,可使用的参数值为表11.2中的前8种(即数值为0-7)。三、文本属性设置文本颜色设置函数textattr()可用于设置文本的属性,包括前景色、背景色,以及字符显示时是否闪烁、是否加亮,
11、该函数使用格式如下:textattr(int attr);参数attr使用一个字节来描述文本的属性,名位的含义如图11.3所示。图11.3 文本属性字节的含义RGBIRGBBLINK闪烁背景色前景色加亮从图中可以看出低4位(03位)用来设置字符显示的颜色(前景色),对应取的颜色值为015;第46位用于设置背景色;最高位设置显示出的字符是否闪烁。设置文本属性时,可以通过位运算来控制颜色设置到字节的具体位。例如,下面的语句将设置黄色背景下的红色字符:textattr(RED+(YELLOW4);下面的语句将设置白色背景下的绿色闪烁字符:textattr(GREEN+BLINK+(WHITE4);四
12、、文本亮度设置Turbo C中提供了三个设置文本亮度的函数,分别如下:highvideo(); /* 用于设置文本为高亮显示 */lowvideo(); /* 用于设置文本为低亮显示 */normvideo(); /* 用于设置文本为正常亮度 */11.2.3 文本输出文本窗口是文本模式下在屏幕上定义的一个矩形区域,在文本窗口定义后,如果要在屏幕上显示文本信息,将只显示在这个窗口中,而不能输出到窗口以外的区域。默认情况下,窗口就是整个屏幕。一、文本窗口的设置使用window()函数可以将全屏幕窗口设置成指定大小的窗口。使用格式如下:window(int left,int top,int rig
13、ht,int bottom);(left,top)是窗口左上角的坐标,而(right,bottom)是窗口右下角的坐标。一旦窗口定义好,前面的textcolor()、textbackground()和textattr()函数将只对窗口有效,窗口以外区域不受影响。二、文本的输出以前我们学过的printf()、puts()和putchar()等函数都是以全屏幕为窗口进行输出,如果要以自定义的窗口为输出对象,则需要使用文本窗口下的输出函数,它们分别是:cprintf(char *format,表达式表列);cputs(char *str);putch(int ch);这三个函数的功能相当于print
14、f()、puts()和putchar(),用法也相同,只是它们以窗口作为输出对象,而不是全屏幕。三、屏幕清除在图形绘制中经常需要将屏幕或窗口中原来的输出清除掉,为此,Turbo C提供了文本方式下对屏幕进行清除的函数,分别如下:clrscr();clreol();delline();clrscr()函数将整个窗口或屏幕中的文本全部清除,并将光标移到窗口/屏幕左上角,如果在执行该函数前设置过文本颜色、背景颜色或文本属性,则清屏后这些设置将生效。clreol()函数将当前文本从光标位置开始到本行结束的所有字符都清除,但不改变光标位置。delline()函数将清除光标所在行的所有字符。例11.1 显
15、示彩色文本#include #include /* 将文本模式处理函数头文件包含进来 */main() char str80=彩色文字; textmode(C80); /* 设置文本模式 */ textcolor(YELLOW); /* 设置文本颜色 */ textbackground(CYAN); /* 设置背景色 */ clrscr(); window(5,1,20,4); /* 设置窗口 */ textcolor(RED); /* 设置文本颜色 */ clrscr(); cprintf(n%sn,str); /* 输出字符串 */ window(25,1,40,4); textbackg
16、round(BLUE); /* 设置背景色 */ clrscr(); cprintf(n%sn,str); /* 输出字符串 */ window(45,1,60,4); textattr(BLACK+(WHITE4); /* 设置文本属性 */ clrscr(); cprintf(n%sn,str); /* 输出字符串 */ getch(); /* 等待按键 */程序执行时显示结果如下: 程序中的语句“getch();”是暂停程序向下执行,当按任意键才继续执行,常用来让运行程序停留在输出界面。四、光标定位前面学习的几种输出函数都是从当前行当前光标位置顺序输出,不能满足绘图的需要。为了能在窗口的
17、指定位置输出,可以使用gotoxy()函数,该函数使用格式如下:gotoxy(int x,int y);gotoxy()函数的功能是:将光标移动到坐标(x,y)位置,并以此位置作为当前的输出位置。注意:这里的(x,y)是相对当前窗口而言的。例11.2 文字字幕本例实现了在文本模式下移动文本,将像电影中的字幕一样。#include /* 将文本模式处理函数头文件包含进来 */main() int i,k=1; char str80=Turbo C 2.0; textmode(C80); /* 设置文本模式 */ window(1,1,80,4); /* 设置窗口 */ textcolor(RED
18、); /* 设置文本颜色 */ textbackground(BLUE); /* 设置背景色 */ clrscr(); /* 清除整个窗口 */ i=1; while(1) delay(10000); /* 设置延时 */ if(i70) i=i%70; k+; /* 循环移动文本,k为循环次数 */ gotoxy(i,2); /* 设置光标位置 */ delline(); /* 清除当前行所有字符 */ cprintf(%s,str); /* 输出文本 */ i+; if(k10) break; /* 当循环10次后将结束 */ getch(); /* 暂停程序执行,直到按任意键后继续 */
19、 程序运行时可以看到字符串“Turbo C 2.0”文字在定义的窗口(蓝底、红字)中从左到右循环移动,一共移动10次。11.2.4 文本图形处理在ASCII码和扩展ASCII码中有一些字符图形,如果要在屏幕上输出一些文本图形,就要用来这些图形字符。在文本模式下,要想输出这些字符图形,只需要使用putch()函数将ASCII码输入即可,例如:putch(8); 是向屏幕输出一个字符8;putch(0x01); 是向屏幕输出一个小笑脸图形。在输出之间可以使用gotoxy()函数将光标定位到需要输出图形的位置,再将字符图形输出。一、文本图形的移动函数函数movetext()可以将指定矩形区域中的文本
20、复制到一个新的位置。该函数使用格式如下:movetext(int x1,int y1,int x2,int y2,int x3,int y3);movetext()函数的功能是:将左上角为(x1,y1),右下角为(x2,y2)的矩形区域复制到以(x3,y3)为左上角坐标的新位置,并且,原矩形区域内的图形不会改变。需要注意的是,movetext()函数中的坐标是以全屏幕为坐标系统,而与窗口无关。例11.3 文本图形移动举例#include /* 将文本模式处理函数头文件包含进来 */main() char str80=移动区域; textmode(C80); /* 设置文本模式 */ windo
21、w(1,1,80,25); /* 设置窗口 */ clrscr(); textcolor(RED); /* 设置文本颜色 */ textbackground(CYAN); /* 设置背景色 */ cprintf(%s,str); /* 输出文本 */ movetext(1,1,10,1,10,10); /* 将(1,1)到(10,1)矩形区域复制到(10,10)为左上角的新位置*/ movetext(1,1,10,1,20,15); /* 将(1,1)到(10,1)矩形区域复制到(20,15)为左上角的新位置*/ movetext(1,1,10,1,30,20); /* 将(1,1)到(10,
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 图形 设计