高級(jí)編程技術(shù)的實(shí)現(xiàn)整

上傳人:xiao****1972 文檔編號(hào):248189651 上傳時(shí)間:2024-10-22 格式:PPT 頁(yè)數(shù):150 大?。?73.50KB
收藏 版權(quán)申訴 舉報(bào) 下載
高級(jí)編程技術(shù)的實(shí)現(xiàn)整_第1頁(yè)
第1頁(yè) / 共150頁(yè)
高級(jí)編程技術(shù)的實(shí)現(xiàn)整_第2頁(yè)
第2頁(yè) / 共150頁(yè)
高級(jí)編程技術(shù)的實(shí)現(xiàn)整_第3頁(yè)
第3頁(yè) / 共150頁(yè)

下載文檔到電腦,查找使用更方便

14.9 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《高級(jí)編程技術(shù)的實(shí)現(xiàn)整》由會(huì)員分享,可在線閱讀,更多相關(guān)《高級(jí)編程技術(shù)的實(shí)現(xiàn)整(150頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級(jí),第三級(jí),第四級(jí),第五級(jí),*,單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級(jí),第三級(jí),第四級(jí),第五級(jí),*,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),主要內(nèi)容,操作手段,顯示方式,圖形繪制技術(shù),圖像技術(shù),動(dòng)畫技術(shù),發(fā)聲技術(shù),漢字顯示技術(shù),精確的時(shí)間控制技術(shù),1,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),操作手段:鍵盤,在鍵盤內(nèi)有一個(gè)微處理器,用來(lái)掃描和檢測(cè)每個(gè)鍵的按下和抬起狀態(tài),然后以程序中斷(,INT 9H,),的方式與主機(jī)通信,向主機(jī)傳送一個(gè)字節(jié)的按鍵,掃描碼,。接著,ROM,中,BIOS,內(nèi)的鍵盤中斷處理程序,將按鍵掃描碼翻譯成對(duì)應(yīng)的,AS

2、CII,碼,或,擴(kuò)充的,ASCII,碼,,存放在,AX,寄存器中。,它不是,ASCII,碼;其06位標(biāo)識(shí)了每個(gè)鍵在鍵盤上的位置,最高位為0對(duì)應(yīng)該鍵是被按下;1對(duì)應(yīng)松開;它并不能區(qū)別大小寫字母,而且一些特殊鍵不產(chǎn)生掃描碼直接引起中斷調(diào)用,鍵名,AH,AL,字符鍵,ASCII,碼,ASCII,碼,功能鍵/組合鍵,擴(kuò)充碼的,ASCII,碼,0,原理,2,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),操作手段:鍵盤,方法,方法一:直接使用聲明在,bios.h,中的庫(kù)函數(shù),bioskey(),;,方法二:通過(guò)庫(kù)函數(shù),int86(),,調(diào)用,BIOS,的,INT 16H、,功能,號(hào)為0的中斷。它將按鍵的掃描碼存放在,A

3、H,寄存器,中;,方法三:簡(jiǎn)單地利用,聲明在,conio.h,中的庫(kù),函數(shù),kbhit(),。,3,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),操作手段:鍵盤,方法一,int bioskey(int cmd),;/*,參數(shù),cmd,用來(lái)確定函數(shù)如何操作*/,cmd=0,bioskey(),返回按健的鍵值,該值是2個(gè)字節(jié)的整型數(shù)。,若沒有鍵按下,則該函數(shù)一直等待,,直到有鍵按下。當(dāng)按下時(shí),若返回值的低8位為非零,則表示為普通鍵,其值代表該鍵的,ASCII,碼。若返回值的低8位為0,則高8位表示為擴(kuò)展的,ASCII,碼,表示按下的是特殊功能鍵,4,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),操作手段:鍵盤,方法一,int

4、 bioskey(int cmd),;/*,參數(shù),cmd,用來(lái)確定函數(shù)如何操作*/,cmd=1,bioskey(),查詢是否有鍵按下。若返回非0值,則表示有鍵按下,若為0表示沒鍵按下。,5,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),操作手段:鍵盤,方法一,int bioskey(int cmd),;/*,參數(shù),cmd,用來(lái)確定函數(shù)如何操作*/,cmd=2,bioskey(),將返回一些控制鍵是否被按過(guò),按過(guò)的狀態(tài)由該函數(shù)返回的低8位的各位值來(lái)表示:,字節(jié)位 對(duì)應(yīng)的16進(jìn)制數(shù)含義,0 0,x01,右邊的,shift,鍵被按下,1 0,x02,左邊的,shift,鍵被按下,2 0,x04Ctrl,鍵被按下,

5、3 0,x08 Alt,鍵被按下,4 0,x10 Scroll Lock,已打開,5 0,x20Num Lock,已打開,6 0,x40Caps Lock,已打開,7 0,x80 Insert,已打開,6,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),操作手段:鍵盤,方法二,/*,讀鍵函數(shù),返回掃描碼,*/,int getKeySCode(),union REGS rg;,rg.h.ah=0;,int86(0x16,return rg.h.ah;,7,鍵盤掃描碼表見課程主頁(yè),第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),操作手段:鍵盤,方法三,int kbhit(void);,若按了鍵盤,該函數(shù)返回值,1,,否則返回值,

