分享
分销 收藏 举报 申诉 / 150

类型第3部分高级编程技术的实现.ppt

  • 上传人:知****运
  • 文档编号:14618364
  • 上传时间:2026-10-21
  • 格式:PPT
  • 页数:150
  • 大小:1.11MB
  • 下载积分:10 金币
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    部分 高级 编程 技术 实现
    资源描述:
    单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,3,章 高级编程技术的实现,主要内容,操作手段,显示方式,图形绘制技术,图像技术,动画技术,发声技术,汉字显示技术,精确的时间控制技术,第,3,章 高级编程技术的实现,操作手段:键盘,在键盘内有一个微处理器,用来扫描和检测每个键的按下和抬起状态,然后以程序中断(,INT 9H,),的方式与主机通信,向主机传送一个字节的按键,扫描码,。接着,ROM,中,BIOS,内的键盘中断处理程序,将按键扫描码翻译成对应的,ASCII,码,或,扩充的,ASCII,码,,存放在,AX,寄存器中。,它不是,ASCII,码;其06位标识了每个键在键盘上的位置,最高位为0对应该键是被按下;1对应松开;它并不能区别大小写字母,而且一些特殊键不产生扫描码直接引起中断调用,键名,AH,AL,字符键,ASCII,码,ASCII,码,功能键/组合键,扩充码的,ASCII,码,0,原理,第,3,章 高级编程技术的实现,操作手段:键盘,方法,方法一:直接使用声明在,bios.h,中的库函数,bioskey(),;,方法二:通过库函数,int86(),,调用,BIOS,的,INT 16H、,功能,号为0的中断。它将按键的扫描码存放在,AH,寄存器,中;,方法三:简单地利用,声明在,conio.h,中的库,函数,kbhit(),。,第,3,章 高级编程技术的实现,操作手段:键盘,方法一,int bioskey(int cmd),;/*,参数,cmd,用来确定函数如何操作*/,cmd=0,bioskey(),返回按健的键值,该值是2个字节的整型数。若没有键按下,则该函数一直等待,直到有键按下。当按下时,若返回值的低8位为非零,则表示为普通键,其值代表该键的,ASCII,码。若返回值的低8位为0,则高8位表示为扩展的,ASCII,码,表示按下的是特殊功能键,第,3,章 高级编程技术的实现,操作手段:键盘,方法一,int bioskey(int cmd),;/*,参数,cmd,用来确定函数如何操作*/,cmd=1,bioskey(),查询是否有键按下。若返回非0值,则表示有键按下,若为0表示没键按下。,第,3,章 高级编程技术的实现,操作手段:键盘,方法三,int kbhit(void);,若按了键盘,该函数返回值,1,,否则返回值,0,。,第,3,章 高级编程技术的实现,操作手段:鼠标,DOS,操作系统和,Turbo C 2.0,并不支持鼠标器的操作。要操纵鼠标器,首先必须安装相应的鼠标驱动程序。鼠标驱动程序由生产鼠标的厂家提供,它提供了许多鼠标操作的功能。这些功能可以通过,INT 33H,鼠标中断调用来使用。,原理,第,3,章 高级编程技术的实现,操作手段:鼠标常用功能,/*,显示鼠标器光标,*/,void cursorOn(),union REGS r,;,struct SREGS s,;,r.x.ax,1,;/*,1,号鼠标器功能:显示鼠标光标,*/,msvisible,TRUE,;,int86x(0 x33,,,&r,,,&r,,,&s),;,第,3,章 高级编程技术的实现,/*,关闭鼠标器光标,*/,void cursorOff(),union REGS r,;,struct SREGS s,;,r.x.ax,2,;/*,2,号鼠标器功能,:,不显示鼠标光标,*/,msvisible,FALSE,;,int86x(0 x33,,,&r,,,&r,,,&s),;,操作手段:鼠标常用功能,第,3,章 高级编程技术的实现,/*,设定鼠标光标的初始位置,*/,void cursorXY(unsigned int x,unsigned int y),union REGS r;,struct SREG s;,r.x.ax=,4,;/*,4,号鼠标器功能:,设置鼠标光标位置,*/,r.x.cx=x;/*,设定,光标,x,坐标*/,r.x.dx=y;/*,设定,光标,y,坐标*/,int86x(0 x33,,,&r,,,&r,,,mousex=x;,mousey=y;,操作手段:鼠标常用功能,第,3,章 高级编程技术的实现,/*,报告鼠标器当前光标位置和当前按键状态,*/,void mouseRead(),union REGS rl,r2;,struct SREGS s;,r1.x.ax=,3,;/*,3,号鼠标器功能:取按钮状态和鼠标位置,*/,int86x(0 x33,,,&r1,,,r2,,,&s),;,mousex=r2.x.cx;/*,鼠标器光标,x,方向坐标,*/,mousey=r2.x.dx;/*,鼠标器光标,y,方向坐标,*/,mousekey=r2.x.bx;/*,鼠标器按健状态,*/,操作手段:鼠标常用功能,第,3,章 高级编程技术的实现,/*,等待鼠标器的某种状态,*/,void wait(int i),do,mouseread();,while(mousekey=i);,操作手段:鼠标常用功能,第,3,章 高级编程技术的实现,主要内容,操作手段,显示方式,图形绘制技术,图像技术,动画技术,发声技术,汉字显示技术,精确的时间控制技术,第,3,章 高级编程技术的实现,显示方式:显示系统,显卡,在计算机主机和显示器之间起到了信息转换和视频发送作用,,必须与,显示器,配套。不同种类的显卡支持的显示模式种类不同,而且同一显卡一般可以支持多种显示模式。一种,显示模式,指定了相应显示器的工作方式、分辨率和颜色数目。,显 卡,第,3,章 高级编程技术的实现,显示方式:显示系统,常见显卡及其模式,第,3,章 高级编程技术的实现,显示方式:显示系统,显示器工作方式,显示器有两种工作方式,即文本显示方式和图形显示方式,它们的主要差别是显示存储器,(,VRAM),中存的信息不同。,文本方式,时,,VRAM,存放要显示字符的,ASCII,码,用它作为地址,取出字符发生器,ROM,中存放的相应字符的图像变成视频信号在显示器屏幕上进行显示。,图形方式,时,则要显示的图形的图像直接存在,VRAM,中,,VRAM,中某地址单元存放的数就表示了相应屏幕上某行和列上的像素及颜色。,第,3,章 高级编程技术的实现,显示方式:,也称作字符显示方式,是,Turbo C,确省的显示方式。文本方式屏幕的最大分辨单位是单个字符,字符显示的位置用行和列坐标来表示。,文本方式,第,3,章 高级编程技术的实现,显示方式:文本方式方式设定,Turbo C,支持的几种文本显示方式可以用下面的,函数,来设置,:,void textmode(int newmode),;,。,第,3,章 高级编程技术的实现,显示方式:文本方式颜色设置,void textbackground(int color),;,/*,设置字符背景颜色,*/,void textcolor(int color);/*,设置字符颜色*/,void textattr(int attr),;/*,可同时设置文本的字符和背景颜色*/,颜色函数,第,3,章 高级编程技术的实现,显示方式:文本方式窗口设置,Turbo C,确省定义的文本窗口为整个屏幕。用户可以通过函数:,void window(int left,int top,int right,int bottom),;,定义屏幕上的一个矩形域作为,窗口,。参数(,left,,,top,),是窗口左上角所在的屏幕坐标,(,right,,,bottom,),是窗口的右下角所在的屏幕坐标。窗口定义之后,用有关窗口的输入输出函数就可以只在此窗口内进行操作而不超出窗口的边界。另外,一个屏幕可以定义多个窗口,但现行窗口只能有一个。,第,3,章 高级编程技术的实现,显示方式:文本方式窗口操作,窗口内文本输出函数:,int cprintf(char*format,,,表达式表,),;,int cputs(char*str),;,int putch(int ch);,/*这三个函数受窗口的控制,窗口内显示光标的位置就是它们开始输出的位置。当输出行超过窗口右边界或输出到窗口底部边界时,会自动转到窗口内的下一行输出或自动上卷窗口内的内容继续输出*/,光标操作函数:,void gotoxy(int x,int y);/*,把光标移到窗口(,x,y),处*/,第,3,章 高级编程技术的实现,显示方式:文本方式屏幕操作,清屏函数:,void clrscr(void);/*,清除窗口文本,光标移到(1,1)*/,void clreol(void);/*,清除窗口从光标位置开始到本行,结尾的所有字符,但光标不变*/,void delline(void);/*,删除当前窗口的当前行*/,第,3,章 高级编程技术的实现,显示方式:文本方式屏幕操作,屏幕文本移动函数:,void movetext(int x1,int y1,int x2,int y2,int x3,int y3);,屏幕文本存取函数,void gettext(int x1,int y1,int x2,int y2,void*buffer);,void puttext(int x1,int y1,int x2,int y2,void*buffer);,第,3,章 高级编程技术的实现,显示方式:文本方式,编制一个程序,将屏幕垂直平分成两个窗口,左边窗口为蓝色背景,白色前景,右边窗口为绿色背景,红色前景。两个窗口都设计为文本输入,即在窗口中可以输入文字,在窗口屏幕中显示出来。使用,tab,键在左右两个窗口中切换,每个窗口都有光标,活动窗口光标进行闪烁。,应用实例,问题描述,第,3,章 高级编程技术的实现,显示方式:文本方式,首先用文本窗口函数,window(int x1,int y1,int x2,int y2),画出两个窗口,用,textcolor(int color),,,textbackground(int color),,,clrscr(void),等进行窗口属性的设置。用,tab,键进行两个窗口间的循环切换,在每次切换前先调用,gettext(int left,int top,int right,int bottom,void*buf),函数把当前矩形窗口上的字符拷贝到由,buf,所指向的内存中,在切换到另一个窗口后调用,puttext(int left,int top,int right,int bottom,void*buf),把先前存储在该窗口,buf,所指向的内存中的字符拷贝到当前窗口中,并用,gotoxy(int x,int y),把光标移到原先所在位置,因此可以接着先前的文本继续编辑。,应用实例,设计思想,第,3,章 高级编程技术的实现,显示方式:文本方式,应用实例,程序运行截图,第,3,章 高级编程技术的实现,显示方式:,图形方式,图形显示方式可以满足在屏幕上作图的要求。在此方式下,屏幕显示的单位是像素。屏幕显示的像素大小(分辨率)可以通过设置不同的显示方式来改变。像素在屏幕上的位置可由其所在的,x,,,y,坐标来决定。此时,屏幕的坐标系统就象一个倒置的直角坐标系。,第,3,章 高级编程技术的实现,显示方式:图形方式方式设定,图形系统的初始化:,用什么类型的显卡的驱动程序,采用什么模式的图形方式,适配器驱动程序的寻找路径名。,注意:所用系统的卡一定要支持所选用的显示模式,否则将出错。,第,3,章 高级编程技术的实现,显示方式:图形方式方式设定,图形系统的初始化函数:,void far initgraph(int far*pdriver,,,int far*pmode,,,char far*ppath_for_driver),;,enum graphics_driverDETECT,,,CGA,,,MCGA,,,EGA,,,EGA64,,,EGAMONO,,,IBM 8514,,,HERCMONO,,,ATT400,,,VGA,,,PC3270,;,第,3,章 高级编程技术的实现,显示方式:图形方式方式设定,图形系统的初始化函数:,void far initgraph(int far*pdriver,,,int far*pmode,,,char far*ppath_for_driver),;,第,3,章 高级编程技术的实现,显示方式:图形方式方式设定,图形系统检测函数,:,void far detectgraph(int far*pdriver,int far*pmode);,完成对适配器的检查并得到显示器类型号和相应的最高分辨率模式,将,graphdriver,设成,DETECT,,,initgraph(),将调用,detectgraph(),自动检测所用显卡类型,并将相应的驱动程序装入,并将其最高的显示模式作为当前显示模式。,int graphdriver=DETECT,graphmode,;,initgraph(,第,3,章 高级编程技术的实现,显示方式:图形方式方式设定,清屏函数:,画图前一般需清除屏幕,使得屏幕如同一张白纸,以画最新最美的图画。,void far cleardevice(void),;,图形系统的关闭:,当画图结束时可以通过调用关闭图形系统的函数:,void far closegraph(void),;,使显示器恢复到调用,initgraph(),函数之前的文本方式。,第,3,章 高级编程技术的实现,显示方式:图形方式颜色设置,前景色设置函数:,void far setcolor(int color);,背景色设置函数:,void far setbkcolor(int color);,第,3,章 高级编程技术的实现,显示方式:图形方式颜色设置,前景色设置函数:,void far setcolor(int color);,背景色设置函数:,void far setbkcolor(int color);,第,3,章 高级编程技术的实现,显示方式:图形方式颜色设置,CGA,前景色的取值:,第,3,章 高级编程技术的实现,显示方式:图形方式颜色设置,CGA,背景色的取值:,第,3,章 高级编程技术的实现,显示方式:图形方式颜色设置,EGA/VGA,调色板:,setcolor(color),时,color,的取值;,0,号索引位置的颜色总是和背景色相同,;,16个索引号意味着同时最多可显示16种不同的颜色,64/256色选一,第,3,章 高级编程技术的实现,显示方式:图形方式颜色设置,EGA/VGA,调色板:,整体设置:,void far setallpalette(struct palettetype far*palette);,#,define MAXCOLORS l5,struct palattetype,unsigned char size;,signed char colorsMAXCOLORS+1;,;,单色设置:,voidfar setpalette(int index,int actual_color);,第,3,章 高级编程技术的实现,显示方式:图形方式颜色设置,EGA/VGA,标准色:,第,3,章 高级编程技术的实现,显示方式:图形方式图视口,设置函数,:,void far setviewport(int xl,int y1,int x2,int y2,clipflag);,其中(,x1,y1),为图视口的左上角所在的原屏幕物理坐标,(,x2,y2),为右下角所在的原屏幕物理坐标。,clipflag,参数,clipflag,若为0,则超出图视口的图形部分仍将显示出来;否则,超出图视口的部分将被切除而不显示。,清除函数:,void far clearviewport(void),第,3,章 高级编程技术的实现,显示方式:图形方式文本输出,当前位置文本输出函数:,void far outtext(char far*textstring);,定位文本输出函数:,void far outtextxy(int x,int y,char far*textstring);,文本输出字符串函数,int sprintf(char*string,char*format,argument,);,第,3,章 高级编程技术的实现,显示方式:图形方式文本输出,文本输出位置函数:,void far settextjustify(int horiz,,,int vert);,第,3,章 高级编程技术的实现,显示方式:图形方式文本输出,定义文本字型函数:,void far settextstyle(int font,int direction,int char size);,第,3,章 高级编程技术的实现,#,include,main(),int i,graphdriver,graphmode,size,page;,char s30;,graphdriver=DETECT;,initgraph(,cleardevice();,settextstyle(DEFAULT_FONT,HORIZ_DIR,2);,settextjustify(LEFT_TEXT,0);,outtextxy(220,20,Defaut font);,settextstyle(TRIPLEX_FONT,HORIZ_DIR,2);,settextjustify(LEFT_TEXT,0);,outtextxy(220,50,Triplex font);,应用实例,程序源代码,settextstyle(SMALL_FONT,HORIZ_DIR,2);,settextjustify(LEFT_TEXT,0);,outtextxy(220,80,Smallfont);,settextstyle(SANS_SERIF_FONT,HORIZ_DIR,2);,settextjustify(LEFT_TEXT,0);,outtextxy(220,110,Sans serif font);,settextstyle(GOTHIC_FONT,HORIZ_DIR,2);,settextjustify(LEFT_TEXT,0);,outtextxy(220,140,gothic font);,getch();,closegraph();,显示方式:图形方式文本输出,第,3,章 高级编程技术的实现,应用实例,程序输出,显示方式:图形方式文本输出,第,3,章 高级编程技术的实现,主要内容,操作手段,显示方式,图形绘制技术,动画技术,发声技术,汉字显示技术,图像技术,精确的时间控制技术,第,3,章 高级编程技术的实现,图形绘制,void far moveto(int x,int y);,移动画笔到指定的(,x,y),位置,移动过程不画。,void far moverel(int dx,int dy);,画笔从现行位置(,x,y),处移到一位置增量处(,x+dx,y+dx),,移动过程不画:,int far getx(void);,得到当前画笔的,x,位置,int far gety(void);,得到当前画笔的,y,位置,:画笔定位,第,3,章 高级编程技术的实现,图形绘制,画点函数:,void far putpixel(int x,,,int y,,,int color);,该函数表示在指定的,x,,,y,位置画一点,点的显示颜色由设置的,color,值决定。,int far getpixel(int x,,,int y),;,该函数与,putpixel(),相对应,它得到在(,x,y),点位置上的像素的颜色值,:点和线,第,3,章 高级编程技术的实现,图形绘制:点和线,画线函数:,void far line(int x0,,,int y0,,,int x1,,,int y1),;,该函数从,(,x0,,,y0),点到,(,x1,,,y1),点画一直线。,void far lineto(int x,,,int y),;,该函数将从现行画笔位置到,(,x,,,y),点画一直线。,void far linerel(int dx,,,int dy),;,该函数将从现行画笔位置(,x,y),到位置增量处,(,x+dx,y+dy),画一直线。,第,3,章 高级编程技术的实现,线类型的设置:,在确省的情况下,画线函数画出的线都是一个像素点宽的细实线。也可以在画线之前通过函数:,void far setlinestyle(int linestyle,,,unsigned upattern,,,int thickness),;,定义线的类型和粗细。,setlinestyle(4,,,0 xF3D0,,,1),设置的线型,图形绘制:点和线,第,3,章 高级编程技术的实现,BIOS,的10,H,中断负责显示器服务,该中断的主要功能通过对,AH,来设置:,AH=00H,,功能为设置显示方式。此时通过对,AL,进行设置来设定显示方式,如设置,AL=13H,,则显示方式设置为,VGA,的,256,色320200图形显示模式。,AH=0CH,,功能为画点。这时,AL,中设置的值为颜色号,,CX,和,DX,的值决定画点的位置坐标。,图形绘制:点和线,利用,BIOS,调用,第,3,章 高级编程技术的实现,#include,#include,int main(),int i,j;,union REGS inreg,outreg;,inreg.h.ah=0;/*,置屏幕显示方式,*/,inreg.h.al=0 x13;,/*,定义,VGA256,色320200图形模式*/,int86(0 x10,/*,调用中断0,x10*/,for(i=0;i256;i+),for(j=0;j200;j+),inreg.h.ah=0 x0c;/*,写点,*/,应用实例,在屏幕上画出颜色不同的,256,条直线的,程序源代码,inreg.h.al=i;/*,置颜色号,*/,inreg.h.ch=0;/*,决定画点位置,*/,inreg.h.cl=i;,inreg.h.dh=0;,inreg.h.dl=j;,int86(0 x10,getch();,inreg.h.ah=0;,inreg.h.al=2;/*,返回到文本方式,*/,int86(0 x10,图形绘制:点和线,利用,BIOS,调用,第,3,章 高级编程技术的实现,图形绘制,:,矩形、圆和弧线,画矩形的函数:,void far rectangle(int xl,,,int y1,,,int x2,,,int y2),;,画椭圆、圆和扇形图函数:,void ellipse(int x,,,int y,,,int stangle,,,int endangel,,,int xradius,,,int yradius),;,void far circle(int x,,,int y,,,int radius),;,void far arc(int x,,,int y,,,int stangle,,,int endangle,,,int radius),;,第,3,章 高级编程技术的实现,编写程序,使用鼠标进行如下操作:按住鼠标器的任意键并移动,十字光标将随鼠标而移动,根据按键的不同采用不同的形状来画出相应的移动轨迹:当仅按下左键时用圆圈;仅按下右键时用矩形;其它按键情况用线条。,应用实例,问题描述,图形绘制,第,3,章 高级编程技术的实现,结合鼠标使用方法和上述的图形绘制函数来解决问题。由于在,Windows2000/XP,下不支持,INT 33,的1号显示鼠标光标功能,可以用画线函数,line(),画出一个十字形光标。光标的移动是通过将原位置光标用背景色再画而使其消失,然后在新位置处重新画一个光标,从而实现光标移动的动感。,应用实例,设计思想,图形绘制,第,3,章 高级编程技术的实现,应用实例,程序运行截图,图形绘制,第,3,章 高级编程技术的实现,图形绘制:,封闭图形的填色,填充设置函数,:,void far setfillstyle(int pattern,,,int color),;,该函数将用设定的,color,颜色和,pattern,图模式对后面画出的轮廓图进行填充,这些图轮廓是由待定函数画出的。,第,3,章 高级编程技术的实现,图形绘制:,封闭图形的填色,填充设置函数,:,void far setfillstyle(int pattern,,,int color),第,3,章 高级编程技术的实现,图形绘制:,封闭图形的填色,用户自定义填充函数,:,void far setfillpattern(char upattefn,,,int color),;,该函数设置用户自定义可填充模式,以,color,指出的颜色对封闭图形进行填充。参数,upattern,是一个指向8个字节存储区的指针,这8个字节表示了一个88像素点阵组成的填充图模,它是由用户自定义的,用来对封闭图形填充。8个字节的图模是这样形成的:每个字节代表一行,而每个字节的每一个二进制位代表该行的对应列上的像素。是1,则用,color,显示,是0则不显示。,第,3,章 高级编程技术的实现,图形绘制:,封闭图形的填色,得到目前的填充模式和颜色的函数,:,void far fillsettings(struct fillsettingstype far*fillinfo);,void far getfillpattern(char*upattern);,第,3,章 高级编程技术的实现,图形绘制:,封闭图形的填色,可填充的基本图形函数:,(,这些函数绘制的图形,将根据事先用,setfillstyle,函数设置的填充模式和颜色,或按缺省方式进行填充,),void bar(int x1,int y1,int x2,int y2);,void far pieslice(int x,,,int y,,,int stangle,,,int endangle,,,int radius),;,void far bar3d(int x1,,,int y1,,,int x2,,,int y2,,,int depth,,,int topflag),;,void far sector(int x,,,int y,,,int stangle,,,int endang1e,,,int xradius,,,int yradius),;,void far fillellipse(int x,int y,int xradius,int yradius);,void far fillpoly(int numpoints,int far polypoints);,第,3,章 高级编程技术的实现,图形绘制:,封闭图形的填色,可对任意封闭图形填充的函数,:,void far floodfill(int x,,,int y,,,int border),;,该函数将对任一封闭图形进行填充,其颜色和模式将由设定的或缺省的图模与颜色决定。其中参数,(,x,,,y),为封闭图形中的任一点,,border,是封闭图形的边框颜色。编程时该函数位于画封闭图形(即要填充的图形)的代码之后。,第,3,章 高级编程技术的实现,#include,main(),int i,graphdriver,graphmode,size,page;,char s30;,graphdriver=DETECT;,initgraph(,cleardevice();,setbkcolor(BLUE);,setviewport(40,40,600,440,1);/*,开图视口,*/,setfillstyle(1,2);,setcolor(YELLOW);,rectangle(0,0,560,400);,floodfill(50,50,14);/*,用绿色填充矩形框,*/,rectangle(20,20,540,380);,setfillstyle(1,13);,floodfill(2l,300,14);/*,用淡洋红色填充矩形框,*/,setcolor(BLACK);,应用实例,程序源代码,settextstyle(1,0,6);/*,设置字形方向,尺寸,*/,outtextxy(100,60,Welcom You);,setviewport(100,200,540,380,0);,setcolor(14);,setfillstyle(1,12);,rectangle(20,20,420,120);,settextstyle(2,0,9);,floodfill(21,100,14);/*,用深蓝色填充,*/,sprintf(s,“Lets study Turbo C”);,setcolor(YELLOW);,outtextxy(60,40,s);/*,用黄色显示,*/,setcolor(1);,settextstyle(4,0,3);,outtextxy(110,80,s);,getch();,closegraph();,图形绘制,第,3,章 高级编程技术的实现,应用实例,程序输出,图形绘制,第,3,章 高级编程技术的实现,主要内容,操作手段,显示方式,图形绘制技术,图像技术,动画技术,发声技术,汉字显示技术,精确的时间控制技术,第,3,章 高级编程技术的实现,图像技术:图像的二种来源,(1)屏幕图像,:,在图形方式下所绘图形形成的像素点图像,。,图像数据直接存储在,VRAM,中,,VRAM,中某地址单元存放的数就表示了相应屏幕上某行和列上的像素及其颜色值。,(2)图像文件,:,图像数据以一定的格式存储在文件中。需要有专门的软件来支持,或自己编写程序来读取、显示和生成某种格式的图像文件。首先必须要了解某种图像文件的格式。,第,3,章 高级编程技术的实现,图像技术:屏幕图像与,VRAM,直接写屏,:,在图形方式下将图像数据直接写入,VRAM,的过程,即图像显示过程。直接写屏是最快的图像显示方法。,第,3,章 高级编程技术的实现,图像技术:,VRAM,与系统存储器的对应关系,CGA,的,VRAM,对应的内存地址开始于,B8000H,VGA、EGA,的开始于,A0000H。,对,CGA,VRAM,仅有16,K,字节;对,VGA,和,EGA,VRAM,可达256,K,字节,它分成独立的4个64,K,字节部分,这样的每个部分称为一个位面或页面(编号0-3),它们共同占有一块内存空间,即用同一的64,K,个地址。相应内存的每个地址实际上代表,VRAM4,个位面上相并列的4个字节。,对于,SVGA,,由于它要存取更高分辨率或更多颜色的数据,一般都至少拥有512,K,以上的,VRAM,,但其所占用的内存地址仍大都是64,K,,因此也需要划分许多页面,对应到,A0000H,或其它的视频内存地址上。,第,3,章 高级编程技术的实现,图像技术:屏幕图像的允许读写过程,允许读的过程是:首先通过索引寄存器(接口地址为0,x3ce),选择读位面选择寄存器(其索引号为4),然后通过读位面选择寄存器(接口地址0,x3cf),选择位面号。相应的代码为:,outportb,(0 x3ce,4);/*,将索引号4送索引寄存器,选择读位面选择寄存器*,/,outportb,(0 x3cf,n);/*,将选择的位面号,n,送读位面选择寄存器,允许该位面可读*/,第,3,章 高级编程技术的实现,图像技术:屏幕图像的读写过程,允许写的过程是:首先通过索引寄存器(接口地址为0,x3c4),选择位面写允许寄存器(索引号为2),然后通过接口地址0,x3c5,选择位面号。相应的代码为:,outportb,(0 x3c4,2);/*,将索引号2送索引寄存器,选择位面写允许寄存器*/,outportb,(0 x3c5,k);/*,送位面号至位面写允许寄存器,允许该位面可写*/,第,3,章 高级编程技术的实现,图像技术:屏幕图像数据在,VRAM,中存放格式,CGA,的4色,320200的模式,,视频内存起始地址,B0000H。,屏幕上显示的像素点从左到右,从上到下依次存在,VRAM,从0号地址开始的连续地址中,每个像素占2位,,VRAM,每个字节存放四个像素点。,特殊的地方,:,屏幕上显示的偶行像素存在16,KVRAM,的上半部,而奇行存在下半部。从系统地址看,上半部开始于,B800:0000,,下半部开始于,B800:1000。,第,3,章 高级编程技术的实现,图像技术:屏幕图像数据在,VRAM,中存放格式,VGA,视频内存起始地址,A0000H,,在16色,640480,模式下采用位面对应方式,视频内存地址上每一个字节代表8个像素,每一位又可对应到位面中同样位置的4位上(4位的组合表示16色之一,因此又称位面为颜色位面),。,在屏幕上绘出一个点时,就必须将数据分别存放到四个位面中对应的位上,。,第,3,章 高级编程技术的实现,图像技术:屏幕图像数据在,VRAM,中存放格式,在256色320200模式下采用的是线性对应的方法(,SVGA,的所有256色和真彩都是用这种方法)。,线性对应将屏幕上每一点与视频内存地址按顺序一一对应起来,一个点对应一个字节,这样做的好处是:这种对应方式比位面对应方式简单多了,因为只需直接对视频内存地址做存取即可,而不必理会位面与内存地址的对应关系。,第,3,章 高级编程技术的实现,图像技术:屏幕图像的操作,函数名,含义,unsigned far imagesize(int x1,,,int y1,,,int x2,,,int y2),;,测定图像所占字节数,void far getimage(int x1,,,int y1,,,int x2,,,int y2,,,void far*bitmap),;,屏幕图像存储,void far putimage(int x1,,,int y1,,,void far*bitmap,,,int op),;,显示所存屏幕图像,屏幕图像的存储和显示操作函数,第,3,章 高级编程技术的实现,图像技术:图像像素与背景像素的逻辑操作,表3-13 操作规定值及操作,符号名,值,含义,COPY_PUT,0,存储图像进行覆盖,XOR_PUT,1,对应像素点进行异或操作,OR_PUT,2,对应像素点进行或操作,AND_PUT,3,对应像素点进行与操作,NOT_PUT,4,存储图像取反后进行覆盖,第,3,章 高级编程技术的实现,图像技术:,屏幕图像操作实例,绘制满屏的,16,色圆和长方形,并将屏幕图像保存到文件,pic.dat,中。然后将保存在文件,pic.dat,的屏幕图像重新显示在,VGA,屏幕上。,应用实例,问题描述,第,3,章 高级编程技术的实现,图像技术:,屏幕图像操作实例,应用实例,注意事项,VGA,的,VRAM,起始地址为,A0000H,,开始单元的地址为,0 xA000:0 x0000,。,存取对应屏幕图像,VRAM,中的信息时,其开始地址指针定义为:,ptr,=(,charfar,*)0 xa0000000L;,由于程序将显示模式设置为,VGAHI,模式,分辨率是,640480,,,16,色,每个像素由每个位面上的,1,位组成,即一个字节代表,8,个像素,故对应的内存地址是从,A0000H,开始的,38400,个字节地址。,由于系统初始化时,读位面选择寄存器设置为位面,0,,程序最后应恢复原系统初始化设置。,第,3,章 高级编程技术的实现,图像技术:,屏幕图像操作实例,应用实例,源程序,/*,保存屏幕图像,*,/,void save_pic(char*fname),FILE*fp;,int i;,long j;,char far*ptr;,fp=fopen(fname,wb);,for(i=0;i4;i+),outportb(0 x3ce,4);,/*,选择读位面选择寄存器*,/,outportb(0 x3cf,i);,/*,允许位面,i,可读*,/,ptr=(char far*)0 xa0000000L;,/*VGA,的,VRAM,指针*,/,fo
    展开阅读全文

    开通VIP折扣优惠下载文档

    提示  咨信网声明:本文档由用户上传并分享,仅供学习交流、研究之用,未经授权,严禁复制、发行、汇编、翻译或网络传播等,侵权必究。

    咨信网小贴示:
    1、浏览或下载可查看了解,请点击【咨信网告知】。
    2、下载文件中如有侵权或不适当内容,将立即纠正。
    3、如果因为网速或其他原因下载失败请重新下载,重复下载[60天内]不扣币。
    4、开具发票登录电脑端申请,请点击【索取发票】。

    咨信网客服组:【微信客服】

    自信AI创作助手
    关于本文
    本文标题:第3部分高级编程技术的实现.ppt
    链接地址:https://www.zixin.com.cn/doc/14618364.html

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork