



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn) 主要內(nèi)容主要內(nèi)容操作手段顯示方式圖形繪制技術(shù)圖像技術(shù)動畫技術(shù)發(fā)聲技術(shù)漢字顯示技術(shù)精確的時(shí)間控制技術(shù) 1第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)操作手段:鍵盤操作手段:鍵盤在鍵盤內(nèi)有一個(gè)微處理器,用來掃描和檢測每個(gè)鍵的按下和抬起狀態(tài),然后以程序中斷(INT 9H)的方式與主機(jī)通信,向主機(jī)傳送一個(gè)字節(jié)的按鍵掃描碼。接著ROM中BIOS內(nèi)的鍵盤中斷處理程序,將按鍵掃描碼翻譯成對應(yīng)的ASCII碼或擴(kuò)充的ASCII碼,存放在AX寄存器中。 它不是它不是ASCIIASCII碼;其碼;其0606位標(biāo)識位標(biāo)識了每個(gè)鍵在鍵盤上的位置,最了每個(gè)鍵
2、在鍵盤上的位置,最高位為高位為0 0對應(yīng)該鍵是被按下;對應(yīng)該鍵是被按下;1 1對應(yīng)松開;它并不能區(qū)別大小對應(yīng)松開;它并不能區(qū)別大小寫字母,而且一些特殊鍵不產(chǎn)寫字母,而且一些特殊鍵不產(chǎn)生掃描碼直接引起中斷調(diào)用生掃描碼直接引起中斷調(diào)用 鍵名AHAL字符鍵ASCII碼ASCII碼功能鍵/組合鍵擴(kuò)充碼的ASCII碼0原理原理2第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)操作手段:鍵盤操作手段:鍵盤方法方法方法一:直接使用聲明在bios.h中的庫函數(shù)bioskey();方法二:通過庫函數(shù)int86(),調(diào)用BIOS的INT 16H、功能 號為0的中斷。它將按鍵的掃描碼存放在AH寄存器 中;方法三
3、:簡單地利用聲明在conio.h中的庫函數(shù)kbhit()。3第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)操作手段:鍵盤操作手段:鍵盤方法一方法一int bioskey(int cmd)int bioskey(int cmd);/ /* *參數(shù)cmd用來確定函數(shù)如何操作*/cmd=0bioskey()返回按健的鍵值,該值是2個(gè)字節(jié)的整型數(shù)。若沒有鍵按下,則該函數(shù)一直等待若沒有鍵按下,則該函數(shù)一直等待,直到有鍵按下。當(dāng)按下時(shí),若返回值的低8位為非零,則表示為普通鍵,其值代表該鍵的ASCII碼。若返回值的低8位為0,則高8位表示為擴(kuò)展的ASCII碼,表示按下的是特殊功能鍵4第第3 3章章 高
4、級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)操作手段:鍵盤操作手段:鍵盤方法一方法一int bioskey(int cmd)int bioskey(int cmd);/ /* *參數(shù)cmd用來確定函數(shù)如何操作*/cmd=1bioskey()查詢是否有鍵按下。若返回非0值,則表示有鍵按下,若為0表示沒鍵按下。5第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)操作手段:鍵盤操作手段:鍵盤方法一方法一int bioskey(int cmd)int bioskey(int cmd);/ /* *參數(shù)cmd用來確定函數(shù)如何操作*/cmd=2bioskey()將返回一些控制鍵是否被按過,按過的狀態(tài)由該函數(shù)返回的
5、低8位的各位值來表示: 字節(jié)位 對應(yīng)的16進(jìn)制數(shù)含義 0 0 x01右邊的shift鍵被按下 1 0 x02 左邊的shift鍵被按下 2 0 x04Ctrl鍵被按下 3 0 x08 Alt鍵被按下 4 0 x10 Scroll Lock已打開 5 0 x20Num Lock已打開 6 0 x40Caps Lock已打開 7 0 x80 Insert已打開6第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)操作手段:鍵盤操作手段:鍵盤方法二方法二/* 讀鍵函數(shù),返回掃描碼 */int getKeySCode()union REGS rg; rg.h.ah=0;int86(0 x16,&
6、;rg,&rg);return rg.h.ah; 7鍵盤掃描碼表見課程主頁鍵盤掃描碼表見課程主頁第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)操作手段:鍵盤操作手段:鍵盤方法三方法三int kbhit(void); 若按了鍵盤,該函數(shù)返回值1,否則返回值0。 8第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)操作手段:鼠標(biāo)操作手段:鼠標(biāo)DOS操作系統(tǒng)和Turbo C 2.0并不支持鼠標(biāo)器的操作。要操縱鼠標(biāo)器,首先必須安裝相應(yīng)的鼠標(biāo)驅(qū)動程序。鼠標(biāo)驅(qū)動程序由生產(chǎn)鼠標(biāo)的廠家提供,它提供了許多鼠標(biāo)操作的功能。這些功能可以通過INT 33H鼠標(biāo)中斷調(diào)用來使用。原理原理9第第3 3章章
7、高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)操作手段:鼠標(biāo)操作手段:鼠標(biāo)常用功能常用功能/*顯示鼠標(biāo)器光標(biāo)*/void cursorOn() union REGS r; struct SREGS s; r.x.ax1; /* 1號鼠標(biāo)器功能:顯示鼠標(biāo)光標(biāo) */ msvisibleTRUE; int86x(0 x33,&r,&r,&s); 10第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)/*關(guān)閉鼠標(biāo)器光標(biāo)*/void cursorOff() union REGS r; struct SREGS s; r.x.ax2; /* 2號鼠標(biāo)器功能 :不顯示鼠標(biāo)光標(biāo) */ msvi
8、sibleFALSE; int86x(0 x33,&r,&r,&s); 操作手段:鼠標(biāo)操作手段:鼠標(biāo)常用功能常用功能11第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)/*設(shè)定鼠標(biāo)光標(biāo)的初始位置*/void cursorXY(unsigned int x, unsigned int y) union REGS r; struct SREG s; r.x.ax=4; /* 4號鼠標(biāo)器功能:設(shè)置鼠標(biāo)光標(biāo)位置 */ r.x.cx=x; /* 設(shè)定光標(biāo)x坐標(biāo) */ r.x.dx=y; /* 設(shè)定光標(biāo)y坐標(biāo) */ int86x(0 x33,&r,&r,&
9、;s); mousex=x; mousey=y; 操作手段:鼠標(biāo)操作手段:鼠標(biāo)常用功能常用功能12第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)/*報(bào)告鼠標(biāo)器當(dāng)前光標(biāo)位置和當(dāng)前按鍵狀態(tài)*/void mouseRead() union REGS rl,r2; struct SREGS s; r1.x.ax=3; /* 3號鼠標(biāo)器功能:取按鈕狀態(tài)和鼠標(biāo)位置 */ int86x(0 x33,&r1,r2,&s); mousex=r2.x.cx;/*鼠標(biāo)器光標(biāo)x方向坐標(biāo)*/ mousey=r2.x.dx;/*鼠標(biāo)器光標(biāo)y方向坐標(biāo)*/ mousekey=r2.x.bx; /*鼠標(biāo)器
10、按健狀態(tài)*/ 操作手段:鼠標(biāo)操作手段:鼠標(biāo)常用功能常用功能13第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)/*等待鼠標(biāo)器的某種狀態(tài)*/void wait(int i) do mouseread(); while(mousekey=i); 操作手段:鼠標(biāo)操作手段:鼠標(biāo)常用功能常用功能14第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)主要內(nèi)容主要內(nèi)容操作手段顯示方式圖形繪制技術(shù)圖像技術(shù)動畫技術(shù)發(fā)聲技術(shù)漢字顯示技術(shù)精確的時(shí)間控制技術(shù) 15第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:顯示系統(tǒng)顯示方式:顯示系統(tǒng)顯卡在計(jì)算機(jī)主機(jī)和顯示器之間起到了信息轉(zhuǎn)換和視頻發(fā)送作用,必須
11、與顯示器配套。不同種類的顯卡支持的顯示模式種類不同,而且同一顯卡一般可以支持多種顯示模式。一種顯示模式指定了相應(yīng)顯示器的工作方式、分辨率和顏色數(shù)目。 顯顯 卡卡16第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:顯示系統(tǒng)顯示方式:顯示系統(tǒng) 常見顯卡及其模式常見顯卡及其模式17第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:顯示系統(tǒng)顯示方式:顯示系統(tǒng) 顯示器工作方式顯示器工作方式顯示器有兩種工作方式,即文本顯示方式和圖形顯示方式,它們的主要差別是顯示存儲器(VRAM)中存的信息不同。文本方式時(shí),VRAM存放要顯示字符的ASCII碼,用它作為地址,取出字符發(fā)生器ROM中
12、存放的相應(yīng)字符的圖像變成視頻信號在顯示器屏幕上進(jìn)行顯示。圖形方式時(shí),則要顯示的圖形的圖像直接存在VRAM中,VRAM中某地址單元存放的數(shù)就表示了相應(yīng)屏幕上某行和列上的像素及顏色。 18第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:顯示方式:也稱作字符顯示方式,是Turbo C確省的顯示方式。文本方式屏幕的最大分辨單位是單個(gè)字符,字符顯示的位置用行和列坐標(biāo)來表示。文本方式文本方式19第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:文本方式顯示方式:文本方式方式設(shè)定方式設(shè)定Turbo C支持的幾種文本顯示方式可以用下面的函數(shù)來設(shè)置: void textmode(int
13、 newmode);。 20第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:文本方式顯示方式:文本方式顏色設(shè)置顏色設(shè)置void textbackground(int color);/*設(shè)置字符背景顏色*/void textcolor(int color); /*設(shè)置字符顏色*/void textattr(int attr);/ /* *可同時(shí)設(shè)置文本的字符和背景顏色*/ 顏色函數(shù)顏色函數(shù)21第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:文本方式顯示方式:文本方式窗口設(shè)置窗口設(shè)置Turbo C確省定義的文本窗口為整個(gè)屏幕。用戶可以通過函數(shù): void window(
14、int left, int top, int right, int bottom);定義屏幕上的一個(gè)矩形域作為窗口窗口。參數(shù)(left,top)是窗口左上角所在的屏幕坐標(biāo),(right,bottom)是窗口的右下角所在的屏幕坐標(biāo)。窗口定義之后,用有關(guān)窗口的輸入輸出函數(shù)就可以只在此窗口內(nèi)進(jìn)行操作而不超出窗口的邊界。另外,一個(gè)屏幕可以定義多個(gè)窗口,但現(xiàn)行窗口只能有一個(gè)。 22第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:文本方式顯示方式:文本方式窗口操作窗口操作窗口內(nèi)文本輸出函數(shù):窗口內(nèi)文本輸出函數(shù): int cprintf(char *format,表達(dá)式表表達(dá)式表); int
15、cputs(char *str); int putch(int ch);/*這三個(gè)函數(shù)受窗口的控制,窗口內(nèi)顯示光標(biāo)的位置就是它們開始輸出的位置。當(dāng)輸出行超過窗口右邊界或輸出到窗口底部邊界時(shí),會自動轉(zhuǎn)到窗口內(nèi)的下一行輸出或自動上卷窗口內(nèi)的內(nèi)容繼續(xù)輸出*/光標(biāo)操作函數(shù):光標(biāo)操作函數(shù): void gotoxy(int x, int y); /*把光標(biāo)移到窗口把光標(biāo)移到窗口(x,y)處處*/23第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:文本方式顯示方式:文本方式屏幕操作屏幕操作 清屏函數(shù):清屏函數(shù): void clrscr(void); /*清除窗口文本,光標(biāo)移到清除窗口文本,光標(biāo)
16、移到(1,1)*/ void clreol(void); /*清除窗口從光標(biāo)位置開始到本行清除窗口從光標(biāo)位置開始到本行 結(jié)尾的所有字符,但光標(biāo)不變結(jié)尾的所有字符,但光標(biāo)不變 */ void delline(void); /*刪除當(dāng)前窗口的當(dāng)前行刪除當(dāng)前窗口的當(dāng)前行*/24第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:文本方式顯示方式:文本方式屏幕操作屏幕操作 屏幕文本移動函數(shù):屏幕文本移動函數(shù): void movetext(int x1, int y1, int x2, int y2, int x3, int y3);屏幕文本存取函數(shù)屏幕文本存取函數(shù)void gettext(i
17、nt x1, int y1, int x2, int y2, void *buffer);void puttext(int x1, int y1, int x2, int y2, void *buffer); 25第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:文本方式顯示方式:文本方式編制一個(gè)程序,將屏幕垂直平分成兩個(gè)窗口,左邊窗口為藍(lán)色背景,白色前景,右邊窗口為綠色背景,紅色前景。兩個(gè)窗口都設(shè)計(jì)為文本輸入,即在窗口中可以輸入文字,在窗口屏幕中顯示出來。使用tab鍵在左右兩個(gè)窗口中切換,每個(gè)窗口都有光標(biāo),活動窗口光標(biāo)進(jìn)行閃爍。 應(yīng)應(yīng)用用實(shí)實(shí)例例 問題描述問題描述26第第3 3章
18、章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:文本方式顯示方式:文本方式首先用文本窗口函數(shù)window (int x1, int y1, int x2, int y2)畫出兩個(gè)窗口,用textcolor (int color),textbackground (int color),clrscr (void)等進(jìn)行窗口屬性的設(shè)置。用tabtab鍵鍵進(jìn)行兩個(gè)窗口間的循環(huán)切換,在每次切換前先調(diào)用gettext (int left, int top, int right, int bottom, void * buf)函數(shù)把當(dāng)前矩形窗口上的字符拷貝到由buf所指向的內(nèi)存中,在切換到另一個(gè)窗口后調(diào)用
19、puttext (int left, int top, int right, int bottom, void * buf)把先前存儲在該窗口buf所指向的內(nèi)存中的字符拷貝到當(dāng)前窗口中,并用gotoxy (int x, int y)把光標(biāo)移到原先所在位置,因此可以接著先前的文本繼續(xù)編輯。 應(yīng)應(yīng)用用實(shí)實(shí)例例 設(shè)計(jì)思想設(shè)計(jì)思想27第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:文本方式顯示方式:文本方式應(yīng)應(yīng)用用實(shí)實(shí)例例 程序運(yùn)行截圖程序運(yùn)行截圖28第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:顯示方式:圖形方式圖形方式圖形顯示方式可以滿足在屏幕上作圖的要求。在此方式下
20、,屏幕顯示的單位是像素。屏幕顯示的像素大小(分辨率)可以通過設(shè)置不同的顯示方式來改變。像素在屏幕上的位置可由其所在的x,y坐標(biāo)來決定。此時(shí),屏幕的坐標(biāo)系統(tǒng)就象一個(gè)倒置的直角坐標(biāo)系。29第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:圖形方式顯示方式:圖形方式方式設(shè)定方式設(shè)定圖形系統(tǒng)的初始化:圖形系統(tǒng)的初始化:用什么類型的顯卡的驅(qū)動程序采用什么模式的圖形方式適配器驅(qū)動程序的尋找路徑名。注意:所用系統(tǒng)的卡一定要支持所選用的顯示模式,否則將出錯(cuò)。30第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:圖形方式顯示方式:圖形方式方式設(shè)定方式設(shè)定圖形系統(tǒng)的初始化函數(shù):圖形系統(tǒng)的初
21、始化函數(shù):void far initgraph(int far *pdriver,int far *pmode,char far *ppath_for_driver);enum graphics_driver DETECT,CGA,MCGA,EGA,EGA64,EGAMONO,IBM 8514,HERCMONO,ATT400,VGA,PC3270; 31第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:圖形方式顯示方式:圖形方式方式設(shè)定方式設(shè)定圖形系統(tǒng)的初始化函數(shù):圖形系統(tǒng)的初始化函數(shù):void far initgraph(int far *pdriver,int far *pmo
22、de,char far *ppath_for_driver);32第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:圖形方式顯示方式:圖形方式方式設(shè)定方式設(shè)定圖形系統(tǒng)檢測函數(shù)圖形系統(tǒng)檢測函數(shù) :void far detectgraph(int far *pdriver,int far *pmode);完成對適配器的檢查并得到顯示器類型號和相應(yīng)的最高分辨率模式 將graphdriver設(shè)成DETECT, initgraph()將調(diào)用detectgraph()自動檢測所用顯卡類型,并將相應(yīng)的驅(qū)動程序裝入,并將其最高的顯示模式作為當(dāng)前顯示模式。 int graphdriver=DETEC
23、T,graphmode;initgraph(&graphdriver,&graphmode,); 33第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:圖形方式顯示方式:圖形方式方式設(shè)定方式設(shè)定清屏函數(shù):清屏函數(shù):畫圖前一般需清除屏幕,使得屏幕如同一張白紙,以畫最新最美的圖畫。void far cleardevice(void); 圖形系統(tǒng)的關(guān)閉:圖形系統(tǒng)的關(guān)閉:當(dāng)畫圖結(jié)束時(shí)可以通過調(diào)用關(guān)閉圖形系統(tǒng)的函數(shù): void far closegraph(void); 使顯示器恢復(fù)到調(diào)用initgraph()函數(shù)之前的文本方式。34第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程
24、技術(shù)的實(shí)現(xiàn)顯示方式:圖形方式顯示方式:圖形方式顏色設(shè)置顏色設(shè)置前景色設(shè)置函數(shù):前景色設(shè)置函數(shù):void far setcolor(int color); 背景色設(shè)置函數(shù):背景色設(shè)置函數(shù):void far setbkcolor(int color);35第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:圖形方式顯示方式:圖形方式顏色設(shè)置顏色設(shè)置前景色設(shè)置函數(shù):前景色設(shè)置函數(shù):void far setcolor(int color); 背景色設(shè)置函數(shù):背景色設(shè)置函數(shù):void far setbkcolor(int color);36第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯
25、示方式:圖形方式顯示方式:圖形方式顏色設(shè)置顏色設(shè)置CGA前景色的取值:前景色的取值:37第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:圖形方式顯示方式:圖形方式顏色設(shè)置顏色設(shè)置CGA背景色的取值:背景色的取值:38第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:圖形方式顯示方式:圖形方式顏色設(shè)置顏色設(shè)置EGA/VGA調(diào)色板:調(diào)色板: setcolor(color)時(shí)color的取值; 0號索引位置的顏色總是和背景色相同 ;16個(gè)索引號意味著同時(shí)最多可顯示16種不同的顏色64/256色選一39第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:圖形方式顯示
26、方式:圖形方式顏色設(shè)置顏色設(shè)置EGA/VGA調(diào)色板:調(diào)色板:整體設(shè)置: void far setallpalette(struct palettetype far *palette);#define MAXCOLORS l5struct palattetype unsigned char size; signed char colorsMAXCOLORS+1;; 單色設(shè)置:單色設(shè)置:voidfar setpalette(int index, int actual_color); 40第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:圖形方式顯示方式:圖形方式顏色設(shè)置顏色設(shè)置EGA/
27、VGA標(biāo)準(zhǔn)色:標(biāo)準(zhǔn)色:41第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:圖形方式顯示方式:圖形方式圖視口圖視口設(shè)置函數(shù)設(shè)置函數(shù):void far setviewport(int xl,int y1,int x2,int y2, clipflag); 其中(x1,y1)為圖視口的左上角所在的原屏幕物理坐標(biāo),(x2,y2)為右下角所在的原屏幕物理坐標(biāo)。clipflag參數(shù)clipflag若為0,則超出圖視口的圖形部分仍將顯示出來;否則,超出圖視口的部分將被切除而不顯示。清除函數(shù):清除函數(shù):void far clearviewport(void)42第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)
28、高級編程技術(shù)的實(shí)現(xiàn)顯示方式:圖形方式顯示方式:圖形方式文本輸出文本輸出當(dāng)前位置文本輸出函數(shù):當(dāng)前位置文本輸出函數(shù): void far outtext(char far *textstring); 定位文本輸出函數(shù):定位文本輸出函數(shù): void far outtextxy(int x,int y,char far *textstring);文本輸出字符串函數(shù)文本輸出字符串函數(shù) int sprintf(char *string, char *format, argument, );43第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:圖形方式顯示方式:圖形方式文本輸出文本輸出 文本輸出
29、位置函數(shù):文本輸出位置函數(shù):void far settextjustify(int horiz,int vert); 44第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)顯示方式:圖形方式顯示方式:圖形方式文本輸出文本輸出 定義文本字型函數(shù):定義文本字型函數(shù): void far settextstyle(int font,int direction,int char size); 45第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)#include main() int i,graphdriver,graphmode,size,page; char s30; graphdriver=D
30、ETECT; initgraph(&graphdriver,&graphmode,); 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);應(yīng)應(yīng)用用實(shí)實(shí)例例 程序源代碼程序源代碼settextstyle(
31、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(); closegr
32、aph(); 顯示方式:圖形方式顯示方式:圖形方式文本輸出文本輸出46第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)應(yīng)應(yīng)用用實(shí)實(shí)例例 程序輸出程序輸出顯示方式:圖形方式顯示方式:圖形方式文本輸出文本輸出47 第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)主要內(nèi)容主要內(nèi)容操作手段顯示方式圖形繪制技術(shù)動畫技術(shù)發(fā)聲技術(shù)漢字顯示技術(shù)圖像技術(shù)精確的時(shí)間控制技術(shù) 48第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)圖形繪制圖形繪制void far moveto(int x,int y);移動畫筆到指定的(x,y)位置,移動過程不畫。void far moverel(int dx,int d
33、y);畫筆從現(xiàn)行位置(x,y)處移到一位置增量處(x+dx,y+dx),移動過程不畫:int far getx(void);得到當(dāng)前畫筆的x位置int far gety(void);得到當(dāng)前畫筆的y位置:畫筆定位:畫筆定位 49第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)圖形繪制圖形繪制 畫點(diǎn)函數(shù):畫點(diǎn)函數(shù): void far putpixel(int x,int y,int color);該函數(shù)表示在指定的x,y位置畫一點(diǎn),點(diǎn)的顯示顏色由設(shè)置的color值決定。 int far getpixel(int x,int y);該函數(shù)與putpixel()相對應(yīng),它得到在(x,y)點(diǎn)位置上
34、的像素的顏色值 :點(diǎn)和線:點(diǎn)和線 50第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)圖形繪制:圖形繪制: 點(diǎn)和線點(diǎn)和線 畫線函數(shù):畫線函數(shù):void far line(int x0,int y0,int x1,int y1);該函數(shù)從(x0,y0)點(diǎn)到(x1,y1)點(diǎn)畫一直線。void far lineto(int x,int y);該函數(shù)將從現(xiàn)行畫筆位置到(x,y)點(diǎn)畫一直線。void far linerel(int dx,int dy); 該函數(shù)將從現(xiàn)行畫筆位置(x,y)到位置增量處 (x+dx,y+dy)畫一直線。 51第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn) 線類型的
35、設(shè)置:線類型的設(shè)置:在確省的情況下,畫線函數(shù)畫出的線都是一個(gè)像素點(diǎn)寬的細(xì)實(shí)線。也可以在畫線之前通過函數(shù): void far setlinestyle(int linestyle,unsigned upattern,int thickness); 定義線的類型和粗細(xì)。 F 3 D 0setlinestyle(4,0 xF3D0,1)設(shè)置的線型設(shè)置的線型 圖形繪制:圖形繪制: 點(diǎn)和線點(diǎn)和線 52第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn) BIOS的10H中斷負(fù)責(zé)顯示器服務(wù),該中斷的主要功能通過對AH來設(shè)置: AH=00H,功能為設(shè)置顯示方式。此時(shí)通過對AL進(jìn)行設(shè)置來設(shè)定顯示方式,如設(shè)置A
36、L=13H,則顯示方式設(shè)置為VGA的256色320200圖形顯示模式。 AH=0CH,功能為畫點(diǎn)。這時(shí)AL中設(shè)置的值為顏色號,CX和DX的值決定畫點(diǎn)的位置坐標(biāo)。圖形繪制:圖形繪制: 點(diǎn)和線點(diǎn)和線 利用利用BIOS調(diào)用調(diào)用53第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)#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,&inreg,&ou
37、treg); /*調(diào)用中斷0 x10*/ for (i=0;i256;i+) for(j=0;j200;j+) inreg.h.ah=0 x0c;/*寫點(diǎn)*/ 應(yīng)應(yīng)用用實(shí)實(shí)例例在屏幕上畫出顏色不同的在屏幕上畫出顏色不同的256條直線的條直線的程序源代碼程序源代碼 inreg.h.al=i; /*置顏色號*/ inreg.h.ch=0; /*決定畫點(diǎn)位置*/ inreg.h.cl=i; inreg.h.dh=0; inreg.h.dl=j; int86(0 x10,&inreg,&outreg); getch(); inreg.h.ah=0; inreg.h.al=2; /*返回
38、到文本方式*/ int86(0 x10,&inreg,&outreg); 圖形繪制:圖形繪制: 點(diǎn)和線點(diǎn)和線 利用利用BIOS調(diào)調(diào)用用54第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)圖形繪制圖形繪制 :矩形、圓和弧線矩形、圓和弧線 畫矩形的函數(shù):畫矩形的函數(shù):void far rectangle(int xl,int y1,int x2,int y2); 畫橢圓、圓和扇形圖函數(shù):畫橢圓、圓和扇形圖函數(shù): void ellipse(int x,int y,int stangle,int endangel, int xradius,int yradius); void fa
39、r circle(int x,int y,int radius); void far arc(int x,int y,int stangle,int endangle, int radius);55第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)編寫程序,使用鼠標(biāo)進(jìn)行如下操作:按住鼠標(biāo)器的任意鍵并移動,十字光標(biāo)將隨鼠標(biāo)而移動,根據(jù)按鍵的不同采用不同的形狀來畫出相應(yīng)的移動軌跡:當(dāng)僅按下左鍵時(shí)用圓圈;僅按下右鍵時(shí)用矩形;其它按鍵情況用線條。 應(yīng)應(yīng)用用實(shí)實(shí)例例 問題描述問題描述圖形繪制圖形繪制56第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)結(jié)合鼠標(biāo)使用方法和上述的圖形繪制函數(shù)來解決問題。
40、由于在Windows2000/XP下不支持INT 33的1號顯示鼠標(biāo)光標(biāo)功能,可以用畫線函數(shù)line()畫出一個(gè)十字形光標(biāo)。光標(biāo)的移動是通過將原位置光標(biāo)用背景色再畫而使其消失,然后在新位置處重新畫一個(gè)光標(biāo),從而實(shí)現(xiàn)光標(biāo)移動的動感。 應(yīng)應(yīng)用用實(shí)實(shí)例例 設(shè)計(jì)思想設(shè)計(jì)思想圖形繪制圖形繪制57第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)應(yīng)應(yīng)用用實(shí)實(shí)例例 程序運(yùn)行截圖程序運(yùn)行截圖圖形繪制圖形繪制58第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)圖形繪制:圖形繪制:封閉圖形的填色封閉圖形的填色 填充設(shè)置函數(shù)填充設(shè)置函數(shù) :void far setfillstyle(int pattern,i
41、nt color);該函數(shù)將用設(shè)定的color顏色和pattern圖模式對后面畫出的輪廓圖進(jìn)行填充,這些圖輪廓是由待定函數(shù)畫出的。 59第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)圖形繪制:圖形繪制:封閉圖形的填色封閉圖形的填色 填充設(shè)置函數(shù)填充設(shè)置函數(shù) :void far setfillstyle(int pattern,int color)60第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)圖形繪制:圖形繪制:封閉圖形的填色封閉圖形的填色 用戶自定義填充函數(shù)用戶自定義填充函數(shù): void far setfillpattern(char upattefn,int color);該
42、函數(shù)設(shè)置用戶自定義可填充模式,以color指出的顏色對封閉圖形進(jìn)行填充。參數(shù)upattern是一個(gè)指向8個(gè)字節(jié)存儲區(qū)的指針,這8個(gè)字節(jié)表示了一個(gè)88像素點(diǎn)陣組成的填充圖模,它是由用戶自定義的,用來對封閉圖形填充。8個(gè)字節(jié)的圖模是這樣形成的:每個(gè)字節(jié)代表一行,而每個(gè)字節(jié)的每一個(gè)二進(jìn)制位代表該行的對應(yīng)列上的像素。是1,則用color顯示,是0則不顯示。 61第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)圖形繪制:圖形繪制:封閉圖形的填色封閉圖形的填色 得到目前的填充模式和顏色的函數(shù)得到目前的填充模式和顏色的函數(shù) : void far fillsettings(struct fillsetti
43、ngstype far *fillinfo); void far getfillpattern(char void far getfillpattern(char * *upattern)upattern); 62第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)圖形繪制:圖形繪制:封閉圖形的填色封閉圖形的填色 可填充的基本圖形函數(shù):可填充的基本圖形函數(shù): (這些函數(shù)繪制的圖形,將根據(jù)事先用setfillstyle函數(shù)設(shè)置的填充模式和顏色,或按缺省方式進(jìn)行填充 ) void bar(int x1,int y1,int x2,int y2); void far pieslice(int x,i
44、nt 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);63
45、第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)圖形繪制:圖形繪制:封閉圖形的填色封閉圖形的填色 可對任意封閉圖形填充的函數(shù)可對任意封閉圖形填充的函數(shù) : void far floodfill(int xvoid far floodfill(int x,int yint y,int border)int border); 該函數(shù)將對任一封閉圖形進(jìn)行填充,其顏色和模式將由設(shè)定的或缺省的圖模與顏色決定。其中參數(shù)(x,y)為封閉圖形中的任一點(diǎn),border是封閉圖形的邊框顏色。編程時(shí)該函數(shù)位于畫封閉圖形(即要填充的圖形)的代碼之后。 64第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)#in
46、clude main() int i, graphdriver,graphmode,size,page; char s30; graphdriver=DETECT; initgraph(&graphdriver,&graphmode,); cleardevice(); setbkcolor(BLUE); setviewport(40,40,600,440,1); /*開圖視口*/ setfillstyle(1,2); setcolor(YELLOW); rectangle(0,0,560,400); floodfill(50,50,14); /*用綠色填充矩形框*/ recta
47、ngle(20,20,540,380); setfillstyle(1,13); floodfill(2l,300,14); /*用淡洋紅色填充矩形框*/ setcolor(BLACK); 應(yīng)應(yīng)用用實(shí)實(shí)例例 程序源代碼程序源代碼 settextstyle(1,0,6); /*設(shè)置字形方向,尺寸*/ 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); floodfi
48、ll(21,100,14); /*用深藍(lán)色填充*/ sprintf(s,“Lets study Turbo C”); setcolor(YELLOW); outtextxy(60,40, s);/*用黃色顯示*/ setcolor(1); settextstyle(4,0,3); outtextxy(110,80,s); getch(); closegraph(); 圖形繪制圖形繪制65第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)應(yīng)應(yīng)用用實(shí)實(shí)例例 程序輸出程序輸出圖形繪制圖形繪制66 第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)主要內(nèi)容主要內(nèi)容操作手段顯示方式圖形繪制技術(shù)圖像技
49、術(shù)動畫技術(shù)發(fā)聲技術(shù)漢字顯示技術(shù)精確的時(shí)間控制技術(shù) 67第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)圖像技術(shù)圖像技術(shù):圖像的二種來源圖像的二種來源(1)屏幕圖像:在圖形方式下所繪圖形形成的像素點(diǎn)圖像 。圖像數(shù)據(jù)直接存儲在VRAM中,VRAM中某地址單元存放的數(shù)就表示了相應(yīng)屏幕上某行和列上的像素及其顏色值 。(2)圖像文件:圖像數(shù)據(jù)以一定的格式存儲在文件中。需要有專門的軟件來支持,或自己編寫程序來讀取、顯示和生成某種格式的圖像文件。首先必須要了解某種圖像文件的格式。68第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)圖像技術(shù):屏幕圖像與圖像技術(shù):屏幕圖像與VRAM直接寫屏:在圖形方式下
50、將圖像數(shù)據(jù)直接寫入VRAM的過程,即圖像顯示過程。直接寫屏是最快的圖像顯示方法。69第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)圖像技術(shù):圖像技術(shù):VRAM與系統(tǒng)存儲器的對應(yīng)關(guān)系與系統(tǒng)存儲器的對應(yīng)關(guān)系q CGA的VRAM對應(yīng)的內(nèi)存地址開始于B8000H,VGA、EGA的開始于A0000H。q對CGA,VRAM僅有16K字節(jié);對VGA和EGA,VRAM可達(dá)256K字節(jié),它分成獨(dú)立的4個(gè)64K字節(jié)部分,這樣的每個(gè)部分稱為一個(gè)位面或頁面(編號0-3),它們共同占有一塊內(nèi)存空間,即用同一的64K個(gè)地址。相應(yīng)內(nèi)存的每個(gè)地址實(shí)際上代表VRAM4個(gè)位面上相并列的4個(gè)字節(jié)。q 對于SVGA,由于它要存
51、取更高分辨率或更多顏色的數(shù)據(jù),一般都至少擁有512K以上的VRAM,但其所占用的內(nèi)存地址仍大都是64K,因此也需要劃分許多頁面,對應(yīng)到A0000H或其它的視頻內(nèi)存地址上。 70第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)圖像技術(shù):屏幕圖像的允許讀寫過程圖像技術(shù):屏幕圖像的允許讀寫過程q允許讀的過程是:首先通過索引寄存器(接口地址為0 x3ce)選擇讀位面選擇寄存器(其索引號為4),然后通過讀位面選擇寄存器(接口地址0 x3cf)選擇位面號。相應(yīng)的代碼為:outportb(0 x3ce, 4); /*將索引號4送索引寄存器,選擇讀位面選擇寄存器*/outportb(0 x3cf, n);
52、 /*將選擇的位面號n送讀位面選擇寄存器,允許該位面可讀*/71第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)圖像技術(shù):屏幕圖像的讀寫過程圖像技術(shù):屏幕圖像的讀寫過程q允許寫的過程是:首先通過索引寄存器(接口地址為0 x3c4)選擇位面寫允許寄存器(索引號為2),然后通過接口地址0 x3c5選擇位面號。相應(yīng)的代碼為:outportb(0 x3c4, 2); /*將索引號2送索引寄存器,選擇位面寫允許寄存器*/outportb(0 x3c5, k); /*送位面號至位面寫允許寄存器,允許該位面可寫*/72第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)圖像技術(shù):屏幕圖像數(shù)據(jù)在圖像技術(shù):
53、屏幕圖像數(shù)據(jù)在VRAM中存放格式中存放格式 qCGA的4色320200的模式,視頻內(nèi)存起始地址B0000H。屏幕上顯示的像素點(diǎn)從左到右,從上到下依次存在VRAM從0號地址開始的連續(xù)地址中,每個(gè)像素占2位,VRAM每個(gè)字節(jié)存放四個(gè)像素點(diǎn)。q特殊的地方:屏幕上顯示的偶行像素存在16KVRAM的上半部,而奇行存在下半部。從系統(tǒng)地址看,上半部開始于B800:0000,下半部開始于B800:1000。73第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)圖像技術(shù):屏幕圖像數(shù)據(jù)在圖像技術(shù):屏幕圖像數(shù)據(jù)在VRAM中存放格式中存放格式 qVGA視頻內(nèi)存起始地址A0000H,在16色640480模式下采用位面
54、對應(yīng)方式,視頻內(nèi)存地址上每一個(gè)字節(jié)代表8個(gè)像素,每一位又可對應(yīng)到位面中同樣位置的4位上(4位的組合表示16色之一,因此又稱位面為顏色位面)。q在屏幕上繪出一個(gè)點(diǎn)時(shí),就必須將數(shù)據(jù)分別存放到四個(gè)位面中對應(yīng)的位上。74第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)圖像技術(shù):屏幕圖像數(shù)據(jù)在圖像技術(shù):屏幕圖像數(shù)據(jù)在VRAM中存放格式中存放格式 q在256色320200模式下采用的是線性對應(yīng)的方法(SVGA的所有256色和真彩都是用這種方法)。q線性對應(yīng)將屏幕上每一點(diǎn)與視頻內(nèi)存地址按順序一一對應(yīng)起來,一個(gè)點(diǎn)對應(yīng)一個(gè)字節(jié),這樣做的好處是:這種對應(yīng)方式比位面對應(yīng)方式簡單多了,因?yàn)橹恍柚苯訉σ曨l內(nèi)存地址做
55、存取即可,而不必理會位面與內(nèi)存地址的對應(yīng)關(guān)系。 75第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)圖像技術(shù):屏幕圖像的操作圖像技術(shù):屏幕圖像的操作函數(shù)名 含義unsigned far imagesize(int x1,int y1,int x2,int y2);測定圖像所占字節(jié)數(shù)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);顯示所存屏幕圖像 屏幕圖像的存儲和顯示操作函數(shù)76第第3 3
56、章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)圖像技術(shù):圖像像素與背景像素的邏輯操作圖像技術(shù):圖像像素與背景像素的邏輯操作 表表3-13 3-13 操作規(guī)定值及操作操作規(guī)定值及操作符號名 值含義COPY_PUT0存儲圖像進(jìn)行覆蓋XOR_PUT1對應(yīng)像素點(diǎn)進(jìn)行異或操作OR_PUT2對應(yīng)像素點(diǎn)進(jìn)行或操作AND_PUT3對應(yīng)像素點(diǎn)進(jìn)行與操作NOT_PUT4存儲圖像取反后進(jìn)行覆蓋77第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)圖像技術(shù):圖像技術(shù):屏幕圖像操作實(shí)例繪制滿屏的16色圓和長方形,并將屏幕圖像保存到文件pic.dat中。然后將保存在文件pic.dat的屏幕圖像重新顯示在VGA屏幕上。 應(yīng)應(yīng)
57、用用實(shí)實(shí)例例 問題描述問題描述78第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)圖像技術(shù):圖像技術(shù):屏幕圖像操作實(shí)例應(yīng)應(yīng)用用實(shí)實(shí)例例注意事項(xiàng)注意事項(xiàng)1)VGA的VRAM起始地址為A0000H,開始單元的地址為0 xA000:0 x0000。 2)存取對應(yīng)屏幕圖像VRAM中的信息時(shí),其開始地址指針定義為:ptr=(charfar*)0 xa0000000L; 3)由于程序?qū)@示模式設(shè)置為VGAHI模式,分辨率是640480,16色,每個(gè)像素由每個(gè)位面上的1位組成,即一個(gè)字節(jié)代表8個(gè)像素,故對應(yīng)的內(nèi)存地址是從A0000H開始的38400個(gè)字節(jié)地址。4)由于系統(tǒng)初始化時(shí),讀位面選擇寄存器設(shè)置為
58、位面0,程序最后應(yīng)恢復(fù)原系統(tǒng)初始化設(shè)置。 79第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)圖像技術(shù):圖像技術(shù):屏幕圖像操作實(shí)例應(yīng)應(yīng)用用實(shí)實(shí)例例源程序源程序/*保存屏幕圖像*/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的VR
59、AM指針*/ for (j=0;j38400L;j+) fputc(*ptr, fp); ptr+; fclose(fp); outport(0 x3cf,0);80第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)圖像技術(shù):圖像技術(shù):屏幕圖像操作實(shí)例應(yīng)應(yīng)用用實(shí)實(shí)例例源程序源程序/*從文件載入圖像*/void load_pic(char *fname) FILE *fp; int i,k=1; long j; char far *ptr; fp=fopen(fname,rb); for (i=0;i4; i+) outportb(0 x3c4, 2); /*選擇位面寫允許寄存器*/ outp
60、ortb(0 x3c5, k); /*選擇位面號*/ ptr=(char far*)0 xa0000000L; /*VGA的VRAM指針*/ for (j=0;j38400L;j+) /*讀滿屏信息字節(jié)數(shù)*/ *ptr=fgetc(fp); /*從文件中將圖像信息字節(jié)寫到 VRAM中*/ptr+; /*字節(jié)地址加1*/ k=k*2; fclose(fp); getch(); outport(0 x3c5,0 xf); /*恢復(fù)位面允許寫寄存器的缺省值*/81第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)現(xiàn)圖像技術(shù):圖像文件圖像技術(shù):圖像文件q圖像文件由文件頭和圖像數(shù)據(jù)組成。q文件頭的內(nèi)容一般包括文件類型、文件制作者、制作時(shí)間、版本號、文件大小和壓縮方式等。q常見的圖像格式有BMP、JPEG、GIF、TIFF等。 82第第3 3章章 高級編程技術(shù)的實(shí)現(xiàn)高級編程技術(shù)的實(shí)
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智慧農(nóng)業(yè)與農(nóng)村電商技術(shù)創(chuàng)新考核試卷
- 職場溝通中的非言語信號解析考核試卷
- 薄膜在溫室大棚中的抗結(jié)露性能分析考核試卷
- 電子游戲全球化中的國際競爭與合作策略考核試卷
- 保健品市場品牌差異化策略與產(chǎn)品生命周期管理研究考核試卷
- 應(yīng)急心理疏導(dǎo)考核試卷
- 2025年中國LED扣燈數(shù)據(jù)監(jiān)測報(bào)告
- 2025年中國EVA數(shù)據(jù)監(jiān)測報(bào)告
- 2025年中國ABS鞋跟數(shù)據(jù)監(jiān)測報(bào)告
- 2025年中國2-氯-3-喹啉甲醛數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025年全國普通話水平測試題標(biāo)準(zhǔn)試卷(共三十五套)
- 2025年全國保密知識競賽經(jīng)典試題庫及答案(共270題)
- 2025年中醫(yī)治未病服務(wù)工作計(jì)劃及措施
- 資金入股公司合同范例
- 使用錯(cuò)誤評估報(bào)告(可用性工程)模版
- 高中生物必修知識點(diǎn)總結(jié)(人教版復(fù)習(xí)提綱)高考基礎(chǔ)
- 計(jì)量工程師招聘面試題與參考回答2024年
- TwinCAT 3 以FeedTable的形式實(shí)現(xiàn)NCI插補(bǔ)
- 小學(xué)小升初英語閱讀理解練習(xí)題及答案
- 盤扣式卸料平臺施工方案
- 2024年華陽新材料科技集團(tuán)限公司校園招聘500人高頻考題難、易錯(cuò)點(diǎn)模擬試題(共500題)附帶答案詳解
評論
0/150
提交評論