6、0,。,8,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),操作手段:鼠標(biāo),DOS,操作系統(tǒng)和,Turbo C 2.0,并不支持鼠標(biāo)器的操作。要操縱鼠標(biāo)器,首先必須安裝相應(yīng)的鼠標(biāo)驅(qū)動(dòng)程序。鼠標(biāo)驅(qū)動(dòng)程序由生產(chǎn)鼠標(biāo)的廠家提供,它提供了許多鼠標(biāo)操作的功能。這些功能可以通過(guò),INT 33H,鼠標(biāo)中斷調(diào)用來(lái)使用。,原理,9,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),操作手段:鼠標(biāo)常用功能,/*,顯示鼠標(biāo)器光標(biāo),*/,void cursorOn(),union REGS r,;,struct SREGS s,;,1,; /*,1,號(hào)鼠標(biāo)器功能:顯示鼠標(biāo)光標(biāo),*/,msvisible,TRUE,;,int86x(0x33,,,&r,

7、,,&r,,,&s),;,10,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),/*,關(guān)閉鼠標(biāo)器光標(biāo),*/,void cursorOff(),union REGS r,;,struct SREGS s,;,2,; /*,2,號(hào)鼠標(biāo)器功能,:,不顯示鼠標(biāo)光標(biāo),*/,msvisible,FALSE,;,int86x(0x33,,,&r,,,&r,,,&s),;,操作手段:鼠標(biāo)常用功能,11,第,3,章 高級(jí)編程技術(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.

8、ax=,4,; /*,4,號(hào)鼠標(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(0x33,,,&r,,,&r,,,mousex=x;,mousey=y;,操作手段:鼠標(biāo)常用功能,12,第,3,章 高級(jí)編程技術(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,號(hào)鼠標(biāo)器功能:取按鈕狀態(tài)和鼠標(biāo)位置,*/,int86x(0x33,,,&r1,,,r2,

9、,,&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)器按健狀態(tài),*/,操作手段:鼠標(biāo)常用功能,13,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),/*,等待鼠標(biāo)器的某種狀態(tài),*/,void wait(int i),do ,mouseread();, while(mousekey=i);,操作手段:鼠標(biāo)常用功能,14,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),主要內(nèi)容,操作手段,顯示方式,圖形繪制技術(shù),圖像技術(shù),動(dòng)畫技術(shù),發(fā)聲技術(shù),漢字顯示技術(shù),精確的時(shí)間控制技術(shù),15,第,3

10、,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:顯示系統(tǒng),顯卡,在計(jì)算機(jī)主機(jī)和顯示器之間起到了信息轉(zhuǎn)換和視頻發(fā)送作用,,必須與,顯示器,配套。不同種類的顯卡支持的顯示模式種類不同,而且同一顯卡一般可以支持多種顯示模式。一種,顯示模式,指定了相應(yīng)顯示器的工作方式、分辨率和顏色數(shù)目。,顯 卡,16,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:顯示系統(tǒng),常見顯卡及其模式,17,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:顯示系統(tǒng),顯示器工作方式,顯示器有兩種工作方式,即文本顯示方式和圖形顯示方式,它們的主要差別是顯示存儲(chǔ)器,(,VRAM),中存的信息不同。,文本方式,時(shí),,VRAM,存放要顯示字符的,ASCII,碼

11、,用它作為地址,取出字符發(fā)生器,ROM,中存放的相應(yīng)字符的圖像變成視頻信號(hào)在顯示器屏幕上進(jìn)行顯示。,圖形方式,時(shí),則要顯示的圖形的圖像直接存在,VRAM,中,,VRAM,中某地址單元存放的數(shù)就表示了相應(yīng)屏幕上某行和列上的像素及顏色。,18,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:,也稱作字符顯示方式,是,Turbo C,確省的顯示方式。文本方式屏幕的最大分辨單位是單個(gè)字符,字符顯示的位置用行和列坐標(biāo)來(lái)表示。,文本方式,19,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:文本方式方式設(shè)定,Turbo C,支持的幾種文本顯示方式可以用下面的,函數(shù),來(lái)設(shè)置,:,void textmode(int ne

12、wmode),;,。,20,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:文本方式顏色設(shè)置,void textbackground(int color),;,/*,設(shè)置字符背景顏色,*/,void textcolor(int color); /*,設(shè)置字符顏色*/,void textattr(int attr),;/*,可同時(shí)設(shè)置文本的字符和背景顏色*/,顏色函數(shù),21,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:文本方式窗口設(shè)置,Turbo C,確省定義的文本窗口為整個(gè)屏幕。用戶可以通過(guò)函數(shù):,void window(int left, int top, int right, int bottom

13、),;,定義屏幕上的一個(gè)矩形域作為,窗口,。參數(shù)(,left,,,top,),是窗口左上角所在的屏幕坐標(biāo),(,right,,,bottom,),是窗口的右下角所在的屏幕坐標(biāo)。窗口定義之后,用有關(guān)窗口的輸入輸出函數(shù)就可以只在此窗口內(nèi)進(jìn)行操作而不超出窗口的邊界。另外,一個(gè)屏幕可以定義多個(gè)窗口,但現(xiàn)行窗口只能有一個(gè)。,22,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:文本方式窗口操作,窗口內(nèi)文本輸出函數(shù):,int cprintf(char *format,,,表達(dá)式表,),;,int cputs(char *str),;,int putch(int ch);,/*這三個(gè)函數(shù)受窗口的控制,窗口內(nèi)顯示光標(biāo)

14、的位置就是它們開始輸出的位置。當(dāng)輸出行超過(guò)窗口右邊界或輸出到窗口底部邊界時(shí),會(huì)自動(dòng)轉(zhuǎn)到窗口內(nèi)的下一行輸出或自動(dòng)上卷窗口內(nèi)的內(nèi)容繼續(xù)輸出*/,光標(biāo)操作函數(shù):,void gotoxy(int x, int y); /*,把光標(biāo)移到窗口(,x,y),處*/,23,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:文本方式屏幕操作,清屏函數(shù):,void clrscr(void); /*,清除窗口文本,光標(biāo)移到(1,1)*/,void clreol(void); /*,清除窗口從光標(biāo)位置開始到本行,結(jié)尾的所有字符,但光標(biāo)不變 */,void delline(void); /*,刪除當(dāng)前窗口的當(dāng)前行*/,24,第

15、,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:文本方式屏幕操作,屏幕文本移動(dòng)函數(shù):,void movetext(int x1, int y1, int x2, int y2, int x3, int y3);,屏幕文本存取函數(shù),void gettext(int x1, int y1, int x2, int y2, void *buffer);,void puttext(int x1, int y1, int x2, int y2, void *buffer);,25,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:文本方式,編制一個(gè)程序,將屏幕垂直平分成兩個(gè)窗口,左邊窗口為藍(lán)色背景,白色前景,右邊窗口為

16、綠色背景,紅色前景。兩個(gè)窗口都設(shè)計(jì)為文本輸入,即在窗口中可以輸入文字,在窗口屏幕中顯示出來(lái)。使用,tab,鍵在左右兩個(gè)窗口中切換,每個(gè)窗口都有光標(biāo),活動(dòng)窗口光標(biāo)進(jìn)行閃爍。,應(yīng)用實(shí)例,問(wèn)題描述,26,第,3,章 高級(jí)編程技術(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è)置。用,tab,鍵,進(jìn)行兩個(gè)窗口間的循環(huán)切換,在每次切換前先調(diào)用,gettext

17、 (int left, int top, int right, int bottom, void * buf),函數(shù)把當(dāng)前矩形窗口上的字符拷貝到由,buf,所指向的內(nèi)存中,在切換到另一個(gè)窗口后調(diào)用,puttext (int left, int top, int right, int bottom, void * buf),把先前存儲(chǔ)在該窗口,buf,所指向的內(nèi)存中的字符拷貝到當(dāng)前窗口中,并用,gotoxy (int x, int y),把光標(biāo)移到原先所在位置,因此可以接著先前的文本繼續(xù)編輯。,應(yīng)用實(shí)例,設(shè)計(jì)思想,27,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:文本方式,應(yīng)用實(shí)例,程序運(yùn)行截圖,

18、28,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:,圖形方式,圖形顯示方式可以滿足在屏幕上作圖的要求。在此方式下,屏幕顯示的單位是像素。屏幕顯示的像素大小(分辨率)可以通過(guò)設(shè)置不同的顯示方式來(lái)改變。像素在屏幕上的位置可由其所在的,x,,,y,坐標(biāo)來(lái)決定。此時(shí),屏幕的坐標(biāo)系統(tǒng)就象一個(gè)倒置的直角坐標(biāo)系。,29,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:圖形方式方式設(shè)定,圖形系統(tǒng)的初始化:,用什么類型的顯卡的驅(qū)動(dòng)程序,采用什么模式的圖形方式,適配器驅(qū)動(dòng)程序的尋找路徑名。,注意:所用系統(tǒng)的卡一定要支持所選用的顯示模式,否則將出錯(cuò)。,30,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:圖形方式方式設(shè)定,圖形系

19、統(tǒng)的初始化函數(shù):,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,;,31,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:圖形方式方式設(shè)定,圖形系統(tǒng)的初始化函數(shù):,void far initgraph(int far *pdriver,,,int far *pm

20、ode,,,char far *ppath_for_driver),;,32,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:圖形方式方式設(shè)定,圖形系統(tǒng)檢測(cè)函數(shù),:,void far detectgraph(int far *pdriver,int far *pmode);,完成對(duì)適配器的檢查并得到顯示器類型號(hào)和相應(yīng)的最高分辨率模式,將,graphdriver,設(shè)成,DETECT,,,initgraph(),將調(diào)用,detectgraph(),自動(dòng)檢測(cè)所用顯卡類型,并將相應(yīng)的驅(qū)動(dòng)程序裝入,并將其最高的顯示模式作為當(dāng)前顯示模式。,int graphdriver=DETECT,graphmode,;,i

