首页 计算机图形学-C语言图形程序设计基础

计算机图形学-C语言图形程序设计基础

举报
开通vip

计算机图形学-C语言图形程序设计基础计算机图形学ComputerGraphics第三章C语言图形程序设计基础屏幕设置3.1图形颜色设置3.2线的特性设定和填充3.3图形模式下文本处理3.4图形存取处理3.5常用画图函数3.6绘图程序实例3.7在屏幕上进行绘图一般要执行如下步骤:(1)设置屏幕为图形方式;(2)选择背景与实体颜色;(3)计算坐标;(4)调用绘图语句绘制实体。第三章C语言图形程序设计基础3.1屏幕设置一、屏幕显示方式与坐标系1.文本方式与字符坐标系在屏幕上只能显示字符的方式称为文本方式。在文本方式下,屏幕上可以显示的最小单位是字符。为了能...

计算机图形学-C语言图形程序设计基础
计算机图形学ComputerGraphics第三章C语言图形程序设计基础屏幕设置3.1图形颜色设置3.2线的特性设定和填充3.3图形模式下文本处理3.4图形存取处理3.5常用画图函数3.6绘图程序实例3.7在屏幕上进行绘图一般要执行如下步骤:(1)设置屏幕为图形方式;(2)选择背景与实体颜色;(3)计算坐标;(4)调用绘图语句绘制实体。第三章C语言图形程序设计基础3.1屏幕设置一、屏幕显示方式与坐标系1.文本方式与字符坐标系在屏幕上只能显示字符的方式称为文本方式。在文本方式下,屏幕上可以显示的最小单位是字符。为了能在指定位置显示每个字符,C语言提供了字符坐标系。左上角为坐标原点(1,1)水平方向(x轴)分为若干列垂直方向(y轴)分为若干行第三章C语言图形程序设计基础如:(8,20)表示字符位于屏幕第8行第20列TurboC支持以下6种不同的显示方式:(l)BW40黑白25×40(25行,40列)(2)C40彩色25×40(3)BW80黑白25×80(4)C80彩色25×80(5)MONO单色25×80(6)C4350彩色43×80(EGA),50×80(VG)显示方式不同,所显示的字符的列数和行数也不一样,颜色也有区别,屏幕上所显示的字符数量也不一样。第三章C语言图形程序设计基础2.图形方式与点坐标在屏幕上显示的图形称图形方式。屏幕是由像素点组成的,其像素点多少决定了屏幕的分辨率。分辨率越高,显示图形越细致,质量越好。在图形方式下,屏幕上每个像素的显示位置用点坐标来描述。点坐标系左上角为坐标原点(0,0)垂直方向为y轴,自上向下水平方向为x轴,自左向右第三章C语言图形程序设计基础分辨率不同,水平方向和垂直方向的点数也不一样,即其maxx,maxy数值也不同。在TurboC中,坐标数据可以用两种形式给出:一种是绝对坐标;另一种是相对坐标。绝对坐标的参考点是坐标的原点(0,0),x和y只能取 规定 关于下班后关闭电源的规定党章中关于入党时间的规定公务员考核规定下载规定办法文件下载宁波关于闷顶的规定 范围内的正整数。相对坐标是相对“当前点”的坐标,所以其坐标的参考点不是坐标系的原点,而是当前点。在相对坐标中,x和y的取值是相对于当前点在x方向和y方向上的增量,x和y可以是正整数,也可以是负整数。点坐标系坐标值的范围决定于所使用适配器/显示分辨率。第三章C语言图形程序设计基础二、图形驱动程序与图形模式1.图形驱动程序支持不同图形适配器的一组程序由于图形显示器的种类繁多,其控制方式也各有差异,所以要显示图形就需先装入相应的图形驱动程序。TurboC提供了几种图形驱动程序可支持的图形适配器。下表列出驱动程序其相应的符号常量和规定值。符号常量数值符号常量数值DETECTCGAMCGAEGAEGA64EGAMONO012345IBM8514HERCMONOATT400VGAPC3270678910第三章C语言图形程序设计基础2.图形模式每种图形显示器有不同的图形显示模式由于每种图形显示器各有几种不同的图形显示模式,因此,要显示图形就必须确定所用的显示模式,也就是说,要显示图形,不但要先装入相应驱动程序,而且还要决定所用的显示模式。不同的图形驱动程序有不同的图形模式;即使在同一图形驱动程序下,也可能会有几种图形模式。图形驱动程序及其相应模式具体见书P53表3.2第三章C语言图形程序设计基础驱动程序(driver)图形模式gmode值分辨率调色板CGACGAC00320×200C0CGAC11320×200C1CGAC22320×200C2CGAC33320×200C3CGAHI4640×2002色MCGAMCGAC00320×200C0MCGAC11320×200C1MCGAC22320×200C2MCGAC33320×200C3MCGAMED4640×2002色MCGAHI5640×4802色EGAEGAHI0640×20016色EGALO1640×35016色EGA64EGA64LO0640×20016色EGA64HI1640×35016色EGAMONOEGAMONOHL0640×3502色HERCMONOHERCMNONOHL0720×3682色ATT400ATT400C00320×200C0ATT400C11320×200C1ATT400C22320×200C2ATT400C33640×200C3ATT400MED4640×2002色ATT400HI5640×4002色VGAVGALO0640×20016色VGAMED1640×35016色VGAHI2640×48016色PC3270PC3270HI0720×3502色IBM8514IBM8514LO0640×480256色IBM8514HI11024×768256色图形驱动程序及其相应模式(部分)三、图形系统初始化和模式控制TurboC中图形函数均在头文件“graphics.h”中定义,所以,凡是在程序中要调用这些图形函数,都必须在程序文件的开头写上文件包含命令:#include<graphics.h>第三章C语言图形程序设计基础1.图形系统初始化(1).问题的提出一般缺省情况下,屏幕为80列25行的文本方式。在文本方式下,所有的图形函数均不能操作,因此在使用图形函数绘图之前,必须将屏幕显示适配器设置为一种图形模式,这就是图形初始化过程。图形系统初始化首先要调用initgraph()函数,它通过从磁盘上装入一个图形驱动程序,来初始化图形化系统,并将系统设置为图形模式。第三章C语言图形程序设计基础(2).初始化函数initgraph()函数格式为:voidfarinitgraph(int*gdriver;int*gmode,char*path);①gdriver:是一个整型值,用来指定要装入的图形驱动程序,该值在头文件graphics.h中定义,如p51表3.l所示。②gmode:是一个整型值,用来设置图形显示模式。图形显示模式决定了显示的分辨率,可同时显示的颜色的多少,调色板的设置方式等,几种不同的图形显示模式如p53表3.2所示。第三章C语言图形程序设计基础③path:是一个字符串,用来指明图形驱动程序所在路径。如果驱动程序就在用户当前目录下,则该参数可以空字符串,否则应给出具体路径名。一般情况下,TurboC安装在C盘的TC目录中,则该路径为:C:\TC,如果写在参数中则为“C:\\TC”。注意:前两个参数实际上是整型指针,调用时应加上地址运算符“&”。第三章C语言图形程序设计基础对far关键字的解释:far并非C语言的 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 关键字,主要是远程链接的作用,可以将其视为远指针函数,以内存管理是段式管理为例,没有far这个关键字时,内存地址仅是段内跳转,有far这个关键字时内存地址是段间跳转。intfar或者voidfar表示要编译器给声明的这些量分配在远处的存储器(RAM)中,即分配到64K以外的存储地址中。64K作为一个“段”(Segment),是PC机80x86时期的老概念。超过64K就是“远”,FAR就是“远”的英文。几个头文件graphics.hstdlib.hconio.hstdio.h第三章C语言图形程序设计基础(3)初始化方式①已知显示器类型的图形系统初始化已知所用图形显示器的种类和要使用的图形模式,初始化图形系统可如下面程序所示:例3.1#include"graphics.h"main(){intgdriver,gmode;gdriver=CGA;/*设置驱动程序为CGA*/gmode=CGAC0;/*选用CGA图形模式*/initgraph(&gdriver,&gmode,"c:\\TC");/*初始化图形系统*/bar3d(10,20,50,80,0,0);/*画一实心长方形*/getch();/*等待按一键结束*/closegraph();/*关闭图形系统,回到文本方式*/}此处也可用整型常数代替符号常量gdriver=1;gmode=0;第三章C语言图形程序设计基础②不知显示器类型的图形初始化。TurboC提供了一个对图形显示器硬件测试的函数detectgraph()。它的格式为:voidfardetectgraph(int*gdriver,int*gmode);该函数在计算机有图形适配器的情况下,确定图形适配器的类型,若系统有图形适配器,则返回适合于适配器的图形驱动程序的代码,用gdriver指向的整型量表示,该函数把gmode所指的变量设置为适配器所能支持的最高分辨率。若系统无图形适配器,则gdriver所指变量为-2。第三章C语言图形程序设计基础例3.2#include"stdio.h"#include“conio.h”#include“stdlib.h”#include"graphics.h"main(){intgdriver,gmode;detectgraph(&gdriver,&gmode);/*测试结果存放于gdriver,gmode中*/if(gdriver<0){printf("thereisnotgraphicsdisplayer\n");exit(1);}/*无图形显示模式时,显示信息,停止程序*/标准的输入输出函数调用DOS控制台I/O子程序的各个函数说明一些常用的子程序:转换子程序,搜索、排序子程序第三章C语言图形程序设计基础printf("detectgraphicsdriveris#%d,modeis#%d\n",gdriver,gmode);/*显示硬件测试结果*/getch();/*等待按一键*/initgraph(&gdriver,&gmode,"c:\\tc");/*初始化*/bar3d(10,20,50,80,0,0);/*画实心长方形*/getch();closegraph();/*关闭图形系统,返回文本模式*/return(0);}第三章C语言图形程序设计基础③自动初始化图形系统可以把上述对图形显示器的检测和初始化工作放在一起来自动完成,即规定gdriver=DETECT,则initgraph()函数会自动按照系统所配置的图形显示器来确定驱动程序,并把图形模式设置为检测到驱动程序的最高分辨率,实现图形系统初始化。第三章C语言图形程序设计基础例3.3#include"graphics.h"#include“conio.h”main(){intgdriver=DETECT,gmode;/*自启动搜寻显示器类型和显示模式*/initgraph(&gdriver,&gmode,"c:\\tc");/*初始化*/bar3d(10,20,50,80,0,0);/*画实心长方形*/getch();/*等待按一键*/closegraph();/*关闭图形系统,返回文本模式*/return(0);}第三章C语言图形程序设计基础2.图形系统的关闭从上述几个例子已看到在图形编程中均先用函数initgraph()对图形系统进行初始化,即启动图形系统,进人绘图状态,而在程序结束前都用函数closegraph()关闭图形系统,以释放图形驱动程序所占用的内存空间,使系统回到文本文件。关闭图形系统函数格式为:voidfarclosegraph();所有有关图形显示程序一定是在initgraph()和closegraph()之间。从initgraph()后,显示器就进入图形方式,而从closegraph()后,显示器就退出图形方式回到文本显示方式。第三章C语言图形程序设计基础3.图形模式的控制为了对图形系统模式进行控制,即从图形模式转换成文本模式,或从文本模式转换成图形模式,或设置驱动器有效模式,或读取当前图形模式和范围,TurboC都提供了相关函数:(1)从图形模式转换成文本模式(2)从文本模式转换成图形模式(3)设置驱动器有效模式(4)读取当前图形模式和范围第三章C语言图形程序设计基础(l)返回当前图形模式值intfargetgraphmode(void);函数返回当前图形模式,其返回值如表p533.2所示。(2)恢复屏幕在图形初始化前模式voidfarrestorecrtmode(void);函数使initgraph()函数所选定图形模式关闭,返回到调用initgraph()前状态。(3)设置系统图形模式并清屏幕voidfarsetgraphmode(intgmode);函数把当前图形模式设置为gmode所指定的模式。第三章C语言图形程序设计基础(4)获取图形驱动器可使用的模式范围voidfargetmoderange(intdriver,int*lomode,int*himode);该函数确定由driver所指定图形驱动器能够支持的最低和最高模式,并且把这些值放在由lomode和himode所指向变量中。通过调用此函数,可实现使显示器暂时离开图形模式进入文本模式,进行文本输出,然后不经过initgraph再返回图形模式。第三章C语言图形程序设计基础例3.4#include"graphics.h"#include"stdio.h"#include“conio.h”main(){intgdriver,gmode,lo,hi;gdriver=CGA;/*设置CGA的图形驱动程序*/getmoderange(CGA,&lo,&hi);/*获得CGA的图形模式范围*/printf("CGAsurpportingmodesrangefrom%dto%d.\dn",lo,hi);/*显示CGA显示模式范围*/initgraph(&gdriver,&lo,"c:\\tc");/*初始化CGAC0*/第三章C语言图形程序设计基础bar3d(100,30,130,150,0,0);/*画一实心方块*/getch();gmode=getgraphmode();/*获得现行图形模式*/restorecrtmode();/*返回图形初始化前的现实模式*/printf("Nowintextmode,pressanykeybacktographicsmode.\n");getch();setgraphmode(gmode);/*再回到图形模式*/rectangle(50,30,100,130);/*画一长方形*/getch();closegraph();/*关闭图形系统*/return(0);}第三章C语言图形程序设计基础四、图形坐标的设置即运用光标定点,确定坐标位置。可用TurboC提供的函数来设定坐标(定点),读取当前光标的位置以及x、y轴的最大值。第三章C语言图形程序设计基础1.定点(1)把当前光标移到所需的位置(即x、y点)voidfarmoveto(intx,inty);此函数把当前窗口中的当前光标位置(cp)移到所需的(x、y)位置(不是画)。(2)以增量方式移动当前光标voidfarmoverel(intdelax,intdelay);此函数把光标从当前位置(cp)开始,在x,y方向移动,移动距离分别为delax,delay。例如:若当前光标位置在(10,10)处,执行下列语句后即移到(20,30)的位置上。moverel(10,20);第三章C语言图形程序设计基础2.读取当前光标位置intfargetx(void);此函数返回光标在x轴位置。intfargety(void);此函数返回光标在y轴的位置。3.读取x,y轴的最大值”intfargetmaxx(void);此函数返回x轴的最大值(最大横坐标)。intfargetmaxy(void);此函数返回y轴的最大值(最大纵坐标)。例如:下列语句显示光标当前位置的x、y值:printf("cp'sloc:%d%d",getx(),gety());第三章C语言图形程序设计基础例3.6画一“王”字#include"graphics.h"#include"conio.h"voidmain(){intgdriver=DETECT,gmode;intx,y;initgraph(&gdriver,&gmode,"");cleardevice();/*清屏*/自动初始化图形系统第三章C语言图形程序设计基础光标移至(100,40)处从光标位置画一直线,相对位置为(40,0)光标向y轴方向下移20;从光标位置画一直线,相对位置为(-40,0)光标向y轴方向下移20;从光标位置画一直线,相对位置为(40,0)光标向x轴方向左移20从光标位置画一直线,相对位置为(0,-40)moveto(100,40);linerel(40,0);x=getx();y=gety();moveto(x,y+20);linerel(-40,0);moverel(0,20);linerel(40,0);moverel(-20,0);linerel(0,-40);getch();closegraph();}五、屏幕窗口操作TurboC提供了图形屏幕、图形窗口的处理功能,即在图形模式下开设“窗口”(这种图形窗口又称为视图区),并对屏幕和图形进行处理。1.图形屏幕处理(l)清除图形屏幕voidfarcleardevice(void);此函数是清除整个图形屏幕(但保留底色),并把当前光标位置(CP)重新设置为(0,0)。第三章C语言图形程序设计基础(2)设置图形输出活动页页:保存显示在屏幕上信息的RAM称为页(Page)voidfarsetactivepage(intpage);该函数确定接受图形函数所输出活动页,缺省值为屏幕显示0页。如果你把图形输出到其它屏幕显示页,这些页未必马上显示出来,Page为活动页的值。在图形模式中,只有EGA和VGA支持多图形页,但这些图形卡也不是所有模式都支持多图形页。例如,下列语句1页为活动页:setactivepage(1);第三章C语言图形程序设计基础(3)设置可见图形页voidfarsetvisualpage(intpage);该函数显示page所指定的可见图形页。例如,下列语句选择显示第1页:setvisualpage(1);第三章C语言图形程序设计基础例3.8#include"graphics.h"#include"conio.h"voidmain(){intgdriver,gmode;gdriver=VGA;/*设置VGA图形适配器*/gmode=VGAHI;/*设置VGA图形模式*/initgraph(&gdriver,&gmode,"");/*图形系统初始化*/cleardevice();/*清光屏*/第三章C语言图形程序设计基础setactivepage(1);/*设置图形输出活动页为1*/circle(150,130,80);/*画一个圆*/setactivepage(0);/*设置图形活动页为0*/rectangle(40,160,90,180);/*画一个矩形*/getch();setvisualpage(1);/*设置可见图形1页*/getch();setvisualpage(0);/*设置可见图形0页*/getch();closegraph();/*关闭图形系统*/}第三章C语言图形程序设计基础运行结果是:矩形——圆——矩形2.屏幕窗口操作TurboC提供了图形窗口处理功能,并可以在屏幕某处设置一个图形窗口,以后有关图形的操作(如画直线、圆、弧等)均相对于这个窗口的左上角为坐标原点(0,0),而且可以设置图形窗口之外的区域是不可接触的。这样所有的图形操作只在所指定图形窗口中进行,而不会出现在窗口之外。第三章C语言图形程序设计基础(1)清除当前图形窗口voidfarcleanviewport(void);该函数清除当前图形窗口,并把当前光标位置(CP)重置为(0,0)。(2)设置图形窗口voidfarsetviewport(intleft,inttop,intright,intbottom,intclipflag);该函数是建立一个新的图形窗口,窗口大小设置是用左上角坐标left,top即与右下角坐标right,bottom来定义的。若clipflag为1,则超出窗口的输出自动剪裁掉;若clipflag为0,则图形窗口之外不被剪裁。第三章C语言图形程序设计基础屏幕边界设置窗口,其大小与前面所画图形,窗口之外不剪裁清屏画一矩形画直线例3.9窗口设置与清除作用。#include"graphics.h"#include"conio.h"voidmain(){intgdriver=CGA,gmode=0;initgraph(&gdriver,&gmode,"");rectangle(30,25,80,80);/*画一矩形*/setviewport(30,25,80,80,0);/*设置窗口,其大小与前面所画图形,窗口之外不剪裁*/line(0,0,100,150);/*画直线*/getch();clearviewport();/*清除窗口*/getch();cleardevice();/*清屏*/设置窗口,窗口之外剪裁画直线,窗口外部分剪裁掉画一矩形注意:此处的颜色设置是为了说明问题,而并非程序运行的结果getch();setviewport(20,15,80,80,1);/*重置窗口,窗口之外剪裁*/rectangle(0,0,60,65);/*画一矩形*/line(0,0,100,150);/*画直线*/getch();closegraph();}第三章C语言图形程序设计基础3月12日课程内容1、复习3.1内容,并请同学回答问题;2、3.2-3.4节内容复习内容:3.1屏幕设置问题:图形编程是怎样的过程。本节课重点:1、图形颜色设置,主要调色板的概念;2、线的特性设定和填充;3、图形模式下文本的处理;3.2图形颜色设置在画图时,往往要求配置一定的颜色以使图形光彩夺目。颜色分为前景色和背景色。前景色是指构成字符和图形点的颜色;而背景色是指整个显示屏颜色。TurboC提供了多个颜色控制函数用来设置前景、背景、改变调色板等。第三章C语言图形程序设计基础一、颜色的设置画图时,用户可以对当前的背景颜色和作图颜色进行设置。1.设置当前背景颜色voidfarsetbkcolor(intcolor);将背景色设置成color所指定的颜色值。参数color可以用名字,也可以用数字,它们对应关系在graphics.h中定义,表3.3(见书P60)列出背景色名称和数值的对应关系。缺省时,默认值为0,即黑色。2.设置当前画图颜色voidfarsetcolor(intcolor);该函数把当前画图颜色设置为color所指定颜色,即画笔的颜色。实际对应的颜色和调色板有关,缺省时,默认值是白色。第三章C语言图形程序设计基础例3.11将背景颜色设置为黄色,画笔设置为红色,画一圆。#include"graphics.h"#include"conio.h"voidmain(){intgdriver,gmode;gdriver=VGA;gmode=EGAHI;initgraph(&gdriver,&gmode,"");setbkcolor(YELLOW);/*设置背景色为黄色*/setcolor(RED);/*设置画笔为红色*/circle(120,100,50);/*画一圆*/getch();closegraph();}这是允许的二、调色板调色板:是设置画颜笔的组合设置当前画笔色与调色板有关,对应一个显示设备可能有多个调色板,这意味着尽管硬件能够显示多种颜色,但由于同一时间内只能使用一个调色板,所以在同一时间内只有显示设备可能显示总颜色的一个子集可以被显示出来,因为调色板内颜色的数只受到可用视频内存的限制。根据颜色控制方法不同,可以把支持的颜色屏幕划分为两类:一类是CGA,包括CGAHI、MCGAMED、MCGAHI、ATT400MED、ATT400HI;另一类是EGA,包括EGA和VGA适配器。第三章C语言图形程序设计基础1、CGA调色板CGA类屏幕有两种分辨率:低分辨率和高分辨率。(1)低分辨率低分辨率方式显示320×200个像素点,4种颜色;第三章C语言图形程序设计基础在CGA低分辨率方式下,可以显示4种颜色,这4种颜色由选择的调色板决定。在CGA方式下可以使用的调色板有CGAC0、CGAC1、CGAC2和CGAC3。每种CGA调色板均含有4种不同颜色,调色板不同所包含的颜色也不一样。调色板号颜色0颜色1颜色2颜色3CGAC0背景色CGA-LIGHTGREENCGA-LIGHTREDCGA-YELLOWCGAC1背景色CGA-LIGHTCYANCGA-LIGHTMAGENTACGA-WHITECGAC2背景色CGA-GREENCGA-REDCGA-BROWNCGAC3背景色CGA-CYANCGA-MAGENTACGA-LIGHTGRAY每种调色板只能使用与它列在同一行中的颜色,其编号依次为0、1、2、3,也可以使用符号常量。表中调色板号是图形方式而颜色0是背景色,颜色1、2、3是像素点颜色。调色板在initgraph函数中设置,颜色用setcolor函数设置。背景色默认是黑色如果setcolor(a),a>=3,那么将显示值最大的那种颜色,例如CGAC0,将显示黄色(2)高分辨率高分辨率方式显示640×200个像素点,只有两种颜色。黑色背景和彩色前景。由于CGA本身原因,背景色就是硬件所认为的背景色,可用setbkcolor参照课本P60表3.3设置,前景色(即画笔颜色)始终是青色。第三章C语言图形程序设计基础例3.12在高分辨率下画一青色圆。#include"graphics.h"#include"conio.h"voidmain(){intgdriver=CGA,gmode=CGAHI;initgraph(&gdriver,&gmode,"");cleardevice();setbkcolor(3);circle(160,100,50);circle(160,100,25);getch();closegraph();}程序执行后,在青色屏幕上显示两个白色圆图形。第三章C语言图形程序设计基础2、EGA调色板对EGA来说,总共可以有64种颜色,但只有一个调色板,这个调色板只有16项,可同时显示16种颜色。默认的这16种颜色可参看P60表3.3。表3.5(见书P63)的颜色不准确,是随机选取的,不作为参考。第三章C语言图形程序设计基础3、改变调色板的一种颜色voidfarsetpalette(intoldcolor,intnewcolor);此函数改变屏幕系统所显示颜色。它把调色板oldcolor变为newcolor。(1).对于CGA模式,只有背景色能改变,而背景色总是取oldcolor=0例如,下列语句可把背景色改成绿色:setpalette(0,GREEN);TurboC中好像不支持对该函数的执行第三章C语言图形程序设计基础(2).对于EGA模式可以用setpalette()函数将某一种颜色设置为16种不同颜色中的一种。oldcolor是表3.3中任一颜色,而newcolor是表3.5中前7种颜色。例如:setpalette(BLUE,EGA-GREEN);或setpalette(1,2);将屏幕上的蓝色(BLUE)均变为绿色(EGA-GREEN)第三章C语言图形程序设计基础三、获取颜色信息1.读取当前背景颜色intfargetbkcolor(void);该函数返回当前背景颜色,其背景颜色值如表3.3所示。例如:下列语句显示当前背景颜色:printf("backgroundcoloris%d",getbkcolor());2.读取当前画图颜色intfargetcolor(void);该函数返回当前画笔颜色。例如,在CGAC2图形模式下,调色板包含四种颜色:0为背景色,1为绿色,2为红色,3为棕色。如果getcolor()函数的返回值为1,则当前画笔色为绿色。第三章C语言图形程序设计基础3.读取最高可用颜色数intfargetmaxcolor(void);该函数返回当前屏幕模式下最大有效颜色值。在EGA模式下,getmaxcolor()函数返回最大值为15,这表明用setcolor()函数值在0-15有效;在CGA低分辨率模式中,getmaxcolor()函数返回最大值为3,这表明用setcolor()函数值在0-3有效;而在CGAHI模式中,返回值为1,因为画笔始终是青色。4.在点(x,y)处画一规定颜色点voidfarputpixel(intx,inty,intcolor);把color所指定的颜色写到(x,y)处的像素上。5.读取点(x,y)的颜色intfargetpixel(intx,inty);此函数返回指定点x,y位置上的像素颜色。第三章C语言图形程序设计基础例3.14在不同位置画点#include"graphics.h"#include"conio.h"voidmain(){intgdriver=DETECT,gmode;intcolor,i,max;initgraph(&gdriver,&gmode,"");max=getmaxcolor();for(i=0;i<20;i++)putpixel(50+i*10,20,max);color=getpixel(50,20);putpixel(150,150,color);getch();closegraph();}得到当前屏幕模式下最大有效颜色值以(50,20)为起点,在X正方向上每隔10用当前屏幕模式下最大有效颜色画点得到点(50,20)的像素颜色把color所指定的颜色写到(150,150)处的像素上。3.3线的特性设定和填充一、线的特性设定用画线函数进行画线时,其默认值均属于一像素点宽度的实线。为了改变线形与线宽,TurboC提供了可以改变线型和线宽的函数。voidfarsetlinestyle(intlinestyle,unsignedpattern,intwidth);第三章C语言图形程序设计基础该函数所用三个参数含义如下:(1)linestyle:为整型值,用来定义所画直线类型表中前四种为系统预定义的类型,第五个为用户自定义类型。代号名代码说明SOLID-LINE0实线DOTTED-LINE1点线CENTER-LINE2中心线DASHED-LINE3虚线USERBIT-LINE4用户定义的线形线型的代号说明第三章C语言图形程序设计基础(2)pattern:无符号整型数。该参数在需要用户自定义线型时使用,如果是使用前四种系统预定义的线型,则该参数可取0值。(3)width:整型数。指定所画直线的粗细,以像素为单位,分为两种情况通过上述几个参数的不同组合,就可以根据需要画出不同类型、不同粗细的直线。例如:setcolor(RED);Setlinestyle(DASHED-LINE,0,THICK-WIDTH);line(10,20,150,70);从(10,20)到(150,70)用一条红色的3个像素宽点划线符号常量值含义NORM_WIDTH11个像素宽(缺省)THICK_WIDTH33个像素宽第三章C语言图形程序设计基础当函数setlinestyle的第一个参数为USERBIT-LINE(或4)时,可以由用户自己定义直线类型。此时,第三个参数意义同前,直线类型在第二个参数中定义,该参数是一个16位二进制码,每一位(bit)表示一个像素。某一位置1时表示直线上相应位置以当前颜色显示;如果某位为0,则其对应像素不显示或不改变(仍用原来颜色)。例如:111111111111111116位全置1,因此画一条16个像素的点实线(就是实线)。1010101010101010则隔位置1,因此画一条16个像素的点虚线(就是点线)。在实际编写程序时,一般把16位二进制数转换为4位十六进制数,每4位二进制数转换为1位十六进制数,故上面两个例子转换为十六进制数为:FFFF和AAAA函数调用方法为:setlinestyle(4,0xAAAA,1);用这种方法,可以根据需要定义各种线型。第三章C语言图形程序设计基础例3.15演示系统预定义的四种线型#include#include"conio.h"#include"stdio.h"voidmain(){inti,j,c,x=50,y=50,k=1;intgdriver=DETECT,gmode;printf("inputcolornumber.\n");scanf(“%d”,&c);/*输入所选择的颜色*/initgraph(&gdriver,&gmode,"c:\\tc")cleardevice();setbkcolor(11);/*设置背景色为浅青色*/setcolor(c);/*设置前景色为输入颜色*/第三章C语言图形程序设计基础for(j=1;j<=2;j++){for(i=0;i<4;i++){setlinestyle(i,0,k);rectangle(x,y,x+210,y+80);x=x+110;y=y+40;}k=3;x=50;y=250;}getch();closegraph();}Setlinestyle(1,0,1),线型为点线,1个像素宽Setlinestyle(2,0,1),线型为中心线,1个像素宽当输入颜色为红色时结果如下:Setlinestyle(0,0,1),线型为实线,1个像素宽Setlinestyle(1,0,3),线型为点线,3个像素宽Setlinestyle(2,0,3),线型为中心线,3个像素宽Setlinestyle(3,0,3),线型为虚线,3个像素宽Setlinestyle(0,0,3),线型为实线,3个像素宽Setlinestyle(3,0,1),线型为虚线,1个像素宽二、填充为了能按照一定要求对图形进行填充,通常应规定填充的模式和颜色,图形填充时,使用的是当前模式和颜色。如果没有设置填充模式和颜色,则填充时使用缺省值,缺省填充模式为SOLID-FILL,填充颜色为getmaxcolor函数返回值(一般为白色)。1、填充模式和颜色设置voidfarsetfillstyle(intpattern,intcolor);该函数用来设置当前填充模式和填充颜色,以便用于填充一个指定的封闭区域。参数pattern用于指定填充模式,取值12种,参数color是指定填充用颜色,取值必须是当前屏幕模式的有效值。(填充模式代号见书P67表3.8)第三章C语言图形程序设计基础例3.16画一个二维和三维条形并填图#include"graphics.h"#include"conio.h"voidmain(){inti,gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"");setfillstyle(SOLID_FILL,GREEN);bar(100,100,150,200);setfillstyle(SOLID_FILL,RED);bar3d(200,100,250,200,10,1);getch();closegraph();}第三章C语言图形程序设计基础2、漫延填充voidfarfloodfill(intx,inty,border);该函数用来填充一块有界的封闭区域,(x,y)是待填充区的起点,border指定填充区域边界所使用颜色。如果起点在封闭区域内,则区域内部被填充;如果起点在封闭区域外,则区域外部被填充;如果起点刚好在封闭区域边界上,那么内部和外部都不填充。用floodfill填充时,使用的是当前填充模式的填充颜色,也可以通过setfillstyle来改变设置。第三章C语言图形程序设计基础例3.17填充一个封闭圆。#include"graphics.h"#include"conio.h"voidmain(){intgdriver,gmode;gdriver=VGA;gmode=VGAHI;initgraph(&gdriver,&gmode,"");第三章C语言图形程序设计基础定背景为蓝色用红色画圆用粗斜杠填充方式填充圆,填充色为绿色,边界颜色为黄色setbkcolor(1);/*定背景蓝色*/setcolor(4);/*定画笔红色*/circle(100,100,80);/*画一个圆*/setfillstyle(SLASH_FILL,2);/*定填充模式和填充色floodfill(100,100,14)/*填充一个封闭圆,边界颜色黄色*/getch();closegraph();}第三章C语言图形程序设计基础3.4图形模式下文本处理为了在图形模式下对文本进行操作,TurboC提供了对图形进行字符串输出,以及对输出符的字型大小和方位进行控制等有关文本输出函数。一、文本输出函数1.把一字符串输出至屏幕当前位置voidfarouttext(char*textstring);此函数在当前位置上输出一字符串。参数textstring是一个文本字符串。如果当前方向是水平的,则光标位置移动量为该字符串的长度,否则光标位置不变。在图形模式下,光标是看不见的,但光标位置是存在的。例如:outtext("thisisastring”);将在当前位置输出字符串"thisisastring"第三章C语言图形程序设计基础2.在屏幕指定位置上输出一字符串voidfarouttextxy(intx,inty,char*textstring);该函数在指定位置(x,y)处输出字符串textstring。例如:outtextxy(70,100,"Thisisastring");将在(70,100)处输出字符串"Thisisastring"。3.格式化输出函数用前面两个函数只能输出字符串,如果需要在图形方式下输出数值或其他类型数据,上面两个函数就无能为力了。TurboC提供的格式化输出函数sprintf就可以解决这个问题sprintf(*str,*format,variable-list);第三章C语言图形程序设计基础sprintf(*str,*format,variable-list);这里str是字符串(字符数组),format是格式字符串,variable-list是变量列表。该函数功能是把要输出信息写入由str所指向的字符串中。例如:charstr[80];sprintf(str,“%s%d%d”,“one”,2,3);执行后,字符串str的内容为one23。第三章C语言图形程序设计基础例3.18#include"stdio.h"#include"graphics.h"#include"conio.h"voidmain(){intgdriver,gmode;charmsg[80];gdriver=DETECT;gmode=VGAHI;initgraph(&gdriver,&gmode,"");moveto(20,30);sprintf(msg,"%d%d",getx(),gety());outtextxy(20,30,msg);linerel(100,100);sprintf(msg,"%d%d",getx(),gety());outtext(msg);getch();closegraph();}用sprintf函数把当前屏幕位置的信息存入字符串msg2030120130outtextxy函数输出该字符串值在屏幕上画一条直线用msg的值注明其端点的坐标值,并用outtext输出二、输出文本的设置TurboC提供了对文本字型、大小及方位进行控制的函数。1.设置输出文本字体、方向与字符大小在图形方式下,TurboC提供了两种向屏幕上写字符的方法,一种是位映像字符,也称点阵字符,一种是笔画字符,也称矢量字符。其中位映像字符是缺省方式,即在一般情况下,用C语言编写的程序将自动建立位映像字符,用C语言函数向屏幕输出文本时,都以位映像字符显示。位映象字符由8×8像素组成,每一位对应于一个像素,如果某一个位为1,则相应的像素将以当前颜色显示;如果为0则相应的像素被置为背景色。A的位映像第三章C语言图形程序设计基础笔画字体不是以位模式存储的,每个字符被定义成一系列的线段或笔画组合。笔画字体可以灵活地改变其大小,而且不会降低其分辨率。C语言提供了4种不同笔画字体,即小号字体、三倍字体、无衬线字体和黑体。每种笔画字体都放在独立字体文件中,如下表。笔画字体文件扩展名均为.chr。文件名说明Goth.chr笔画黑体(哥特字体)Litt.chr笔画小字体Sans.chr无衬线笔画字体Trip.chr三倍笔画字体笔画字体文件第三章C语言图形程序设计基础使用笔画字体,必须装入字体文件。这可通过settextstyle函数来实现。voidfarsettextstyle(intfont,intdirection,intcharsize);此函数是设置当前输出文本字体,显示方向和字符大小。函数共有三个参数,其含义如下:①font:是一个整型数,用来指定所使用字体,见p70表3.10②direction:是一个整型数,用来指定文本输出方向,见p71表3.11③charsize:是一个整型数,该参数实际上是一个因子,它表示8×8点阵字符的放大倍数,既影响点阵字符,也影响笔画字体。p71表3.12第三章C语言图形程序设计基础例3.19#include"graphics.h"#include"conio.h"voidmain(){intgdriver,gmode;gdriver=EGA;gmode=EGAHI;initgraph(&gdriver,&gmode,"");setbkcolor(1);setcolor(4);settextstyle(TRIPLEX_FONT,HORIZ_DIR,2);/*字体、输出方向、放大倍数*/三倍笔画字体,从左至右输出,放大2倍第三章C语言图形程序设计基础outtextxy(10,10,“AAAA”);/*三倍笔画,从左到右显示,放大值为2*/settextstyle(TRIPLEX_FONT,HORIZ_DIR,7);outtextxy(10,30,“AAAA”);/*三倍笔画,从左到右显示,放大值为7*/settextstyle(GOTHIC_FONT,HORIZ_DIR,4);outtextxy(10,80,“AAAA”);/*黑体笔画,从左到右显示,放大值为4*/getch();closegraph();}以多种方式输出字符串”AAAA”第三章C语言图形程序设计基础2.设置文本对齐方式voidfarsettextjustify(inthoriz,intvert);此函数规定文本输出在水平和垂直方向上的输出方式.参数horiz和vert是整型数,用来确定文本输出的当前对齐位置。方向符号常量值功能当前位置水平LEFT_TEXT0左对齐在左边CENTER_TEXT1中间对齐在中部RIGHT_TEXT2右对齐在右边垂直BOTTOM_TEXT0下对齐在底部CENTER_TEXT1中间对齐在中部TOP_TEXT2上对齐在顶边horiz和vert的取值horiz确定水平方向的对齐位置vert确定垂直方向的对齐位置。第三章C语言图形程序设计基础例如,执行settextjustify(RIGHT_TEXT,BOTTOM_TEXT);后,若执行outtextxy(100,120,"AAAAAAAAAAAA");则(100,120)指的是所输出字符串右下角。在缺省情况下,对齐方式是LEFT_TEXT,TOP_TEXT,如果用outtextxy输出上面字符串,则(100,120)指的是字符串左上角。图中方块表示需要输出的字符串两个参数不同组合指定了字符串不同位置,当用outtextxy函数输出该字符串时,(x,y)指的就是这个位置。第三章C语言图形程序设计基础3.改变矢量字体宽度和高度voidfarsetusercharsize(intmultx,intdivx,intmulty,intdivy);此函数设置了用户定义的笔画字型放大系数,x、y方向的放大系数分别为multx/divx,multy/divy。调用setusercharsize()函数之后,每个显示在屏幕上的字型都以缺省值大小乘以multx/divx为字符宽,乘以multy/divy为其字符高。这种方式只是在settextstyle()函数中的charsize=0时才起作用。用户自定义字符的大小,即USER_CHAR_SIZE(默认为0)第三章C语言图形程序设计基础例3.20#include"graphics.h"#include"conio.h"voidmain(){intgdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"");outtext("Normal");settextstyle(TRIPLEX_FONT,HORIZ_DIR,USER_CHAR_SIZE);setusercharsize(5,1,5,1);outtext("Neuron");getch();restorecrtmode();}输出结果为:NormalNeuron第三章C语言图形程序设计基础3月15日课程内容1、复习3.2-3.4内容,并请同学回答问题;2、3.5-3.8节内容复习内容:3.2颜色的设置3.3线的特性设定和填充3.4图形模式下文本处理问题:setlinestyle()函数中用户如何自定义线形。本节课重点:1、图形如何存入内存,如何从内存中复制到屏幕;2、常用画图函数简介;3、绘图程序实例介绍;4、基本绘图元素3.5图形存取处理在图形方式下,图形存取有着重要的作用,这也是图形动画的基础。图形存取的基本原理是:把屏幕上某个区域的信息存入一个缓冲区,然后在另一个区域把它的内容显示出来。一、检测所需内存unsignedfarimagesize(intx1,inty1,intx2,inty2);该函数返回一个无符号整数值,它是存储图形所需的字节数。参数x1,y1,x2,y2均为整型数,用来确定要存储的屏幕区域。这个区域是一个矩形,其左上角坐标为(x1、y1),右下角坐标为(x2,y2)。例如:执行unsignedsize;size=imagesize(10,10,100,100);将把存储左上角为(10,10),右下角为(100,100)的矩形区域所需的内存字节数存人变量size中。存储屏幕区域所需的字节数最多不能超过64K-1个字节,否则返回值为-1(0xFFFF)。也就是说,图形存取限制在64K字节之内。第三章C语言图形程序设计基础二、图形存入内存voidfargetimage(intx1,inty1,intx2,inty2,void*bitmap);该函数将指定区域的图形从屏幕拷贝到内存区域。要复制的屏幕区域由左上角(xl,y1)和右下角(x2,y2)给出,它应当与imagesize函数中参数相同。bitmap是一个void类型指针,需要复制的屏幕区域将保存在由它所指向的数组中。例如:void*w;unsignedsize;size=imagesize(10,10,100,100);w=malloc(size);getimage(10,10,100,100,w);malloc函数的作用是得到指向大小为括号的内存区域的地址指针,它放置在stdlid.h中。第三章C语言图形程序设计基础三、从内存复制图形到屏幕voidfarputimage(intx,inty,void*bitmap,intop);该函数将getimage函数保存的图形重新送回屏幕。参数(x,y)是恢复显示图形左上角的位置,bitmap是指向void类型的指针,它指向用getimage函数复制的数组。参数op是一个整型数,是图形复制到屏幕上显示方式符号常量值含义COPY_PUT0原样拷贝到屏幕XOR_PUT1与屏幕像素异或后拷贝OR_PUT2与屏幕像素或后拷贝AND_PUT3与屏幕像素与后拷贝NOT_PUT4把原来图形的像素取反后拷贝参数OP的取值如果想使原来的图形反相显示则可使用下面语句:putimage(110,10,W,NOT_PUT)如果使用XOR-PUT,则内存中的像素与当前屏幕上的像素进行异或操作。如果两个像素都为1,则相应的位被置为0,从而使原来的图形消失。如果再复制一次,则会重新出现。利用这一特性,可以实现动画操
本文档为【计算机图形学-C语言图形程序设计基础】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
都绘匠人
国家注册城乡规划师,资深工程师,具备城乡规划领域多年从业经历
格式:ppt
大小:2MB
软件:PowerPoint
页数:97
分类:理学
上传时间:2022-04-20
浏览量:0