资源描述:
《在TVGA上实现全屏幕动画.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、在TVGA上实现全屏幕动画在图像处理领域,当处理或分析序列运动图像时,需要在屏幕上连续显示这一序列图像(即动画播放),以便观察处理效果或分析动态信息。一般游戏动画的设计方法是慢速移动背景和快速刷新运动目标(小画面),难以实现全屏动画效果。为此笔者采用了汇编语言编程和快速写屏的方法,在普通的486微机(主频66M,配TVGA9000卡)上达到了每秒显示10幅640×480×256灰阶图像的速度,效果令人满意。首先设置TVGA卡使其工作在0X5d方式下,屏幕分辨率是640×480×256色。然后重新构造调色板(RemapPalette()),使其适于显示2
2、56灰阶的图像。由于TVGA卡的颜色寄存器使用18位存储模式,即R、G、B分量各占6位,而要显示灰度图像R、G、B分量必须赋予相同的值,所以就只能显示区分26=64灰阶的图像。不过,实验表明人眼已无法区分64灰阶与256灰阶图像的差别。因此,在构造调色板时,0~3索引值对应的R、G、B分量值都为0,4~7索引值对应的R、G、B分量值都为1,…,依次类推,这样就可以正确显示一幅256灰阶的图像。以下是动画播放序列运动图像完整的源代码()。为连续显示一序列图像,先将序列图像的数目(如20)、存放图像数据文件的路径(f:zyf)、图像文件的名称(如,,…
3、)录入一文本文件(如),运行程序时只需键入AVD即可。源程序中显示每幅图像的代码部分采用嵌入汇编语言编写,以得到较高的显示速度。在程序运行过程中,按下空格键暂停;连击空格键实现单帧播放;按下任意其它键恢复连续播放;按下退出键(Escape)退回DOS。在程序设计时,为避免在一个循环结束过渡到下一个循环开始时将要从序列的最后一幅图像切换到第一幅图像,因为这时由于图像运动的不连续性将产生突变,以至屏幕显示有抖动感或闪烁感,所以笔者采用了第一个循环正向播放,第二个循环反向播放(即正反相间)的方案。如果读者只希望正向播放,只须删除源程序中标有“//$$$”的四
4、条语句行即可。编译运行环境:本程序用MS编译通过,编译时请使用命令行参数/STACK:20480;图像数据文件来自大恒公司的VP32图像采集板(512×512×256灰阶)。#include#include#include#include#include#include#include#defineIMGGRP0//ImageNumberinaCycleShowing#defineESCAPE//StopShowingandExit#defineSPACE//StepShow--HitSpaceBar&OnebyOneShowingvoidRemapP
5、alette(void);voidmain(intargc,char*argv[]){staticchargrpflnm[IMGGRP][80];charpath[80],flnm[80],bindfn[80],arg[5];charfnch[2]=“ ”;charch-imgnum[5];inti,i1,i2,i12,ii,imgnum=IMGGRP;intdispimgs,keyin,StepShow=0;unsignedshortintVSEG;unionREGSinregs,outregs;FILE*fp;unsignedshortintro
6、w=480,col=512;unsignedcharfb[512];intm-b=0;clock-tcstart,cend;/*Forclock*/unsignedshortintFH;//FileHandleprintf(“**********GROUPIMAGESANIMATEDLYSHOWING*********”);if(argc>1)strcpy(flnm,argv[1]);else{printf(“InputtheImageGroupfilename[.lst]:”);gets(flnm);}REDISP:if(!strchr(
7、flnm,’.’))strcat(flnm,”.lst”);if((fp=fopen(flnm,”rt”))==NULL){printf(“Openfilefailure!!aa”);printf(“PleaseCheckfollowingfileswhetherexist:”);printf(“%s”,flnm);printf(“Note:Thefileextensionnameisappendedautomatically,”);printf(“suchas[.lst]!”);exit(1);}=0x005d;//S
8、etTVGAMode:640x480x25levelsint86(0x10,&inregs,&