21、nitgraph(,33,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:圖形方式方式設(shè)定,清屏函數(shù):,畫圖前一般需清除屏幕,使得屏幕如同一張白紙,以畫最新最美的圖畫。,void far cleardevice(void),;,圖形系統(tǒng)的關(guān)閉:,當(dāng)畫圖結(jié)束時(shí)可以通過(guò)調(diào)用關(guān)閉圖形系統(tǒng)的函數(shù):,void far closegraph(void),;,使顯示器恢復(fù)到調(diào)用,initgraph(),函數(shù)之前的文本方式。,34,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:圖形方式顏色設(shè)置,前景色設(shè)置函數(shù):,void far setcolor(int color);,背景色設(shè)置函數(shù):,void far setbkc

22、olor(int color);,35,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:圖形方式顏色設(shè)置,前景色設(shè)置函數(shù):,void far setcolor(int color);,背景色設(shè)置函數(shù):,void far setbkcolor(int color);,36,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:圖形方式顏色設(shè)置,CGA,前景色的取值:,37,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:圖形方式顏色設(shè)置,CGA,背景色的取值:,38,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:圖形方式顏色設(shè)置,EGA/VGA,調(diào)色板:,setcolor(color),時(shí),color,的取值;,0,號(hào)索引

23、位置的顏色總是和背景色相同,;,16個(gè)索引號(hào)意味著同時(shí)最多可顯示16種不同的顏色,64/256色選一,39,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:圖形方式顏色設(shè)置,EGA/VGA,調(diào)色板:,整體設(shè)置:,void far setallpalette(struct palettetype far *palette);,#,define MAXCOLORS l5,struct palattetype ,unsigned char size;,signed char colorsMAXCOLORS+1;,;,單色設(shè)置:,voidfar setpalette(int index, int actua

24、l_color);,40,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:圖形方式顏色設(shè)置,EGA/VGA,標(biāo)準(zhǔn)色:,41,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:圖形方式圖視口,設(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,則超出圖視口的圖形部分仍將顯示出來(lái);否則,超出圖視口的部分將被切除而不顯示。,清除函數(shù):,void far clearviewp

25、ort(void),42,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:圖形方式文本輸出,當(dāng)前位置文本輸出函數(shù):,void far outtext(char far *textstring);,定位文本輸出函數(shù):,void far outtextxy(int x,int y,char far *textstring);,文本輸出字符串函數(shù),int sprintf(char *string, char *format, argument, );,43,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:圖形方式文本輸出,文本輸出位置函數(shù):,void far settextjustify(int horiz,,

26、,int vert);,44,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),顯示方式:圖形方式文本輸出,定義文本字型函數(shù):,void far settextstyle(int font,int direction,int char size);,45,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),#,include ,main(),int i,graphdriver,graphmode,size,page;,char s30;,graphdriver=DETECT;,initgraph(,cleardevice();,settextstyle(DEFAULT_FONT,HORIZ_DIR,2);,settextjusti

27、fy(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)用實(shí)例,程序源代碼,settextstyle(SMALL_FONT,HORIZ_DIR, 2);,settextjustify(LEFT_TEXT,0);,outtextxy(220,80,Smallfont);,settextstyle(SANS_SERIF_FONT,HORIZ_DIR,2);

28、,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();,顯示方式:圖形方式文本輸出,46,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),應(yīng)用實(shí)例,程序輸出,顯示方式:圖形方式文本輸出,47,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),主要內(nèi)容,操作手段,顯示方式,圖形繪制技術(shù),動(dòng)畫技術(shù),發(fā)聲技術(shù),漢字

29、顯示技術(shù),圖像技術(shù),精確的時(shí)間控制技術(shù),48,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖形繪制,void far moveto(int x,int y);,移動(dòng)畫筆到指定的(,x,y),位置,移動(dòng)過(guò)程不畫。,void far moverel(int dx,int dy);,畫筆從現(xiàn)行位置(,x,y),處移到一位置增量處(,x+dx,y+dx),,移動(dòng)過(guò)程不畫:,int far getx(void);,得到當(dāng)前畫筆的,x,位置,int far gety(void);,得到當(dāng)前畫筆的,y,位置,:畫筆定位,49,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖形繪制,畫點(diǎn)函數(shù):,void far putpixel(in

30、t x,,,int y,,,int color);,該函數(shù)表示在指定的,x,,,y,位置畫一點(diǎn),點(diǎn)的顯示顏色由設(shè)置的,color,值決定。,int far getpixel(int x,,,int y),;,該函數(shù)與,putpixel(),相對(duì)應(yīng),它得到在(,x,y),點(diǎn)位置上的像素的顏色值,:點(diǎn)和線,50,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖形繪制: 點(diǎn)和線,畫線函數(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,,,i

31、nt 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,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),線類型的設(shè)置:,在確省的情況下,畫線函數(shù)畫出的線都是一個(gè)像素點(diǎn)寬的細(xì)實(shí)線。也可以在畫線之前通過(guò)函數(shù):,void far setlinestyle(int linestyle,,,unsigned upattern,,,int thickness),;,定義線的類型和粗細(xì)。,setlinestyle(4,,,0xF3D0,,,1

32、),設(shè)置的線型,圖形繪制: 點(diǎn)和線,52,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),BIOS,的10,H,中斷負(fù)責(zé)顯示器服務(wù),該中斷的主要功能通過(guò)對(duì),AH,來(lái)設(shè)置:,AH=00H,,功能為設(shè)置顯示方式。此時(shí)通過(guò)對(duì),AL,進(jìn)行設(shè)置來(lái)設(shè)定顯示方式,如設(shè)置,AL=13H,,則顯示方式設(shè)置為,VGA,的,256,色320200圖形顯示模式。,AH=0CH,,功能為畫點(diǎn)。這時(shí),AL,中設(shè)置的值為顏色號(hào),,CX,和,DX,的值決定畫點(diǎn)的位置坐標(biāo)。,圖形繪制: 點(diǎn)和線,利用,BIOS,調(diào)用,53,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),#include,#include,int main(),int i,j;,union R

