《C作图与图形处理》PPT课件.ppt

上传人:tia****nde 文档编号:12708181 上传时间:2020-05-14 格式:PPT 页数:43 大小:630KB
返回 下载 相关 举报
《C作图与图形处理》PPT课件.ppt_第1页
第1页 / 共43页
《C作图与图形处理》PPT课件.ppt_第2页
第2页 / 共43页
《C作图与图形处理》PPT课件.ppt_第3页
第3页 / 共43页
点击查看更多>>
资源描述
2020/5/14,1,第十二章C作图与图形处理,图形系统的初始化及基本框架图形系统中的像素与坐标常用图形函数图形方式下的文本输出函数屏幕操作函数及动画基本知识VRAM的读写,2020/5/14,2,第一节图形系统的初始化及基本框架,显示器的工作方式:文本方式(默认方式)以字符为单位显示文本,一般一屏25行80列字符图形方式以像素为单位显示图形以上两种显示方式可以互相转换,2020/5/14,3,一、图形方式的初始化,要作图,必须对显卡初始化,使之工作在图形方式:初始化函数:voidinitgraph(int*gdriver,int*gmode,char*driver_path)该函数在“graphics.h”中定义第一个参数对应显示适配器的类型,目前绝大多数显卡都是VGA显卡第二个参数对应显示方式(表12-1所示)第三个参数用来指明显卡驱动程序的位置,若在当前目录中,可写为“”,初始化方法一:intmain()intdriver=VGA;/VGA其实是枚举常量intmode=VGAHI;/高分辨率,见p141表initgraph(,2020/5/14,4,特别说明:作图程序编译、连接后,形成可执行文件(.exe文件),此文件若拷贝到其他机器上运行,必须保证显示驱动程序在该机存在,且在指定目录中。若用:initgraph(则驱动程序应与.exe文件在同一目录通常,都是把驱动程序和可执行文件一起拷贝。,2020/5/14,5,特别说明:若不想向另外机器上拷贝驱动程序,想生成一个可独立运行的exe文件,则需按下面三步进行:1.D:tcBGIOBJEGAVGA磁盘上将生成EGAVGA.OBJ文件2.D:tcTLIBlibgraphics.lib+egavga.obj磁盘上graphics.lib将包含驱动程序(增加4K)3.程序中,initgraph()调用前加上一行:registerbgidriver(EGAVGA_driver);,2020/5/14,6,特别说明:同样的道理,若需要不依赖于字体(英)驱动的可执行文件,也需将字体驱动连接到graphics.lib中,如:1.D:tcBGIOBJtripD:tcBGIOBJlitt磁盘上将生成trip.obj、litt.obj文件2.D:tcTLIBlibgraphics.lib+trip.objD:tcTLIBlibgraphics.lib+litt.objgraphics.lib将包含字符驱动程序3.程序中,initgraph()调用前加上:registerbgifont(triplex_font);registerbgifont(small_font);,2020/5/14,7,若不知道显示器的类型,可将graphdriver置为DETECT,系统将自动检测其类型,将相应的驱动程序装入,并将显示模式置成最高模式初始化方法二:intmain()intdriver=DETECT;intmode;initgraph(return0;,2020/5/14,8,2020/5/14,9,二、图形方式的关闭,关闭图形方式,返回文本方式的函数:voidclosegraph()说明:还有一个restorecrtmode()也可以返回文本方式,两者的区别:后者在内存中保留驱动程序和字符集,暂时返回文本方式,可随时用函数setgraphmode(VGAHI)切换回图形方式,而closegraph()则是完全释放驱动程序和字符集。,作图程序开始时,先要用initgraph()初始化,而在作图结束时,总要用closegraph()关闭图形方式,使屏幕转回文本方式,程序中的initgraph()和closegraph()总是成对出现的。初始化后的清屏:初始化后一般应清屏,使屏幕如同一张白纸,清屏函数的原型是:voidcleardevice();,2020/5/14,10,2020/5/14,11,三、作图程序的基本框架及实例,#include/包含绘图头文件intmain()intgdriver=DETECT;intgmode;initgraph(,2020/5/14,12,例12-1:画圆程序#includeintmain()intgdriver=DETECT;intgmode;initgraph(,2020/5/14,13,第二节图形系统中的像素与坐标,图形方式下,屏幕被划分为一个一个的“点”,这些点被称作像素。像素是组成图像的最基本元素。像素的位置是由坐标表示的图形初始化后,系统默认的画图区域是整个屏幕,画笔的位置是(0,0)-即屏幕左上角。见图12-1(p144),像素操作函数:voidputpixel(intx,inty,intcolor);功能:在指定位置用指定颜色画一个点作图颜色与常量之间的对应关系见表12-2(p144)intgetpixel(intx,inty);功能:返回指定位置的像素颜色,2020/5/14,14,2020/5/14,15,第三节常用图形函数,函数原型及使用说明参见教材12.3在程序框架下,逐个练习每个作图函数的用法。,2020/5/14,16,第四节图形方式下的文本输出函数,1、voidouttext(char*textstring);功能:在当前位置输出字符串说明:textstring可以是指向字符串的指针变量,也可以是字符串常量如:char*p=“hello”;outtext(p);outtext(“hello”);,2020/5/14,17,2、voidouttextxy(intx,inty,char*textstring);功能:在指定位置输出字符串如:char*p=“hello”;outtextxy(200,100,p);或:outtextxy(200,100,“hello”);,2020/5/14,18,3、voidsettextstyle(intfont,intderection,charsize);功能:设置文本的字体、字号和输出方向4、voidsettextjustyle(inthoriz,intvert);功能:设置文本输出的对齐方式以上两个函数的详细说明请参阅教材,2020/5/14,19,实训,1、画一条正弦曲线(一个周期)2、在屏幕上模拟满天星、时明时灭的效果3、分别画一个圆、椭圆、矩形、条形图、扇形图、三维条形图,并用不同颜色填充4、键盘输入10名学生的成绩(三科),画出总分前三名的直方图,用圆饼图画出平均分在各分数段的比例(不及格、60-69,70-79,80-89,90-100),图形中要有图例。,2020/5/14,20,第五节屏幕操作函数及动画知识,常用的屏幕操作函数动画设计的方法动画举例,2020/5/14,21,一、屏幕操作函数,屏幕操作函数voidgetimage(intx1,inty1,intx2,inty2,void*bitmap);unsignedimagesize(intx1,inty1,intx2,inty2);voidputimage(intx1,inty1,void*bitmap,intop);voidsetviewport(intx1,inty1,intx2,inty2,intclipflag);voidclearviewport();,2020/5/14,22,二、动画设计的方法,利用动态开辟图视口的方法利用显示页和编辑页的交替变化的方法利用画面存储再重放的方法直接写屏的方法,2020/5/14,23,三、动画设计举例,利用动态开辟图视口的方法一步步做(例12-2)利用画面存储再重放的方法一步步做(例12-3),2020/5/14,24,第六节VRAM的读写,屏幕图形与VRAM的关系VGA显存的位面结构图像存储(读VRAM)图像回放(写VRAM),2020/5/14,25,一、屏幕图形与VRAM的关系,显存中的数据(二进制数)通过显卡的一些部件转变为模拟信号后,发送到显示器上,便是我们看到的图像。由此可知:屏幕上的图像是由显存中的数据决定的。,2020/5/14,26,结论:改变显存中的数据,就可以改变图像把显存中的数据写到文件中,意味着存储了图像将文件中的数据重新写回显存,可再现原来的图像,2020/5/14,27,二、VGA显存的位面结构,VGA显存与内存统一编址,显存的起始地址是:0 xa000:0 x0000VGA显存最多256K,平均分成4部分,每部分64K,称作一个位面。,2020/5/14,28,二、VGA显存的位面结构,四个位面(0、1、2、3)使用相同的地址,即:显存中的一个地址实际上对应着4个位面上的4个字节(每位面一个字节),2020/5/14,29,二、VGA显存的位面结构,4个位面上相同位置的4个二进制数,决定着显示器上一个像素的颜色。,位面3,位面0,2020/5/14,30,2020/5/14,31,三、图像存储(读VRAM),要将图像存起来,实际上就是把显存4个位面中的数据存起来,即把0 xa000:0 x0000开始的、总共640*480/8=38400个字节的4个位面的数据全部存到文件中,可用fputc()函数但是,每次只能读取一个位面上的数据,如何选取位面?,2020/5/14,32,VGA显卡上有一个图形控制器,含有许多寄存器,其中有个读位面选择寄存器(口地址0 x3cf),通过给它不同的数值,可以实现对位面的选择(仅读操作时)如:outportb(0 x3cf,0);/表示要读位面0outportb(0 x3cf,1);/表示要读位面1,2020/5/14,33,但是,读位面选择寄存器和其他8个寄存器共用一个口地址,用哪个由索引寄存器决定:,2020/5/14,34,可见,前面代码“outportb(0 x3cf,0);”中的“0”送入哪个寄存器,是由索引寄存器控制的。索引寄存器的口地址是0 x3ce,当索引值是4时,表示选中的是读位面选择寄存器,“0”才能被送入读位面选择寄存器,2020/5/14,35,数据:0,4,0:XX寄存器,4:读位面选择寄存器,1:XX寄存器,2:XX寄存器,3:XX寄存器,5:XX寄存器,6:XX寄存器,7:XX寄存器,索引寄存器口地址:0 x3ce,8:XX寄存器,口地址:0 x3cf,执行outport(0 x3cf,0)的过程,2020/5/14,36,因此,需要:先用下面的语句指明:口地址0 x3cf对应的是“读位面选择寄存器”outportb(0 x3ce,4);然后再选择位面:outportb(0 x3cf,0);/设要读位面0两者可以合并:outport(0 x3ce,0 x0004);,2020/5/14,37,核心代码:charfar*p;fp=fopen(pic.dat,wb);for(i=0;i4;i+)outportb(0 x3ce,4);/选择读位面选择寄存器outportb(0 x3cf,i);/选择位面ip=(charfar*)0 xa0000000L;/p指向显存开头for(j=0;j38400L;j+)putc(*p,fp);p+;,写位面与读位面不同,可以同时写几个位面(写进每个位面的数据是相同的)。若数据不相同,需要分别写,一次写一个位面。写哪些位面,由颜色位面写允许寄存器(口地址:0 x3c5)的低4位控制,如:,2020/5/14,38,四、图像回放(写VRAM),2020/5/14,39,同样:颜色位面写允许寄存器也是和其他寄存器共用一个口地址的,2020/5/14,40,可见,口地址0 x3c5对应着哪个寄存器,是由索引寄存器(口地址:0 x3c4)中的索引值决定的。当索引值为2时,表示选择了颜色位面写允许寄存器,故要用下面代码先选择颜色位面写允许寄存器:outportb(0 x3c4,2);,2020/5/14,41,核心代码:charfar*p;intk=1;fp=fopen(pic.dat,“rb);for(i=0;i4;i+)outportb(0 x3c4,2);/选择“写允许寄存器”outportb(0 x3c5,k);/选择位面n,2n=kp=(charfar*)0 xa0000000L;/p指向显存开头for(j=0;j38400L;j+)*p=fgetc(fp);p+;k*=2;,2020/5/14,42,例12-4:用直接读写VRAM的方法实现图像的存储和回放代码参阅教材,2020/5/14,43,实训,5、利用动画技术在屏幕上模拟两个小球的相向运动,碰撞后分开,到达边缘后改变方向继续相向运动6、利用动画技术模拟小球在桌面上不断跳动的过程说明:小球运动过程中,速度是变化的小球每次弹起的高度是递减的,直至0,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!