




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、授课教师:臧辉 联系方式: 教材:计算机图形学王汝传等教材:计算机图形学王汝传等 编著编著 人民邮电出版社人民邮电出版社 3 3月月8 8日课程内容日课程内容1 1、复习、复习2.4-2.52.4-2.5内容,并请同学回答内容,并请同学回答问题问题; ;2 2、3.1-3.23.1-3.2节内容节内容复习内容:复习内容:2.4 2.4 图形核心系统简介图形核心系统简介2.5 2.5 通用图形软件简介通用图形软件简介问题:举个自己平时使用的图形软件问题:举个自己平时使用的图形软件的应用。的应用。本节课重点:本节课重点:1 1、图形系统的初始化和模式控制、图形系统的初始化和模式控制; ;2 2、屏
2、幕窗口操作、屏幕窗口操作; ;3 3、颜色的设置、颜色的设置; ;4 4、调色板的应用、调色板的应用; ;第三章 C语语言图图形程序设计设计基础础 屏幕设置屏幕设置 图形颜色设置图形颜色设置 线的特性设定和填充线的特性设定和填充 图形模式下文本处理图形模式下文本处理 图形存取处理图形存取处理 常用画图函数常用画图函数 绘图程序实例绘图程序实例 在屏幕上进行绘图一般要执行如下步骤在屏幕上进行绘图一般要执行如下步骤: :(1 1)设置屏幕为图形方式;)设置屏幕为图形方式;(2 2)选择背景与实体颜色;)选择背景与实体颜色;(3 3)计算坐标;)计算坐标;(4 4)调用绘图语句绘制实体。)调用绘图语
3、句绘制实体。第三章 C语语言图图形程序设计设计基础础3.1 屏幕设置屏幕设置一、屏幕显示方式与坐标系一、屏幕显示方式与坐标系 1. 1. 文本方式与字符坐标系文本方式与字符坐标系 在屏幕上只能显示字符的方式称为文本方式在屏幕上只能显示字符的方式称为文本方式。在文本方式下,屏幕上可以显示的最小单位。在文本方式下,屏幕上可以显示的最小单位是字符。为了能在指定位置显示每个字符,是字符。为了能在指定位置显示每个字符,C C语语言提供了字符坐标系。言提供了字符坐标系。左上角为坐左上角为坐标原点(标原点(1 1,1 1) 水平方向(水平方向(x x轴)分为轴)分为若干列若干列 垂直方向(垂直方向(y y轴
4、)分为轴)分为若干行若干行 第三章 C语语言图图形程序设计设计基础础如:如:(8(8,2020)表示字符位于屏幕第)表示字符位于屏幕第8 8行第行第2020列列Turbo CTurbo C支持以下支持以下6 6种不同的显示方式:种不同的显示方式: (l l)BW40 BW40 黑白黑白25254040(2525行,行,4040列)列)(2 2)C40 C40 彩色彩色25254040(3 3)BW80 BW80 黑白黑白25258080(4 4)C80 C80 彩色彩色25258080(5 5)MONO MONO 单色单色25258080(6 6)C4350C4350彩色彩色43438080(
5、EGAEGA),),50508080(VGVG) 显示方式不同,所显示的字符的列数和行数也不一样显示方式不同,所显示的字符的列数和行数也不一样,颜色也有区别,颜色也有区别, ,屏幕上所显示的字符数量也不一样。屏幕上所显示的字符数量也不一样。 第三章 C语语言图图形程序设计设计基础础2.2.图形方式与点坐标图形方式与点坐标 在屏幕上显示的图形称图形方式。在屏幕上显示的图形称图形方式。 屏幕是由像素点组成的,其像素点多少决定了屏幕的分辨率。屏幕是由像素点组成的,其像素点多少决定了屏幕的分辨率。分辨率越高,显示图形越细致,质量越好。分辨率越高,显示图形越细致,质量越好。 在图形方式下,屏幕上每个像素
6、的显示位置用点坐标来描述。在图形方式下,屏幕上每个像素的显示位置用点坐标来描述。点坐标系点坐标系左上角为坐左上角为坐标原点(标原点(0 0,0 0) 垂直方向为垂直方向为y y轴,自上轴,自上向下向下 水平方向水平方向为为x x轴,自轴,自左向右左向右 第三章 C语语言图图形程序设计设计基础础 分辨率不同,水平方向和垂直方向的点数也不一样,即分辨率不同,水平方向和垂直方向的点数也不一样,即其其maxxmaxx,maxymaxy数值也不同。数值也不同。 在在Turbo CTurbo C中,坐标数据可以用两种形式给出:一种是中,坐标数据可以用两种形式给出:一种是绝对坐标绝对坐标; ;另一种是相对坐
7、标。另一种是相对坐标。绝对坐标的参考点是坐标的原点(绝对坐标的参考点是坐标的原点(0 0,0 0),),x x和和y y只能取规只能取规定范围内的正整数。定范围内的正整数。相对坐标是相对相对坐标是相对“当前点当前点”的坐标,所以其坐标的参考点的坐标,所以其坐标的参考点不是坐标系的原点,而是当前点。在相对坐标中,不是坐标系的原点,而是当前点。在相对坐标中,x x和和y y的的取值是相对于当前点在取值是相对于当前点在x x方向和方向和y y方向上的增量,方向上的增量,x x和和y y可以可以是正整数,也可以是负整数。是正整数,也可以是负整数。点坐标系坐标值的范围决定于所使用适配器显示分辨率点坐标系
8、坐标值的范围决定于所使用适配器显示分辨率。第三章 C语语言图图形程序设计设计基础础二、图形驱动程序与图形模式二、图形驱动程序与图形模式1. 1. 图形驱动程序图形驱动程序 支持不同图形适配器的一组程序支持不同图形适配器的一组程序 由于图形显示器的种类繁多,其控制方式也各有差异,所以要显由于图形显示器的种类繁多,其控制方式也各有差异,所以要显示图形就需先装入相应的图形驱动程序。示图形就需先装入相应的图形驱动程序。 Turbo C Turbo C提供了几种图形驱动程序可支持的图形适配器。下表列出提供了几种图形驱动程序可支持的图形适配器。下表列出驱动程序其相应的符号常量和规定值。驱动程序其相应的符号
9、常量和规定值。 符号常量 数 值 符号常量符号常量 数数 值值DETECTDETECTCGACGAMCGAMCGAEGAEGAEGA64EGA64EGAMONOEGAMONO 0 1 2 3 4 5 IBM8514IBM8514HERCMONOHERCMONOATT400ATT400VGAVGAPC3270PC3270 6 6 7 7 8 8 9 9 10 10第三章 C语语言图图形程序设计设计基础础2. 2. 图形模式图形模式 每种图形显示器有不同的图形显示模式每种图形显示器有不同的图形显示模式 由于每种图形显示器各有几种不同的图形显示由于每种图形显示器各有几种不同的图形显示模式,因此,要显
10、示图形就必须确定所用的显示模式,因此,要显示图形就必须确定所用的显示模式,也就是说,要显示图形,不但要先装入相模式,也就是说,要显示图形,不但要先装入相应驱动程序,而且还要决定所用的显示模式。不应驱动程序,而且还要决定所用的显示模式。不同的图形驱动程序有不同的图形模式;即使在同同的图形驱动程序有不同的图形模式;即使在同一图形驱动程序下,也可能会有几种图形模式。一图形驱动程序下,也可能会有几种图形模式。 图形驱动程序及其相应模式具体见书图形驱动程序及其相应模式具体见书P53P53表表3.23.2第三章 C语语言图图形程序设计设计基础础驱动程序驱动程序(driver) (driver) 图形模式图
11、形模式gmodegmode值值分辨率分辨率调色板调色板 CGACGAC0CGAC0 0 0320320200200 C0 C0CGAC1CGAC1 1 1320320200200 C1 C1CGAC2CGAC2 2 2320320200200 C2 C2CGAC3CGAC3 3 3320320200200 C3 C3CGAHI CGAHI 4 4640640200200 2 2色色 MCGAMCGAMCGAC0MCGAC0 0 0320320200200 C0 C0MCGAC1MCGAC1 1 1320320200200 C1 C1MCGAC2MCGAC2 2 2320320200200 C2
12、 C2MCGAC3MCGAC3 3 3320320200200 C3 C3MCGAMEDMCGAMED 4 4640640200200 2 2色色MCGAHIMCGAHI 5 5640640480480 2 2色色图形驱动程序及其相应模式(部分)图形驱动程序及其相应模式(部分)三三 、图形系统初始化和模式控制、图形系统初始化和模式控制 Turbo C Turbo C中图形函数均在头文件中图形函数均在头文件“graphics.h”“graphics.h”中定义,所以,凡是在程序中要调用这些图形函数中定义,所以,凡是在程序中要调用这些图形函数,都必须在程序文件的开头写上文件包含命令:,都必须在程序
13、文件的开头写上文件包含命令: # include # include graphics.hgraphics.h第三章 C语语言图图形程序设计设计基础础1. 1. 图形系统初始化图形系统初始化 (1).(1).问题的提出问题的提出 一般缺省情况下,屏幕为一般缺省情况下,屏幕为8080列列2525行的文本方行的文本方式。在文本方式下,所有的图形函数均不能操作式。在文本方式下,所有的图形函数均不能操作,因此在使用图形函数绘图之前,必须将屏幕显,因此在使用图形函数绘图之前,必须将屏幕显示适配器设置为一种图形模式,这就是图形初始示适配器设置为一种图形模式,这就是图形初始化过程。化过程。 图形系统初始化首
14、先要调用图形系统初始化首先要调用initgraph()initgraph()函函数,它通过从磁盘上装入一个图形驱动程序,来数,它通过从磁盘上装入一个图形驱动程序,来初始化图形化系统,并将系统设置为图形模式。初始化图形化系统,并将系统设置为图形模式。 第三章 C语语言图图形程序设计设计基础础 (2). (2).初始化函数初始化函数initgraph()initgraph()函数格式为:函数格式为:void far initgraph(int void far initgraph(int * *gdrivergdriver;int int * *gmode,char gmode,char * *p
15、ath);path);gdrivergdriver:是一个整型值,用来指定要装入的图形:是一个整型值,用来指定要装入的图形驱动程序,该值在头文件驱动程序,该值在头文件 graphics.h graphics.h中定义,如中定义,如p51p51表表3.l3.l所示。所示。gmode:gmode:是一个整型值,用来设置图形显示模式。图是一个整型值,用来设置图形显示模式。图形显示模式决定了显示的分辨率,可同时显示的颜色形显示模式决定了显示的分辨率,可同时显示的颜色的多少,调色板的设置方式等,几种不同的图形显示的多少,调色板的设置方式等,几种不同的图形显示模式如模式如p53p53表表3.23.2所示。
16、所示。第三章 C语语言图图形程序设计设计基础础path:path:是一个字符串,用来指明图形驱动程序是一个字符串,用来指明图形驱动程序所在路径。如果驱动程序就在用户当前目录下所在路径。如果驱动程序就在用户当前目录下,则该参数可以空字符串,否则应给出具体路,则该参数可以空字符串,否则应给出具体路径名。一般情况下,径名。一般情况下,Turbo CTurbo C安装在安装在C C盘的盘的TCTC目目录中,则该路径为:录中,则该路径为:C:TCC:TC,如果写在参数中则,如果写在参数中则为为“C:TC”“C:TC”。注意:前两个参数实际上是整型指针,调用时注意:前两个参数实际上是整型指针,调用时应加上
17、地址运算符应加上地址运算符“”。 第三章 C语语言图图形程序设计设计基础础对对farfar关键字的解释:关键字的解释:farfar并非并非C C语言的标准关键字,语言的标准关键字,主要是远程链接的作用,可以将其视为远指针函数,以主要是远程链接的作用,可以将其视为远指针函数,以内存管理是段式管理为例,没有内存管理是段式管理为例,没有farfar这个关键字时,内这个关键字时,内存地址仅是段内跳转,有存地址仅是段内跳转,有farfar这个关键字时内存地址是这个关键字时内存地址是段间跳转。段间跳转。int far int far 或者或者 void far void far 表示要编译器给声表示要编译
18、器给声明的这些量分配在明的这些量分配在 远处的存储器远处的存储器(RAM)(RAM)中,即分配到中,即分配到 64K 64K 以外的以外的 存储地址中。存储地址中。 64K 64K 作为一个作为一个“段段”(Segment),”(Segment),是是 PC PC 机机 80 x86 80 x86 时期的老概念。超过时期的老概念。超过64K 64K 就是就是 “ “远远”, FAR FAR 就是就是 “ “远远”的英文。的英文。 几个头几个头文件文件graphics.hstdlib.hconio.hstdio.h第三章 C语语言图图形程序设计设计基础础(3)(3)初始化方式初始化方式已知显示器
19、类型的图形系统初始化已知显示器类型的图形系统初始化 已知所用图形显示器的种类和要使用的图形模式,初已知所用图形显示器的种类和要使用的图形模式,初始化图形系统可如下面程序所示:始化图形系统可如下面程序所示:例例3.13.1#include graphics.h#include graphics.h main() main()int gdriver,gmode;int gdriver,gmode; gdriver=CGA; gdriver=CGA;/ /* *设置驱动程序为设置驱动程序为CGACGA* */ / gmode=CGAC0; gmode=CGAC0;/ /* *选用选用CGACGA图形
20、模式图形模式* */ / initgraph(&gdriver,&gmode,c:TC); initgraph(&gdriver,&gmode,c:TC);/ /* *初始化图形系统初始化图形系统* */ / bar3d(10,20,50,80,0,0); / bar3d(10,20,50,80,0,0); /* *画一实心长方形画一实心长方形* */ / getch(); getch(); / /* *等待按一键结束等待按一键结束* */ / closegraph(); closegraph();/ /* *关闭图形系统,回到文本方式关闭图形系统,回到文本方式
21、* */ / 此处也可用整型常数此处也可用整型常数代替符号常量代替符号常量gdriver=1; gmode=0;gdriver=1; gmode=0;第三章 C语语言图图形程序设计设计基础础不知显示器类型的图形初始化。不知显示器类型的图形初始化。 Turbo C Turbo C提供了一个对图形显示器硬件测试提供了一个对图形显示器硬件测试的函数的函数detectgraphdetectgraph()。()。 它的格式为:它的格式为:void far detectgraph(int void far detectgraph(int * *gdriver,int gdriver,int * *gmod
22、e);gmode);该函数在计算机有图形适配器的情况下,确定该函数在计算机有图形适配器的情况下,确定图形适配器的类型,若系统有图形适配器,则图形适配器的类型,若系统有图形适配器,则返回适合于适配器的图形驱动程序的代码,用返回适合于适配器的图形驱动程序的代码,用gdrivergdriver指向的整型量表示,该函数把指向的整型量表示,该函数把gmodegmode所所指的变量设置为适配器所能支持的最高分辨率指的变量设置为适配器所能支持的最高分辨率。若系统无图形适配器,则。若系统无图形适配器,则gdrivergdriver所指变量为所指变量为-2-2。第三章 C语语言图图形程序设计设计基础础例例3.2
23、3.2#include stdio.h#include stdio.h#include “conio.h”#include “conio.h”#include “stdlib.h”#include “stdlib.h”#include graphics.h#include graphics.hmain()main() int gdriver,gmode;int gdriver,gmode;detectgraph(&gdriver,&gmode);detectgraph(&gdriver,&gmode);/ /* *测试结果存放于测试结果存放于gdriver,gm
24、odegdriver,gmode中中* */ /if(gdriver0)if(gdriver=3a=3,那么将显,那么将显示值最大的那种颜示值最大的那种颜色,例如色,例如CGAC0CGAC0,将显示黄色将显示黄色(2 2)高分辨率)高分辨率高分辨率方式显示高分辨率方式显示640640200200个像素点,只有两种个像素点,只有两种颜色。黑色背景和彩色前景。由于颜色。黑色背景和彩色前景。由于CGACGA本身原因本身原因,背景色就是硬件所认为的背景色,可用,背景色就是硬件所认为的背景色,可用setbkcolorsetbkcolor参照课本参照课本P60P60表表3.33.3设置,前景色(即设置,前
25、景色(即画笔颜色)始终是青色。画笔颜色)始终是青色。第三章 C语语言图图形程序设计设计基础础 例例3.123.12在高分辨率下画一青色圆。在高分辨率下画一青色圆。# include graphics.h# include graphics.h#include conio.h#include conio.hvoid main()void main() int gdriver=CGA,gmode=CGAHI;int gdriver=CGA,gmode=CGAHI;initgraph(&gdriver,&gmode, );initgraph(&gdriver,&gmo
26、de, );cleardevice();cleardevice();setbkcolor(3);setbkcolor(3);circle(160,100,50);circle(160,100,50);circle(160,100,25);circle(160,100,25);getch();getch();closegraph();closegraph(); 程序执行后,在青色屏幕上显示两个白色圆图形。程序执行后,在青色屏幕上显示两个白色圆图形。 第三章 C语语言图图形程序设计设计基础础2 2、EGAEGA调色板调色板 对对EGAEGA来说,总共可以有来说,总共可以有6464种颜色种颜色, ,
27、但只有但只有一个调色板,这个调色板只有一个调色板,这个调色板只有1616项,可同时显项,可同时显示示1616种颜色。默认的这种颜色。默认的这1616种颜色可参看种颜色可参看P60P60表表3.33.3。表。表3.53.5(见书(见书P63P63)的颜色不准确,是随机)的颜色不准确,是随机选取的,不作为参考。选取的,不作为参考。 第三章 C语语言图图形程序设计设计基础础3 3、改变调色板的一种颜色、改变调色板的一种颜色 void far setpalettevoid far setpalette(int oldcolor,int int oldcolor,int newcolor); newco
28、lor); 此函数改变屏幕系统所显示颜色。它把此函数改变屏幕系统所显示颜色。它把调色板调色板oldcoloroldcolor变为变为newcolornewcolor。(1). (1). 对于对于CGACGA模式,模式, 只有背景色能改变,而背景色总是取只有背景色能改变,而背景色总是取oldcolor=0oldcolor=0例如,下列语句可把背景色改成绿色:例如,下列语句可把背景色改成绿色: setpalette(0,GREEN); setpalette(0,GREEN);Turbo CTurbo C中好像不支持对该函中好像不支持对该函数的执行数的执行第三章 C语语言图图形程序设计设计基础础 (
29、2). (2).对于对于EGAEGA模式模式可以用可以用setpalette( )setpalette( )函数将某一种颜色设置函数将某一种颜色设置为为16 16 种不同颜色中的一种。种不同颜色中的一种。oldcoloroldcolor是是表表3.33.3中任一中任一 颜色,而颜色,而newcolornewcolor是表是表3.53.5中前中前7 7种颜色。种颜色。例如:例如:setpalette(BLUE,EGA-GREEN);setpalette(BLUE,EGA-GREEN); 或或setpalette(1,2);setpalette(1,2);将屏幕上的蓝色(将屏幕上的蓝色(BLUEB
30、LUE)均变为绿色()均变为绿色(EGA-GREENEGA-GREEN)第三章 C语语言图图形程序设计设计基础础三、获取颜色信息三、获取颜色信息1. 1. 读取当前背景颜色读取当前背景颜色int far getbkcolor(void);int far getbkcolor(void);该函数返回当前背景颜色该函数返回当前背景颜色, ,其背景颜色值如表其背景颜色值如表3.33.3所示。所示。例如:下列语句显示当前背景颜色:例如:下列语句显示当前背景颜色:printf(background color is printf(background color is %d,getbkcolor();%
31、d,getbkcolor();2. 2. 读取当前画图颜色读取当前画图颜色int far getcolor(void);int far getcolor(void);该函数返回当前画笔颜色。该函数返回当前画笔颜色。例如,在例如,在CGAC2CGAC2图形模式下,调色板包含四种颜色图形模式下,调色板包含四种颜色:0 0为背景色,为背景色,1 1为绿色,为绿色,2 2为红色,为红色,3 3为棕色。如为棕色。如果果 getcolor( ) getcolor( )函数的返回值为函数的返回值为 1 1,则当前画笔,则当前画笔色为绿色。色为绿色。第三章 C语语言图图形程序设计设计基础础3.3.读取最高可用
32、颜色数读取最高可用颜色数int far getmaxcolor(void);int far getmaxcolor(void); 该函数返回当前屏幕模式下最大有效颜色值。在该函数返回当前屏幕模式下最大有效颜色值。在EGAEGA模式下模式下,getmaxcolor()getmaxcolor()函数返回最大值为函数返回最大值为1515,这表明用,这表明用setcolor()setcolor()函函数值在数值在0 01515有效;在有效;在CGACGA低分辨率模式中低分辨率模式中,getmaxcolor(),getmaxcolor()函数函数返回最大值为返回最大值为3 3,这表明用,这表明用setc
33、olor()setcolor()函数值在函数值在0 03 3有效;而在有效;而在CGAHICGAHI模式中,返回值为模式中,返回值为1 1,因为画笔始终是青色。,因为画笔始终是青色。4. 4. 在点(在点(x x,y y)处画一规定颜色点)处画一规定颜色点void far putpixel(int x,int y,int color);void far putpixel(int x,int y,int color);把把colorcolor所指定的颜色写到(所指定的颜色写到(x x,y y)处的像素上。)处的像素上。5 5读取点(读取点(x x,y y)的颜色)的颜色int far getpi
34、xel(int x,int y);int far getpixel(int x,int y);此函数返回指定点此函数返回指定点x x,y y位置上的像素颜色。位置上的像素颜色。第三章 C语语言图图形程序设计设计基础础例例3.14 3.14 在不同位置画点在不同位置画点 #include graphics.h#include graphics.h#include conio.h#include conio.hvoid main()void main()int gdriver=DETECT,gmode;int gdriver=DETECT,gmode;int color,i,max;int col
35、or,i,max;initgraph(&gdriver,&gmode, );initgraph(&gdriver,&gmode, );max=getmaxcolor();max=getmaxcolor();for(i=0;i20;i+)for(i=0;i20;i+)putpixel(50+iputpixel(50+i* *10,20,max);10,20,max);color=getpixel(50,20);color=getpixel(50,20);putpixel(150,150,color);putpixel(150,150,color);getch();
36、getch();closegraph();closegraph(); 得到当前屏幕得到当前屏幕模式下最大有模式下最大有效颜色值效颜色值以(以(5050,2020)为)为起点,在起点,在X X正方向正方向上每隔上每隔1010用当前用当前屏幕模式下最大屏幕模式下最大有效颜色画点有效颜色画点得到点(得到点(5050,2020)的像素颜色的像素颜色把把colorcolor所指定所指定的颜色写到(的颜色写到(150150,150150)处)处的像素上。的像素上。3.3 线的特性设定和填充线的特性设定和填充 一、线的特性设定一、线的特性设定用画线函数进行画线时,其默认值均属于用画线函数进行画线时,其默认值
37、均属于一像素点宽度的实线。为了改变线形与线一像素点宽度的实线。为了改变线形与线宽,宽,Turbo C提供了可以改变线型和线宽提供了可以改变线型和线宽的函数。的函数。void far setlinestyle(int linestyle, unsigned pattern,int width); 第三章 C语语言图图形程序设计设计基础础该函数所用三个参数含义如下:该函数所用三个参数含义如下:(1 1)linestyle:linestyle:为整型值,用来定义所画直线类型为整型值,用来定义所画直线类型 表中前四种为系统预定义的类型,第五个为用户自表中前四种为系统预定义的类型,第五个为用户自定义类型
38、。定义类型。 代 号 名 代代 码码 说说 明明 SOLID-LINE 0 0 实线实线 DOTTED-LINE 1 1 点线点线 CENTER-LINE 2 2 中心线中心线 DASHED-LINE 3 3 虚线虚线 USERBIT-LINE USERBIT-LINE 4 4 用户定义的线形用户定义的线形线型的代线型的代号说明号说明第三章 C语语言图图形程序设计设计基础础(2 2)patternpattern:无符号整型数。该参数在需要用户自定义线型时使用,如果:无符号整型数。该参数在需要用户自定义线型时使用,如果是使用前四种系统预定义的线型,则该参数可取是使用前四种系统预定义的线型,则该参
39、数可取0 0值。值。 (3) width (3) width:整型数。指定所画直线的粗细,以像素为单位:整型数。指定所画直线的粗细,以像素为单位, ,分为两种情况分为两种情况通过上述几个参数的不同组合,就可以根据需要画出不同类型、不同粗细的通过上述几个参数的不同组合,就可以根据需要画出不同类型、不同粗细的直线。直线。例如:例如:setcolor(RED);setcolor(RED);Setlinestyle(DASHED-LINE,0,THICK-WIDTH);Setlinestyle(DASHED-LINE,0,THICK-WIDTH);line(10,20,150,70);line(10,
40、20,150,70);从从(10,20)(10,20)到到(150,70)(150,70)用一条红色的用一条红色的3 3个像素宽点划线个像素宽点划线符号常量符号常量值值含含 义义NORM_WIDTHNORM_WIDTH1 1 1个像素宽(缺省) THICK_WIDTH THICK_WIDTH3 3 3 3个像素宽个像素宽第三章 C语语言图图形程序设计设计基础础 当函数当函数setlinestylesetlinestyle的第一个参数为的第一个参数为USERBIT-LINEUSERBIT-LINE(或(或4 4)时,可以由用户自己定义直线类型。此时,第三个参数意义时,可以由用户自己定义直线类型。
41、此时,第三个参数意义同前,直线类型在第二个参数中定义,该参数是一个同前,直线类型在第二个参数中定义,该参数是一个1616位二位二进制码,每一位(进制码,每一位(bitbit)表示一个像素。某一位置)表示一个像素。某一位置1 1时表示直时表示直线上相应位置以当前颜色显示;如果某位为线上相应位置以当前颜色显示;如果某位为0 0,则其对应像素,则其对应像素不显示或不改变(仍用原来颜色)。不显示或不改变(仍用原来颜色)。 例如:例如:1111 1111 1111 11111111 1111 1111 1111 16 16位全置位全置1 1,因此画一条,因此画一条1616个像素的点实线(就是实线)。个像
42、素的点实线(就是实线)。 1010 1010 1010 1010 1010 1010 1010 1010 则隔位置则隔位置1 1,因此画一条,因此画一条1616个像素的点虚线(就是点线)。个像素的点虚线(就是点线)。 在实际编写程序时,一般把在实际编写程序时,一般把1616位二进制数转换为位二进制数转换为4 4位十六进位十六进制数,每制数,每4 4位二进制数转换为位二进制数转换为1 1位十六进制数,故上面两个例位十六进制数,故上面两个例子转换为十六进制数为:子转换为十六进制数为:FFFFFFFF和和AAAAAAAA 函数调用方法为:函数调用方法为:setlinestyle(4,0 xAAAA,
43、1);setlinestyle(4,0 xAAAA,1);用这种方法,可以根据需要定义各种线型。用这种方法,可以根据需要定义各种线型。第三章 C语语言图图形程序设计设计基础础 例例3.153.15演示系统预定义的四种线型演示系统预定义的四种线型#include #include #include conio.h#include conio.h#include stdio.h#include stdio.hvoid main()void main() int i,j,c,x=50,y=50,k=1;int i,j,c,x=50,y=50,k=1;int gdriver=DETECT,gmode;
44、int gdriver=DETECT,gmode;printf(input color number.n);printf(input color number.n);scanf(“%d”,&c); /scanf(“%d”,&c); /* *输入所选择的颜色输入所选择的颜色* */ / initgraph(&gdriver,&gmode, c:tc)initgraph(&gdriver,&gmode, c:tc)cleardevice();cleardevice();setbkcolor(11); /setbkcolor(11); /* *设置背景
45、色为浅青色设置背景色为浅青色* */ /setcolor(c); /setcolor(c); /* *设置前景色为输入颜色设置前景色为输入颜色* */ / 第三章 C语语言图图形程序设计设计基础础 for(j=1;j=2;j+) for(j=1;j=2;j+) for(i=0;i4;i+) for(i=0;i0;i-)for(i=520;i0;i-)putimage(i-1,216,w,COPY_PUT);putimage(i-1,216,w,COPY_PUT);/ /* *在不同下在不同下x x位置显示图像位置显示图像* */ /line(2,265,630,265);line(2,265,
46、630,265);/ /* *画公路线画公路线* */ / getch();getch();/ /* *暂停暂停* */ /closegraph();closegraph(); 注:此处的颜色位置未必准确注:此处的颜色位置未必准确第三章 C语语言图图形程序设计设计基础础 3.6 常用画图函数简介常用画图函数简介 一、一、 直线类函数直线类函数 1指定两点间画一直线指定两点间画一直线 void far line(int x1,int y1, int x2,int y2); 用当前颜色从点用当前颜色从点(x1,y1)到点(到点(x2,y2)画一条直)画一条直线,当前位置线,当前位置(CP)不变。不
47、变。2从当前位置到(从当前位置到(x,y)点画一条直线)点画一条直线 void far lineto(int x,int y); 用当前颜色从当前位置(用当前颜色从当前位置(CP)到()到(x,y)点画)点画一条直线,并把(一条直线,并把(CP)位置定位在()位置定位在(x,y)点。)点。3从当前坐标以相对增量方式画直线从当前坐标以相对增量方式画直线 void far linerel(int deltax, int deltay) 从当前位置到相对从当前位置到相对CP位置在位置在X方向增大方向增大deltax,在在Y方向增大方向增大deltay画一直线。画一直线。第三章 C语语言图图形程序设计设计基础础二、 多边形类函数1、画矩形void far rectangle(int left,int top, int right,int bottom);用当前画笔画出由坐标(left,top)及(right ,bottom)所定义的矩形。 2画多边形void far drawpoly(int numpoints, int *polypoints); 用当前画笔画一多边形,多边形的顶点数为numpoints, *polypoints指向一个整型数组,共有n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 充电设施标准化服务流程制定与执行考核试卷
- 解析卷-人教版八年级上册物理光现象《光的反射》单元测评试题(解析版)
- 2025年制造业中小企业边缘计算与云平台协同智能化升级认证考核试卷
- 2025年疫苗接种规范操作考试:疫苗接种政策影响分析方法考核试卷
- 2025年智慧冷链物流技术应用与系统集成水平考核试卷
- 考点解析人教版八年级上册物理《物态变化》章节练习试卷(含答案详解)
- 考点解析-人教版八年级上册物理物态变化《熔化和凝固》定向训练试卷
- 政教副校长在班主任工作会议上的讲话:学生安全不容丝毫松懈班主任成长从“管理细节”开始
- 考点攻克人教版八年级物理上册第5章透镜及其应用-生活中的透镜难点解析试卷(含答案详解版)
- 2024年皮革行业污染监测技术规范考核试卷
- 消防设施设备培训课件
- 碳酸钙在生物医药中的应用-洞察分析
- 十八项核心制度
- 南通市2025届高三第一次调研测试(一模)历史试卷(含答案 )
- GB/T 44871-2024纺织品二异氰酸酯类化合物的测定
- 《小学劳动教育研究的文献综述》3800字
- 物业项目开办物资明细表(参考)
- GB/T 44577-2024商用电动洗碗机性能测试方法
- 口腔颌面部间隙感染-颞、舌下、颏下、咽旁间隙感染
- 重度哮喘诊断与处理中国专家共识(2024)解读
- 2024-2030年中国光纤激光器行业发展趋势及投资风险分析研究报告
评论
0/150
提交评论