33、EGS inreg,outreg;,inreg.h.ah=0; /*,置屏幕顯示方式,*/,inreg.h.al=0x13;,/*,定義,VGA256,色320200圖形模式 */,int86(0x10, /*,調(diào)用中斷0,x10*/,for (i=0;i256;i+),for(j=0;j200;j+),inreg.h.ah=0x0c;/*,寫點(diǎn),*/,應(yīng)用實(shí)例,在屏幕上畫出顏色不同的,256,條直線的,程序源代碼,inreg.h.al=i; /*,置顏色號(hào),*/,inreg.h.ch=0; /*,決定畫點(diǎn)位置,*/,inreg.h.cl=i;,inreg.h.dh=0;,inreg.h.dl

34、=j;,int86(0x10,getch();,inreg.h.ah=0;,inreg.h.al=2; /*,返回到文本方式,*/,int86(0x10,圖形繪制: 點(diǎn)和線 ,利用,BIOS,調(diào)用,54,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖形繪制,:,矩形、圓和弧線,畫矩形的函數(shù):,void far rectangle(int xl,,,int y1,,,int x2,,,int y2),;,畫橢圓、圓和扇形圖函數(shù):,void ellipse(int x,,,int y,,,int stangle,,,int endangel,,,int xradius,,,int yradius),;,voi

35、d far circle(int x,,,int y,,,int radius),;,void far arc(int x,,,int y,,,int stangle,,,int endangle,,,int radius),;,55,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),編寫程序,使用鼠標(biāo)進(jìn)行如下操作:按住鼠標(biāo)器的任意鍵并移動(dòng),十字光標(biāo)將隨鼠標(biāo)而移動(dòng),根據(jù)按鍵的不同采用不同的形狀來(lái)畫出相應(yīng)的移動(dòng)軌跡:當(dāng)僅按下左鍵時(shí)用圓圈;僅按下右鍵時(shí)用矩形;其它按鍵情況用線條。,應(yīng)用實(shí)例,問(wèn)題描述,圖形繪制,56,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),結(jié)合鼠標(biāo)使用方法和上述的圖形繪制函數(shù)來(lái)解決問(wèn)題。由于在,Window

36、s2000/XP,下不支持,INT 33,的1號(hào)顯示鼠標(biāo)光標(biāo)功能,可以用畫線函數(shù),line(),畫出一個(gè)十字形光標(biāo)。光標(biāo)的移動(dòng)是通過(guò)將原位置光標(biāo)用背景色再畫而使其消失,然后在新位置處重新畫一個(gè)光標(biāo),從而實(shí)現(xiàn)光標(biāo)移動(dòng)的動(dòng)感。,應(yīng)用實(shí)例,設(shè)計(jì)思想,圖形繪制,57,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),應(yīng)用實(shí)例,程序運(yùn)行截圖,圖形繪制,58,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖形繪制:,封閉圖形的填色,填充設(shè)置函數(shù),:,void far setfillstyle(int pattern,,,int color),;,該函數(shù)將用設(shè)定的,color,顏色和,pattern,圖模式對(duì)后面畫出的輪廓圖進(jìn)行填充,這些

37、圖輪廓是由待定函數(shù)畫出的。,59,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖形繪制:,封閉圖形的填色,填充設(shè)置函數(shù),:,void far setfillstyle(int pattern,,,int color),60,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖形繪制:,封閉圖形的填色,用戶自定義填充函數(shù),:,void far setfillpattern(char upattefn,,,int color),;,該函數(shù)設(shè)置用戶自定義可填充模式,以,color,指出的顏色對(duì)封閉圖形進(jìn)行填充。參數(shù),upattern,是一個(gè)指向8個(gè)字節(jié)存儲(chǔ)區(qū)的指針,這8個(gè)字節(jié)表示了一個(gè)88像素點(diǎn)陣組成的填充圖模,它是由用戶自定義

38、的,用來(lái)對(duì)封閉圖形填充。8個(gè)字節(jié)的圖模是這樣形成的:每個(gè)字節(jié)代表一行,而每個(gè)字節(jié)的每一個(gè)二進(jìn)制位代表該行的對(duì)應(yīng)列上的像素。是1,則用,color,顯示,是0則不顯示。,61,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖形繪制:,封閉圖形的填色,得到目前的填充模式和顏色的函數(shù),:,void far fillsettings(struct fillsettingstype far *fillinfo);,void far getfillpattern(char *upattern);,62,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖形繪制:,封閉圖形的填色,可填充的基本圖形函數(shù):,(,這些函數(shù)繪制的圖形,將根據(jù)事先

39、用,setfillstyle,函數(shù)設(shè)置的填充模式和顏色,或按缺省方式進(jìn)行填充,),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

40、xradius,,,int yradius),;,void far fillellipse(int x,int y,int xradius,int yradius);,void far fillpoly(int numpoints,int far polypoints);,63,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖形繪制:,封閉圖形的填色,可對(duì)任意封閉圖形填充的函數(shù),:,void far floodfill(int x,,,int y,,,int border),;,該函數(shù)將對(duì)任一封閉圖形進(jìn)行填充,其顏色和模式將由設(shè)定的或缺省的圖模與顏色決定。其中參數(shù),(,x,,,y),為封閉圖形中的任一點(diǎn),,

41、border,是封閉圖形的邊框顏色。編程時(shí)該函數(shù)位于畫封閉圖形(即要填充的圖形)的代碼之后。,64,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),#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);,f

42、loodfill(50,50,14); /*,用綠色填充矩形框,*/,rectangle(20,20,540,380);,setfillstyle(1,13);,floodfill(2l,300,14); /*,用淡洋紅色填充矩形框,*/,setcolor(BLACK);,應(yīng)用實(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

43、,120);,settextstyle(2,0,9);,floodfill(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,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),應(yīng)用實(shí)例,程序輸出,圖形繪制,66,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),主要內(nèi)容,操作手段,顯示方式,圖形繪

