VGA16色模式下的圖像漫游_第1頁
VGA16色模式下的圖像漫游_第2頁
VGA16色模式下的圖像漫游_第3頁
VGA16色模式下的圖像漫游_第4頁
VGA16色模式下的圖像漫游_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、VGA16色形式下的圖像遨游vga是微機顯示的廉價適配器,因此在其上實現(xiàn)圖形圖像處理的本錢較低。在目前國內(nèi)流行的語言中,均提供了根本的作圖函數(shù),如brland+、turb和irsft。但還缺少一個最根本的圖形圖像處理功能-屏幕遨游功能。本文將討論在vga16色形式下實現(xiàn)屏幕圖像遨游的方法,并給出語言的程序供讀者參考。一、根本構(gòu)思為了實現(xiàn)遨游的功能,首先將想像中的大幅圖像分成nn塊(每塊應(yīng)小于屏幕的分辨率)一樣大小的區(qū)域,然后逐次顯示在屏幕上并存放到一個文件中。這樣就完成了遨游圖的制作。可以設(shè)想,文件提供了一個無限分辨率的虛擬屏幕,存儲著大幅圖像數(shù)據(jù)。在調(diào)用遨游圖時,將存放在文件中的圖像數(shù)據(jù)的一

2、局部顯示在屏幕上,當(dāng)用鍵盤或鼠標(biāo)控制圖像遨游時,程序首先將屏幕上的圖像挪動一定的間隔 ,這一過程本質(zhì)是硬件遨游。當(dāng)屏幕圖像挪動后,留出的空白位置那么從文件中調(diào)出數(shù)據(jù)顯示到屏幕上,這一步本質(zhì)為軟件遨游。二、存圖文件的數(shù)據(jù)構(gòu)造假設(shè)在文件z.sr中存儲了22個vga(64048016色形式)窗口畫面,窗口的范圍如圖1所示。其左上角和右下角的坐標(biāo)分別為(xp1,yp1)、(xp2,yp2),將來就在這一窗口范圍內(nèi)進(jìn)展遨游。t5s11100.gif;圖1假設(shè)存圖時每個窗口大小一樣,高度為d,寬度為。存圖時遨游窗口的寬度與起始坐標(biāo)均為8的整數(shù)倍,這樣便于處理。四個窗口的排號順序如圖2所示:t5s11101

3、.gif;圖2在此是實現(xiàn)22畫面的遨游功能,用戶可根據(jù)需要實現(xiàn)nn個畫面的遨游,其方法一樣。三、根本功能函數(shù)實現(xiàn)遨游功能主要由以下幾個函數(shù)實現(xiàn)savein存圖函數(shù),將屏幕窗口函數(shù)存入文件。ladin調(diào)圖函數(shù),由文件將圖像數(shù)據(jù)調(diào)入屏幕。srll_xx軸向遨游函數(shù)。srll_yy軸向遨游函數(shù)。1.常數(shù)定義及函數(shù)說明/*文件名:srll.h*+/#definexp116/*窗口左上角坐標(biāo)*/#defineyp132#definexp2591/*窗口右下角坐標(biāo)*/#defineyp2415#defineleft0 x4b#defineright0 x4b#defineup0 x48#definedn0

4、 x50#defineindexreg10 x3e/*vga圖形控制器索引存放器*/#definevalreg10 x3f/*vga圖形控制器數(shù)據(jù)存放器*/#defineindexreg20 x34/*vga定序器索引存放器*/#definevalreg20 x35/*vga定序器數(shù)據(jù)存放器*/#definevgabase0 xa0000000l/*vga640*48016色形式起始地址*/vidsavein(har*,int,int,int,int,int,int);vidladin(har*,int,int,int,int,int,int,int);vidsrll_x(int,int,in

5、t,int,int);vidsrll_y(int,int,int,int,int)2、功能函數(shù)/*文件名:funtin.pp*/#inludestdi.h#inludestdlib.h#inludeni.h#inludesrll.h/*制作遨游圖時存入窗口函數(shù),fnae存放遨游圖文件;(xleft,ytp)在屏幕上窗口左上角坐標(biāo);(xright,ybutt)在屏幕上窗口左上角坐標(biāo);nuber圖號(0-nxynxy-1)nxynxy*nxy拼圖*/vidsavein(har*fnae,intxleft,intytp,intxright,intybutt,intnuber,intnxy)file*

6、fp;inti,idth,height;registerj,k;lngtep,ffset,ffset1;harfar*base;idth=(xright-xleft+1)/8;height=ybutt-ytp+1;fp=fpen(fnae,rb+);ffset=(lng)(nuber-nuber%nxy)*(lng)idth*(lng)height;ffset1=ffset;fr(i=0;i4;i+)utprtb(indexreg1,4);utprtb(valreg1,i);base=(harfar)*vgabase+(lng)(ytp*80)+(lng)(xleft/8);ffset=(ln

7、g)(i*nxy*nxy)*(lng)idth*(lng)height+(lng)(nuber%nxy)*(lng)idth+ffset1;fr(j=0;jheight;j+)fseek(fp,ffset,seek_set);frite(base,1,idth,fp);ffset=ffset+(lng)(nxy*idth);base=base+80l;flse(fp);utprtb(indexreg1,0);/*向屏幕裝入遨游圖窗口函數(shù),(x0,y0)裝入屏幕起始坐標(biāo);fnae存放遨游圖文件名;(xleft,ytp)在fnae中虛擬窗口左上角坐標(biāo);(xright,ybutt)在fnae中虛擬窗

8、口右下角坐標(biāo);nxynxy*nxy拼圖*/vidladin(har*fnae,intx,inty0,intxleft,intytp,intxright,intybutt,intnxy)file*fp;registerintj,i,n=8,idth,height;harfar*base,*vbase;registerlngffset;fp=fpen(fnae,rb);idth=(xright-xleft+1)/8;height=ybutt-ytp+1;fr(i=3;i0;i-)utprtb(indexreg1,5);utprtb(valreg1,0);utprtb(indexreg2,2);ut

