C作圖與圖形處理PPT課件_第1頁
C作圖與圖形處理PPT課件_第2頁
C作圖與圖形處理PPT課件_第3頁
C作圖與圖形處理PPT課件_第4頁
C作圖與圖形處理PPT課件_第5頁
已閱讀5頁,還剩38頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、2021-12-51 圖形系統(tǒng)的初始化及基本框架 圖形系統(tǒng)中的像素與坐標(biāo) 常用圖形函數(shù) 圖形方式下的文本輸出函數(shù) 屏幕操作函數(shù)及動畫基本知識 VRAM的讀寫第1頁/共43頁2021-12-52第一節(jié) 圖形系統(tǒng)的初始化及基本框架顯示器的工作方式:文本方式(默認(rèn)方式)以字符為單位顯示文本,一般一屏25行80列字符圖形方式 以像素為單位顯示圖形以上兩種顯示方式可以互相轉(zhuǎn)換第2頁/共43頁2021-12-53一、圖形方式的初始化要作圖,必須對顯卡初始化,使之工作在圖形方式: 初始化函數(shù): void initgraph(int* gdriver, int* gmode, char* driver_pat

2、h ) 該函數(shù)在 “” 中定義 第一個參數(shù)對應(yīng)顯示適配器的類型,目前絕大多數(shù)顯卡都是VGA顯卡 第二個參數(shù)對應(yīng)顯示方式(表12-1所示) 第三個參數(shù)用來指明顯卡驅(qū)動程序的位置,若在當(dāng)前目錄中,可寫為“”第3頁/共43頁初始化方法一:int main( ) int driver = VGA; /VGA其實是枚舉常量 int mode = VGAHI; /高分辨率,見p141表 initgraph(&driver, &mode, “D:TC”); return 0;若驅(qū)動程序在當(dāng)前目錄中,則可以寫成: initgraph(&driver, &mode, “”);20

3、21-12-54第4頁/共43頁 特別說明:作圖程序編譯、連接后,形成可執(zhí)行文件(.exe文件),此文件若拷貝到其他機(jī)器上運(yùn)行,必須保證顯示驅(qū)動程序在該機(jī)存在,且在指定目錄中。 若用:initgraph(&driver, &mode, “D:TC”); 則驅(qū)動程序應(yīng)在D:TC中 若用:initgraph(&driver, &mode, “”); 則驅(qū)動程序應(yīng)與.exe文件在同一目錄通常,都是把驅(qū)動程序和可執(zhí)行文件一起拷貝。2021-12-55第5頁/共43頁特別說明:若不想向另外機(jī)器上拷貝驅(qū)動程序,想生成一個可獨立運(yùn)行的exe文件,則需按下面三步進(jìn)行:1. D:

4、tcBGIOBJ EGAVGA 磁盤上將生成文件2. D:tcTLIB lib 磁盤上將包含驅(qū)動程序(增加4K) 3. 程序中,initgraph()調(diào)用前加上一行: registerbgidriver(EGAVGA_driver);2021-12-56第6頁/共43頁特別說明:同樣的道理,若需要不依賴于字體(英)驅(qū)動的可執(zhí)行文件,也需將字體驅(qū)動連接到中,如:1. D:tcBGIOBJ trip D:tcBGIOBJ litt 磁盤上將生成、文件2. D:tcTLIB lib D:tcTLIB lib 將包含字符驅(qū)動程序 3. 程序中,initgraph()調(diào)用前加上: registerbgi

5、font(triplex_font); registerbgifont(small_font);2021-12-57第7頁/共43頁 若不知道顯示器的類型, 可將graphdriver置為DETECT, 系統(tǒng)將自動檢測其類型, 將相應(yīng)的驅(qū)動程序裝入, 并將顯示模式置成最高模式 初始化方法二:int main() int driver = DETECT; int mode; initgraph(&driver, &mode,“”); return 0;2021-12-58第8頁/共43頁2021-12-59二、圖形方式的關(guān)閉 關(guān)閉圖形方式,返回文本方式的函數(shù): void clos

6、egraph( ) 說明:還有一個restorecrtmode( ) 也可以返回文本方式,兩者的區(qū)別:后者在內(nèi)存中保留驅(qū)動程序和字符集,暫時返回文本方式,可隨時用函數(shù)setgraphmode(VGAHI )切換回圖形方式,而closegraph()則是完全釋放驅(qū)動程序和字符集。第9頁/共43頁 作圖程序開始時,先要用initgraph()初始化,而在作圖結(jié)束時,總要用closegraph()關(guān)閉圖形方式,使屏幕轉(zhuǎn)回文本方式,程序中的initgraph()和closegraph()總是成對出現(xiàn)的。 初始化后的清屏:初始化后一般應(yīng)清屏,使屏幕如同一張白紙,清屏函數(shù)的原型是: void cleard