44、制技術(shù),圖像技術(shù),動(dòng)畫技術(shù),發(fā)聲技術(shù),漢字顯示技術(shù),精確的時(shí)間控制技術(shù),67,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖像技術(shù):圖像的二種來(lái)源,(1)屏幕圖像,:,在圖形方式下所繪圖形形成的像素點(diǎn)圖像,。,圖像數(shù)據(jù)直接存儲(chǔ)在,VRAM,中,,VRAM,中某地址單元存放的數(shù)就表示了相應(yīng)屏幕上某行和列上的像素及其顏色值 。,(2)圖像文件,:,圖像數(shù)據(jù)以一定的格式存儲(chǔ)在文件中。需要有專門的軟件來(lái)支持,或自己編寫程序來(lái)讀取、顯示和生成某種格式的圖像文件。首先必須要了解某種圖像文件的格式。,68,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖像技術(shù):屏幕圖像與,VRAM,直接寫屏,:,在圖形方式下將圖像數(shù)據(jù)直接寫入,VR

45、AM,的過(guò)程,即圖像顯示過(guò)程。直接寫屏是最快的圖像顯示方法。,69,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖像技術(shù):,VRAM,與系統(tǒng)存儲(chǔ)器的對(duì)應(yīng)關(guān)系,CGA,的,VRAM,對(duì)應(yīng)的內(nèi)存地址開始于,B8000H,VGA、EGA,的開始于,A0000H。,對(duì),CGA,VRAM,僅有16,K,字節(jié);對(duì),VGA,和,EGA,VRAM,可達(dá)256,K,字節(jié),它分成獨(dú)立的4個(gè)64,K,字節(jié)部分,這樣的每個(gè)部分稱為一個(gè)位面或頁(yè)面(編號(hào)0-3),它們共同占有一塊內(nèi)存空間,即用同一的64,K,個(gè)地址。相應(yīng)內(nèi)存的每個(gè)地址實(shí)際上代表,VRAM4,個(gè)位面上相并列的4個(gè)字節(jié)。,對(duì)于,SVGA,,由于它要存取更高分辨率或更多顏

46、色的數(shù)據(jù),一般都至少擁有512,K,以上的,VRAM,,但其所占用的內(nèi)存地址仍大都是64,K,,因此也需要?jiǎng)澐衷S多頁(yè)面,對(duì)應(yīng)到,A0000H,或其它的視頻內(nèi)存地址上。,70,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖像技術(shù):屏幕圖像的允許讀寫過(guò)程,允許讀的過(guò)程是:首先通過(guò)索引寄存器(接口地址為0,x3ce),選擇讀位面選擇寄存器(其索引號(hào)為4),然后通過(guò)讀位面選擇寄存器(接口地址0,x3cf),選擇位面號(hào)。相應(yīng)的代碼為:,outportb(0x3ce, 4); /*,將索引號(hào)4送索引寄存器,選擇讀位面選擇寄存器*,/,outportb(0x3cf, n); /*,將選擇的位面號(hào),n,送讀位面選擇寄存器

47、,允許該位面可讀*/,71,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖像技術(shù):屏幕圖像的讀寫過(guò)程,允許寫的過(guò)程是:首先通過(guò)索引寄存器(接口地址為0,x3c4),選擇位面寫允許寄存器(索引號(hào)為2),然后通過(guò)接口地址0,x3c5,選擇位面號(hào)。相應(yīng)的代碼為:,outportb(0x3c4, 2); /*,將索引號(hào)2送索引寄存器,選擇位面寫允許寄存器*/,outportb(0x3c5, k); /*,送位面號(hào)至位面寫允許寄存器,允許該位面可寫*/,72,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖像技術(shù):屏幕圖像數(shù)據(jù)在,VRAM,中存放格式,CGA,的4色,320200的模式,,視頻內(nèi)存起始地址,B0000H。,屏幕上

48、顯示的像素點(diǎn)從左到右,從上到下依次存在,VRAM,從0號(hào)地址開始的連續(xù)地址中,每個(gè)像素占2位,,VRAM,每個(gè)字節(jié)存放四個(gè)像素點(diǎn)。,特殊的地方,:,屏幕上顯示的偶行像素存在16,KVRAM,的上半部,而奇行存在下半部。從系統(tǒng)地址看,上半部開始于,B800:0000,,下半部開始于,B800:1000。,73,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖像技術(shù):屏幕圖像數(shù)據(jù)在,VRAM,中存放格式,VGA,視頻內(nèi)存起始地址,A0000H,,在16色,640480,模式下采用位面對(duì)應(yīng)方式,視頻內(nèi)存地址上每一個(gè)字節(jié)代表8個(gè)像素,每一位又可對(duì)應(yīng)到位面中同樣位置的4位上(4位的組合表示16色之一,因此又稱位面為顏

49、色位面),。,在屏幕上繪出一個(gè)點(diǎn)時(shí),就必須將數(shù)據(jù)分別存放到四個(gè)位面中對(duì)應(yīng)的位上,。,74,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖像技術(shù):屏幕圖像數(shù)據(jù)在,VRAM,中存放格式,在256色320200模式下采用的是線性對(duì)應(yīng)的方法(,SVGA,的所有256色和真彩都是用這種方法)。,線性對(duì)應(yīng)將屏幕上每一點(diǎn)與視頻內(nèi)存地址按順序一一對(duì)應(yīng)起來(lái),一個(gè)點(diǎn)對(duì)應(yīng)一個(gè)字節(jié),這樣做的好處是:這種對(duì)應(yīng)方式比位面對(duì)應(yīng)方式簡(jiǎn)單多了,因?yàn)橹恍柚苯訉?duì)視頻內(nèi)存地址做存取即可,而不必理會(huì)位面與內(nèi)存地址的對(duì)應(yīng)關(guān)系。,75,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖像技術(shù):屏幕圖像的操作,函數(shù)名,含義,unsigned far imagesize