9、prtb(valreg2,n);base=(harfar*)vgabase+(lng)y080l+(lng)(x0/8);ffset=(lng)(i*nxy*nxy)*(lng)(yp2-yp1+1)*(lng)(xp2-xp1+1)/8)+(lng)(xleft/8)+(lng)(ytp*nxy)*(lng)(xp2-xp1+1)/8);fr(j=0;jheight;j+)fseek(fp,ffset,seek_set);fread(base,1,idth,fp);ffset=ffset+(lng)nxy*(lng)(xp2-xp1+1)/8);base=base+80l;n=n/2;fls

10、e(fp);utprtb(valreg2,xff);utprtb(indexreg2,xf);utprtb(indexreg1,0);/*y-方向遨游函數(shù)(xleft,ytp,xright,ybutt)定義遨游窗口;dy向上遨游(以象素為單位);dy向下遨游(以象素為單位)*/vidsrll-y(intxleft,intytp,intxright,intybutt,intdy)intidth,height,tep;registeri,j;harfar*base,far*tbase;lngffset,tffset;utprtb(indexerg1,5);utprtb(valreg1,1);idt

11、h=(xright-xleft+1)/8;height=ybutt-ytp+1;if(dy0)base=(harfar*)vgabase+(lng)(ytp*80)+(lng)(xleft/8);tbase=base;tffset=(lng)dy*80l;tep=height+dy;/*henvetupdy0*/fr(i=0;itep;i+)fr(j=0;jidth;j+)*base=*(base-tffset);base+;tbase=tbase+80l;base=tbase;elsebase=(harfar*)vgabase+(lng)(ybutt*80)+(lng)(xleft/8);t

12、base=base;tffset=(lng)dy*80l;tep=height-dy;/*dy0*/fr(i=0;itep;i+)fr(j=0;jidth;j+)*base=*(base-tffset);base+;tbase=tbase-80l;base=tbase;utprtb(indexreg1,0);/*x-方向遨游函數(shù)(xleft,ytp,xright,ybutt)定義遨游窗口;dx0向左遨游(以8個象素為單位);dx0向右遨游(以8個象素為單位)*/vidsrll-x(intxleft,intytp,intxright,intybutt,intdx)intidth,height,t

13、ep;registeri,j;harfar*base,far*tbase;lngffset;utprtb(indexreg1,5);utprtb(valreg1,1);idth=(xright-xleft+1)/8;height=ybutt-ytp+1;if(dx0)base=(harfar*)vgabase+(lng)(ytp*80)+(lng)(xleft/8);tbase=base;tep=idth+dx;/*henvetleftdx0*/fr(i=0;iheight;i+)fr(j=0;jtep;j+)*base=*(base-dx);base+;tbase=tbase+80l;bas

14、e=tbase;elsebase=(harfar*)vgabase+(lng)(ytp*80)+(lng)(xright-7)/8;tbase=base;tep=idth-dx;/*dx0*/fr(i=0;iheight;i+)fr(j=0;jtep;j+)*base=*(base-dx);base-;tbase=tbase+80l;base=tbase;utprtb(indexreg1,0);四、例如例如ex1.pp中,首先在虛擬的大幅遨游圖上畫一個貫穿整個遨游圖的“,然后按22圖幅存入z.sr文件。在例如ex2.pp中,通過方向鍵控制圖像遨游。程序1ex1.pp#inludestdi.h#

15、inludestdlib.h#inludeni.h#inludeds.h#inludegraphi.h#inludesrll.hvikdain(vid)file*fp;harh;harfar*ptr;intx1,y1,x2,y1;intgdriver=detet,gde;initgraph(gdriver,*gde,);setlr(red);line(xp1,yp1,xp2,yp2);savein(z.sr,xp1,yp1,xp2,yp2,1,2);leardevie();line(xp1,yp1,xp2,yp2);savein(z.sr,xp1,yp1,xp2,yp2,4,2);learde

16、vie();line(xp2,yp1,xp1,yp2);savein(z.sr,xp1,yp1,xp2,yp2,2,2);leardevie();line(xp2,yp1,xp1,yp2);savein(z.sr,xp1,yp1,xp2,yp2,3,2);lsegraph();程序2ex2.pp#inludestdi.h#inludestdlib.h#inludeni.h#inludeds.h#inludegraphi.h#inludesrll.hintdx=0,dy=0;vidain(vid)file*fp;harh;harfar*ptr;intgdriver=detet,gde;initg

17、raph(gdriver,*gde,);/*將存貯在z.sr中對應(yīng)的左上角的局部圖像裝入屏幕窗口*/ladin(z.sr,xp1,yp1,0,0,xp2-xp1,yp2-yp1,2);/*以下循環(huán)利用方向鍵控制圖像遨游,“q鍵退出*/dh=geth();if(h=0)h=geth();if(h=q|h=q)break;sith(h)asedn:/*向下滾動64行*/if(dy0)dy-;srll-y(xp1,yp1,xp2,yp2,64);ladin(z.sr,xp1,yp1,64*dx,64*dy,xp2-xp1+64*dx,64*(dy+1)-1,2)break;aseup:/*向上滾動64行*/if(dy(yp2-yp1+1)/64)srll-y(xp1,yp1,xp2,yp2,-64);ladin(z.sr,xp1,yp2-63,64*dx,yp2-yp1+1+64*dy,xp2-xp1+64*dx,yp2-yp1+64*(dy+1),2);dy+;break;ase

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論