7、evice( ) ;2021-12-510第10頁/共43頁2021-12-511三、作圖程序的基本框架及實例#include / 包含繪圖頭文件int main( ) int gdriver = DETECT; int gmode;initgraph(&gdriver, &gmode, ”); cleardevice( ); /*/ /* 此處加入繪圖代碼 */ /*/closegraph( );return 0;第11頁/共43頁2021-12-512例12-1:畫圓程序#include int main() int gdriver = DETECT; int gmode;

8、initgraph(&gdriver, &gmode, ”); cleardevice(); setcolor(RED); /設(shè)置顏色 circle(320, 240, 50); /畫圓 getch(); closegraph(); return 0;第12頁/共43頁2021-12-513第二節(jié) 圖形系統(tǒng)中的像素與坐標(biāo) 圖形方式下,屏幕被劃分為一個一個的“點”,這些點被稱作像素。像素是組成圖像的最基本元素。 像素的位置是由坐標(biāo)表示的圖形初始化后, 系統(tǒng)默認(rèn)的畫圖區(qū)域是整個屏幕, 畫筆的位置是(0,0)-即屏幕左上角。見圖12-1(p144)第13頁/共43頁像素操作函數(shù):vo

9、id putpixel(int x, int y, int color);功能:在指定位置用指定顏色畫一個點作圖顏色與常量之間的對應(yīng)關(guān)系見表12-2 (p144)int getpixel(int x, int y);功能:返回指定位置的像素顏色2021-12-514第14頁/共43頁2021-12-515第三節(jié) 常用圖形函數(shù)函數(shù)原型及使用說明參見教材在程序框架下,逐個練習(xí)每個作圖函數(shù)的用法。第15頁/共43頁2021-12-516第四節(jié) 圖形方式下的文本輸出函數(shù)1、void outtext(char *textstring); 功能:在當(dāng)前位置輸出字符串 說明:textstring可以是指向字

10、符串的指針變量,也可以是字符串常量如: char *p=“hello”; outtext(p); outtext(“hello”);第16頁/共43頁2021-12-5172、void outtextxy(int x, int y, char * textstring); 功能:在指定位置輸出字符串 如: char *p=“hello”; outtextxy(200,100,p);或: outtextxy(200,100,“hello”);第17頁/共43頁2021-12-5183、void settextstyle(int font, int derection,char size); 功能

11、:設(shè)置文本的字體、字號和輸出方向4、void settextjustyle(int horiz, int vert); 功能:設(shè)置文本輸出的對齊方式以上兩個函數(shù)的詳細(xì)說明請參閱教材第18頁/共43頁2021-12-519實 訓(xùn)1、畫一條正弦曲線(一個周期)2、在屏幕上模擬滿天星、時明時滅的效果3、分別畫一個圓、橢圓、矩形、條形圖、扇形圖、三維條形圖,并用不同顏色填充4、鍵盤輸入10名學(xué)生的成績(三科),畫出總分前三名的直方圖,用圓餅圖畫出平均分在各分?jǐn)?shù)段的比例(不及格、60-69,70-79,80-89,90-100),圖形中要有圖例。第19頁/共43頁2021-12-520第五節(jié) 屏幕操作函

12、數(shù)及動畫知識常用的屏幕操作函數(shù)動畫設(shè)計的方法動畫舉例第20頁/共43頁2021-12-521一、 屏幕操作函數(shù)屏幕操作函數(shù)void getimage(int x1,int y1,int x2,int y2,void *bitmap);unsigned imagesize(int x1, int y1, int x2, int y2);void putimage(int x1, int y1, void *bitmap, int op);void setviewport(int x1,int y1,int x2,int y2,int clipflag);void clearviewport();

13、第21頁/共43頁2021-12-522二、 動畫設(shè)計的方法 利用動態(tài)開辟圖視口的方法 利用顯示頁和編輯頁的交替變化的方法 利用畫面存儲再重放的方法 直接寫屏的方法第22頁/共43頁2021-12-523三、 動畫設(shè)計舉例 利用動態(tài)開辟圖視口的方法一步步做(例12-2) 利用畫面存儲再重放的方法一步步做(例12-3)第23頁/共43頁2021-12-524第六節(jié) VRAM的讀寫屏幕圖形與VRAM的關(guān)系VGA顯存的位面結(jié)構(gòu)圖像存儲(讀VRAM)圖像回放(寫VRAM)第24頁/共43頁2021-12-525一 、屏幕圖形與VRAM的關(guān)系顯存中的數(shù)據(jù)(二進(jìn)制數(shù))通過顯卡的一些部件轉(zhuǎn)變?yōu)槟M信號后,發(fā)