50、(int x1,,,int y1,,,int x2,,,int y2),;,測(cè)定圖像所占字節(jié)數(shù),void far getimage(int x1,,,int y1,,,int x2,,,int y2,,,void far *bitmap),;,屏幕圖像存儲(chǔ),void far putimage(int x1,,,int y1,,,void far *bitmap,,,int op),;,顯示所存屏幕圖像,屏幕圖像的存儲(chǔ)和顯示操作函數(shù),76,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖像技術(shù):圖像像素與背景像素的邏輯操作,表3-13 操作規(guī)定值及操作,符號(hào)名,值,含義,COPY_PUT,0,存儲(chǔ)圖像進(jìn)行覆蓋

51、,XOR_PUT,1,對(duì)應(yīng)像素點(diǎn)進(jìn)行異或操作,OR_PUT,2,對(duì)應(yīng)像素點(diǎn)進(jìn)行或操作,AND_PUT,3,對(duì)應(yīng)像素點(diǎn)進(jìn)行與操作,NOT_PUT,4,存儲(chǔ)圖像取反后進(jìn)行覆蓋,77,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖像技術(shù):,屏幕圖像操作實(shí)例,繪制滿屏的,16,色圓和長(zhǎng)方形,并將屏幕圖像保存到文件,pic.dat,中。然后將保存在文件,pic.dat,的屏幕圖像重新顯示在,VGA,屏幕上。,應(yīng)用實(shí)例,問(wèn)題描述,78,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖像技術(shù):,屏幕圖像操作實(shí)例,應(yīng)用實(shí)例,注意事項(xiàng),VGA,的,VRAM,起始地址為,A0000H,,開始單元的地址為,0xA000:0x0000,。,存

