- 相關(guān)推薦
在TVGA上實(shí)現(xiàn)全屏幕動(dòng)畫
在圖像處理領(lǐng)域,當(dāng)處理或分析序列運(yùn)動(dòng)圖像時(shí),需要在屏幕上連續(xù)顯示這一序列圖像(即動(dòng)畫播放),以便觀察處理效果或分析動(dòng)態(tài)信息。一般游戲動(dòng)畫的設(shè)計(jì)方法是慢速移動(dòng)背景和快速刷新運(yùn)動(dòng)目標(biāo)(小畫面),難以實(shí)現(xiàn)全屏動(dòng)畫效果。為此筆者采用了匯編語(yǔ)言編程和快速寫屏的方法,在普通的486微機(jī)(主頻66M,配TVGA9000卡)上達(dá)到了每秒顯示10幅640×480×256灰階圖像的速度,效果令人滿意。
首先設(shè)置TVGA卡使其工作在0X5d方式下,屏幕分辨率是640×480×256色。然后重新構(gòu)造調(diào)色板(RemapPalette()),使其適于顯示256灰階的圖像。由于TVGA卡的顏色寄存器使用18位存儲(chǔ)模式,即R、G、B分量各占6位,而要顯示灰度圖像R、G、B分量必須賦予相同的值,所以就只能顯示區(qū)分26=64灰階的圖像。不過(guò),實(shí)驗(yàn)表明人眼已無(wú)法區(qū)分64灰階與256灰階圖像的差別。因此,在構(gòu)造調(diào)色板時(shí),0~3索引值對(duì)應(yīng)的R、G、B分量值都為0,4~7索引值對(duì)應(yīng)的R、G、B分量值都為1,…,依次類推,這樣就可以正確顯示一幅256灰階的圖像。
以下是動(dòng)畫播放序列運(yùn)動(dòng)圖像完整的源代碼(AVD.C)。為連續(xù)顯示一序列圖像,先將序列圖像的數(shù)目(如20)、存放圖像數(shù)據(jù)文件的路徑(f:\zyf\)、圖像文件的名稱(如z1.img,z2.img,…)錄入一文本文件(如imggroup.lst),運(yùn)行程序時(shí)只需鍵入AVD imggroup.lst即可。源程序中顯示每幅圖像的代碼部分采用嵌入?yún)R編語(yǔ)言編寫,以得到較高的顯示速度。在程序運(yùn)行過(guò)程中,按下空格鍵暫停;連擊空格鍵實(shí)現(xiàn)單幀播放;按下任意其它鍵恢復(fù)連續(xù)播放;按下退出鍵(Escape)退回DOS。在程序設(shè)計(jì)時(shí),為避免在一個(gè)循環(huán)結(jié)束過(guò)渡到下一個(gè)循環(huán)開始時(shí)將要從序列的最后一幅圖像切換到第一幅圖像,因?yàn)檫@時(shí)由于圖像運(yùn)動(dòng)的不連續(xù)性將產(chǎn)生突變,以至屏幕顯示有抖動(dòng)感或閃爍感,所以筆者采用了第一個(gè)循環(huán)正向播放,第二個(gè)循環(huán)反向播放(即正反相間)的方案。如果讀者只希望正向播放,只須刪除源程序中標(biāo)有“//$$$”的四條語(yǔ)句行即可。
編譯運(yùn)行環(huán)境:本程序用MS C6.0編譯通過(guò),編譯時(shí)請(qǐng)使用命令行參數(shù)/STACK:20480;圖像數(shù)據(jù)文件來(lái)自大恒公司的VP32圖像采集板(512×512×256灰階)。
#include <graph.h>
#include <stdio.h>
#include <dos.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <time.h>
#define IMGGRP 30 //Image Number in a Cycle Showing
#define ESCAPE 27 //Stop Showing and Exit
#define SPACE 32 //Step Show--Hit Space Bar & One by One Showing
void RemapPalette(void);
void main (int argc,char *argv[])
{
static char grpflnm[IMGGRP][80];
char path[80],flnm[80],bindfn[80],arg[5];
char fnch[2]="\0";
char ch-imgnum[5];
int i,i1,i2,i12,ii,imgnum=IMGGRP;
int dispimgs,keyin,StepShow=0;
unsigned short int VSEG;
union REGS inregs,outregs;
FILE *fp;
unsigned short int row=480,col=512;
unsigned char fb[512];
int m-b=0;
clock-t cstart,cend; /* For clock */
unsigned short int FH; // File Handle
printf("\n ********** GROUP IMAGES ANIMATEDLY SHOWING ********* \n");
[1] [2] [3] [4]
【在TVGA上實(shí)現(xiàn)全屏幕動(dòng)畫】相關(guān)文章:
相關(guān)辨識(shí)法的改進(jìn)及其在伺服系統(tǒng)上的實(shí)現(xiàn)04-26
實(shí)現(xiàn)04-29
動(dòng)畫迷的弟弟04-28
動(dòng)畫實(shí)習(xí)報(bào)告05-30
動(dòng)畫實(shí)習(xí)總結(jié)05-23
動(dòng)畫,我的世界04-28
上師大09年本科招5650人首招動(dòng)畫專業(yè)05-01
動(dòng)畫片05-01