14、送到顯示器上,便是我們看到的圖像。由此可知:屏幕上的圖像是由顯存中的數(shù)據(jù)決定的。第25頁/共43頁2021-12-526結(jié)論:改變顯存中的數(shù)據(jù),就可以改變圖像把顯存中的數(shù)據(jù)寫到文件中,意味著存儲了圖像將文件中的數(shù)據(jù)重新寫回顯存,可再現(xiàn)原來的圖像第26頁/共43頁2021-12-527二 、VGA顯存的位面結(jié)構(gòu)VGA顯存與內(nèi)存統(tǒng)一編址,顯存的起始地址是:0 xa000:0 x0000 VGA顯存最多256K,平均分成4部分,每部分64K,稱作一個位面。xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx位面3位面2位面1

15、位面0每位面每位面64KB第27頁/共43頁2021-12-528二 、VGA顯存的位面結(jié)構(gòu) 四個位面(0、1、2、3)使用相同的地址,即:顯存中的一個地址實際上對應(yīng)著4個位面上的4個字節(jié)(每位面一個字節(jié))xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0 xa000:0 x00000 xa000:0 x0001四個位面總共占用64KB的地址編碼第28頁/共43頁2021-12-529二 、VGA顯存的位面結(jié)構(gòu) 4個位面上相同位置的4個二進(jìn)制數(shù),決定著顯示器上一個像素的顏色。10 xxxxxx01xxxxxx00

16、xxxxxx00 xxxxxxxxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx 決定著屏幕上第0個像素的顏色:0001藍(lán)色4個位面上相同地址的4個字節(jié)決定著屏幕上8個點的顏色決定著屏幕上第1個像素的顏色:0010綠色位面3位面0第29頁/共43頁2021-12-530第30頁/共43頁2021-12-531三 、圖像存儲(讀VRAM) 要將圖像存起來,實際上就是把顯存4個位面中的數(shù)據(jù)存起來,即把0 xa000:0 x0000開始的、總共640*480/8=38400個字節(jié)的4個位面的數(shù)據(jù)全部存到文件中,可用fputc()函數(shù) 但是,每次只能讀取一個位面上的數(shù)據(jù),如何選取位

17、面?第31頁/共43頁2021-12-532 VGA顯卡上有一個圖形控制器,含有許多寄存器,其中有個讀位面選擇寄存器(口地址0 x3cf),通過給它不同的數(shù)值,可以實現(xiàn)對位面的選擇(僅讀操作時) 如:outportb(0 x3cf, 0); /表示要讀位面0outportb(0 x3cf, 1); /表示要讀位面1第32頁/共43頁2021-12-533 但是,讀位面選擇寄存器和其他8個寄存器共用一個口地址,用哪個由索引寄存器決定:索引寄存器的值索引寄存器的值(口地址0 x3ce)對應(yīng)的寄存器對應(yīng)的寄存器(口地址都是0 x3cf)0設(shè)置/清除寄存器1設(shè)置/清除允許寄存器2顏色比較寄存器3數(shù)據(jù)旋

18、轉(zhuǎn)移動與功能選擇寄存器4讀顏色位面選擇寄存器讀顏色位面選擇寄存器5方式寄存器6混合寄存器7顏色無關(guān)寄存器8位屏蔽寄存器第33頁/共43頁2021-12-534 可見,前面代碼 “outportb(0 x3cf, 0); ” 中的“0”送入哪個寄存器,是由索引寄存器控制的。 索引寄存器的口地址是0 x3ce,當(dāng)索引值是4時,表示選中的是讀位面選擇寄存器, “0”才能被送入讀位面選擇寄存器第34頁/共43頁2021-12-535數(shù)據(jù):040:XX寄存器4:讀位面選擇寄存器1:XX寄存器2:XX寄存器3:XX寄存器5:XX寄存器6:XX寄存器7:XX寄存器索引寄存器口地址:0 x3ce8:XX寄存器

19、口地址:0 x3cf執(zhí)行outport(0 x3cf, 0)的過程第35頁/共43頁2021-12-536因此,需要:先用下面的語句指明:口地址0 x3cf對應(yīng)的是“讀位面選擇寄存器”outportb(0 x3ce, 4); 然后再選擇位面:outportb(0 x3cf, 0); /設(shè)要讀位面0兩者可以合并: outport(0 x3ce, 0 x0004); 第36頁/共43頁2021-12-537 核心代碼:char far *p; fp = fopen(pic.dat,wb); for(i = 0; i 4; i+) outportb(0 x3ce, 4); /選擇讀位面選擇寄存器 outportb(0 x3cf, i); /選擇位面i p = (char far*)0 xa0000000L; /p指向顯存開頭 for(j = 0; j 38400L; j+) putc(*p, fp); p+; 第37頁/共43頁寫位面與讀位面不同,可以同時寫幾個位面(寫進(jìn)每個位面的數(shù)據(jù)是相同的)。若數(shù)據(jù)不相同,需要分別寫,一次寫一個位面。寫哪些位面,由顏色位面寫允許寄存器(口地址:0 x3c5)的低4位控制,如:2021-12-538四 、圖像回放(寫VRAM) 顏色顏色位面寫允許寄存器低位

溫馨提示

  • 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

提交評論