52、取對(duì)應(yīng)屏幕圖像,VRAM,中的信息時(shí),其開始地址指針定義為:,ptr=(charfar*)0xa0000000L;,由于程序?qū)@示模式設(shè)置為,VGAHI,模式,分辨率是,640480,,,16,色,每個(gè)像素由每個(gè)位面上的,1,位組成,即一個(gè)字節(jié)代表,8,個(gè)像素,故對(duì)應(yīng)的內(nèi)存地址是從,A0000H,開始的,38400,個(gè)字節(jié)地址。,由于系統(tǒng)初始化時(shí),讀位面選擇寄存器設(shè)置為位面,0,,程序最后應(yīng)恢復(fù)原系統(tǒng)初始化設(shè)置。,79,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖像技術(shù):,屏幕圖像操作實(shí)例,應(yīng)用實(shí)例,源程序,/*,保存屏幕圖像,*,/,void save_pic(char *fname),FILE *f

53、p;,int i;,long j;,char far *ptr;,fp=fopen(fname,wb);,for (i=0;i4; i+),outportb(0x3ce, 4);,/*,選擇讀位面選擇寄存器*,/,outportb(0x3cf, i);,/*,允許位面,i,可讀*,/,ptr=(char far*)0xa0000000L;,/*VGA,的,VRAM,指針*,/,for (j=0;j38400L;j+),fputc(*ptr, fp);,ptr+;,fclose(fp);,outport(0x3cf,0);,80,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖像技術(shù):,屏幕圖像操作實(shí)例,應(yīng)用

54、實(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(0x3c4, 2);,/*,選擇位面寫允許寄存器*,/,outportb(0x3c5, k);,/*,選擇位面號(hào)*,/,ptr=(char far*)0xa0000000L;,/*VGA,的,VRAM,指針*,/,for (j=0;j38400L;j+),/*,讀滿屏信息字節(jié)數(shù)*,/,*ptr=fgetc(fp);,/*

55、,從文件中將圖像信息字節(jié)寫到,VRAM,中*,/,ptr+;,/*,字節(jié)地址加,1*/,k=k*2;,fclose(fp);,getch();,outport(0x3c5,0xf);,/*,恢復(fù)位面允許寫寄存器的缺省值*,/,81,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖像技術(shù):圖像文件,圖像文件由文件頭和圖像數(shù)據(jù)組成。,文件頭的內(nèi)容一般包括文件類型、文件制作者、制作時(shí)間、版本號(hào)、文件大小和壓縮方式等。,常,見的圖像格式有,BMP,、,JPEG,、,GIF,、,TIFF,等,。,82,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖像技術(shù):,BMP,圖像文件,BMP,文件由,4,個(gè)部分組成:文件頭、信息頭、彩色表

56、和圖像數(shù)據(jù),文件頭包含有關(guān)于文件類型、文件大小、存放位置等信息,信息頭包含關(guān)于這幅圖像的信息,如以像素為單位的圖像的寬度和高度。,彩色表記錄圖像顏色的,RGB,值,83,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖像技術(shù):,BMP,圖像文件,圖像的每一掃描行由表示圖像像素的連續(xù)的字節(jié)組成,每一行的字節(jié)數(shù)取決于圖像的顏色數(shù)目和用像素表示的圖像寬度。,通常掃描行是由底向上存儲(chǔ)的,就是說(shuō),陣列中的第一個(gè)字節(jié)表示位圖左下角的像素,而最后一個(gè)字節(jié)表示位圖右上角的像素。,每一掃描行的字節(jié)數(shù)必需是,4,的整倍數(shù),也就是,DWORD,對(duì)齊的。,84,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖像技術(shù):,BMP,圖像文件,說(shuō)明:,

57、并不是所有的,BMP,文件都有彩色表。,若有彩色表,如,8,位,256,色的,BMP,圖像,其圖像數(shù)據(jù)的每一字節(jié)代表一個(gè)像素,但是它的值是彩色表的一個(gè)索引而不是該像素的,RGB,值;,若沒有彩色表,如,16,位高彩色或,24,位真彩色文件,像素值直接表示,RGB,值。,85,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖像技術(shù):,BMP,圖像文件的格式,偏移量,域的名稱,大小,內(nèi)容,圖,像,文,件,頭,0000h,文件標(biāo)識(shí),2 bytes,識(shí)別,BMP,圖像的類型:,0002h,File Size,1 dword,用字節(jié)表示的整個(gè)文件的大小,0006h,Reserved,1 dword,保留,必須設(shè)置為,

58、0,000Ah,Bitmap Data Offset,1 dword,從文件開始到圖像數(shù)據(jù)開始之間的數(shù)據(jù)之間的偏移量,000Eh,Bitmap Header Size,1 dword,信息頭,(Bitmap Info Header),的長(zhǎng)度,用來(lái)描述圖像的顏色、壓縮方法等。,0012h,Width,1 dword,圖像的寬度,以像素為單位,0016h,Height,1 dword,圖像的高度,以像素為單位,001Ah,Planes,1 word,圖像的位面數(shù)(注:該值將總是,1,),86,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖像技術(shù):,BMP,圖像文件的格式,偏移量,域的名稱,大小,內(nèi)容,圖像,信

59、息,頭,001Ch,Bits Per Pixel,1 word,每個(gè)像素的位數(shù):,1 -,單色圖像,4 - 16,色圖像,,8 - 256,色圖像 ,,16 - 16bit,高彩色圖像 ,,24 - 24bit,真彩色圖像 ,,32 - 32bit,增強(qiáng)型真彩色圖像,001Eh,Compression,1 dword,壓縮說(shuō)明:,0 -,不壓縮,0022h,Bitmap Data Size,1 dword,用字節(jié)數(shù)表示的位圖數(shù)據(jù)的大小。該數(shù)必須是,4,的倍數(shù),0026h,HResolution,1 dword,用像素,/,米表示的水平分辨率,002Ah,VResolution,1 dword,

60、用像素,/,米表示的垂直分辨率,002Eh,Colors,1 dword,圖像使用的顏色數(shù)。如,8-,比特,/,像素表示為,100h,或者,256.,0032h,Important Colors,1 dword,指定重要的顏色數(shù)。當(dāng)該域的值等于顏色數(shù)時(shí)(或者等于,0,時(shí)),表示所有顏色都一樣重要,87,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖像技術(shù):,BMP,圖像文件的格式,偏移量,域的名稱,大小,內(nèi)容,調(diào)色板數(shù)據(jù),根據(jù),BMP,版本的不同而不同,Palette,N * 4 byte,調(diào)色板規(guī)范。對(duì)于調(diào)色板中的每個(gè)表項(xiàng),這,4,個(gè)字節(jié)用下述方法來(lái)描述,RGB,的值:每字節(jié)分別表示藍(lán),綠,紅,填充符(

61、設(shè)置為)。,圖像數(shù)據(jù),根據(jù),BMP,版本及調(diào)色板尺寸的不同而不同,Bitmap Data,xxx bytes,該域的大小取決于壓縮方法及圖像的尺寸和圖像的位深度,它包含所有的圖像數(shù)據(jù)字節(jié),這些數(shù)據(jù)可能是彩色調(diào)色板的索引號(hào),也可能是實(shí)際的,RGB,值,這將根據(jù)圖像信息頭中的位深度值來(lái)決定。,88,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖像技術(shù):,BMP,圖像的顯示,Turbo C,提供的,BGI,圖形接口的局限:,只支持,VGA,及以前的各種圖形顯示模式;,調(diào)色板顏色為標(biāo)準(zhǔn)的,難以改變;,顯示的分辨率及色彩數(shù)有限。,通過(guò)對(duì)顯卡的,VRAM,直接進(jìn)行訪問(wèn)來(lái)突破上述局限,89,第,3,章 高級(jí)編程技術(shù)的實(shí)

62、現(xiàn),圖像技術(shù):,BMP,圖像的顯示,目前常用的圖形顯示模式集中在,256,色上,主要包括,VGA320200,模式,SVGA,高精度的,640480,、,800600,和,1024768,模式。,同樣,可以利用,BIOS,設(shè)置高精度的,SVGA,圖形顯示模式。,SVGA,利用,VESA,標(biāo)準(zhǔn),就可以實(shí)現(xiàn)直接寫屏(,WindowsXP,采用了,VESA,標(biāo)準(zhǔn)),90,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖像技術(shù):,BMP,圖像的顯示,VESA,圖形標(biāo)準(zhǔn)(在圖形模式下):,SVGA,的,VRAM,是順序的鏈結(jié)構(gòu),且圖像數(shù)據(jù)是按行順序存放的。一個(gè)像素用一個(gè)字節(jié),(256,色,),表示。,VRAM,按字節(jié)連續(xù)尋址,與主機(jī)內(nèi)存采用分頁(yè)映射方式通訊,一次只能讀寫,64KB,的,VRAM,,通過(guò)改變段偏移量,(I/O,操作,),來(lái)尋址不同的段。,91,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖像技術(shù):,SVGA,模式顯示,BMP,圖像實(shí)例,以,256,色,640480 SVGA,模式顯示,BMP,圖像。,應(yīng)用實(shí)例,問(wèn)題描述,92,第,3,章 高級(jí)編程技術(shù)的實(shí)現(xiàn),圖像技術(shù):,SV

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

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!