一、確定顯示卡
二、選擇顯示模式
三、圖形顯示
20. detectgraph() 顯示卡檢測函數
21. initgraph() 圖形初始化函數
22. getdrivername() 擷取圖形驅動程式名的指標
23. getgraphmode() 擷取圖形模式函數
24. getmoderange()擷取模式值範圍函數
25. getmaxmode()擷取最大顯示模式函數
26. getmodename()擷取顯示模式名函數
27. graphdefaults()圖形設定複位預設值函數
28. setgraphmode() 設定圖形模式函數
29. restorecrtmode() 恢複文本顯示模式函數
30. graphresult() 圖形操作結果函數
31. grpaherrormsg() 圖形錯誤資訊函數
32. setgraphbufsize()設定圖形緩衝區大小函數
33. setactivepage() 設定可輸出顯示頁函數
34. setvisualpage() 設定可見顯示頁數
35. closegraph()關閉圖形模式函數
一、確定顯示卡
微機系統顯示部分由 顯示器(monitor)和顯示卡(adapter)兩部分組成。顯示器是獨立於主機的一種外部裝置,顯示卡或稱顯示卡,也有的稱圖形卡,是插在主機 上的一塊電路板。但也有的顯示卡與主機板設計在一起。顯示卡包括寄存器組、儲存空間和控制電路三大部分。其中儲存空間又包括顯示RAM和ROM BIOS兩部分,微機對顯示螢幕的所有操作都是通過顯示卡來實現的。因此要進行圖形顯示 ,首先要確定電腦上安裝的是何種顯示卡。一種方法是詢問電腦或終端使用者,確定將要使用的顯示卡類型。這種方法很難,因為甚至專業程式員也不總是能確 定他正在使用什麼樣的硬體。另一種方法是用軟體查詢硬體以識別當前的配置。如果有一些識別硬體的標準,這就很簡單了。在Borland C中對現在所使用的各種顯示卡提供了支援,這隻要調用detectgraph()函數就可以了,該函數為程式員確定電腦上使用的顯示卡類型。
二、 選擇顯示模式
顯示模式是指顯示卡支援的解析度與相應的顏色配置。每台電腦都配置了某種類型顯示卡,可以為該顯示卡指定顯示模式。
三、 圖形顯示
進行圖形顯示首先要確定顯示卡,然後選擇其顯示模式。這些工作都可以調用圖形功能函數來完成,其實就是把適合於顯示卡的圖形驅動 程式裝入記憶體。如果圖形驅動程式未裝入記憶體,那麼圖形函數就不能操作。
20. detectgraph() 顯示卡檢測函數
功 能: 函數detectgraph()在電腦上安裝有顯示卡的情況下,測定其顯示卡的類型。
用法: 此函數調用方式為void detectgraph(int *driver,int *mode);
說明: 函數把driver所指向的整型變數設定為圖形驅動程式的代碼,把mode所指向的整型變數設定為顯示卡支援的最高有效模式(即該顯示卡能支援的最高分辨 率)。
該函數相應的標頭檔為graphics.h
傳回值: 返回適合於該顯示卡的圖形驅動程式的代碼(也稱等價值),並存放在driver指向的變數中。若電腦系統中無圖形硬體,則由driver指向的變數設定 為-2。
例: 檢測電腦是否裝有顯示卡:
int driver,mode;
detectgraph(&driver,&mode);
if(driver==-2)
{
printf("no graphics adapter in the computer");
exit(1);
}
21. initgraph() 圖形初始化函數
功能: 函數initgraph()用於初始化圖形系統,把適合的圖形驅動程式裝入記憶體,設定圖形函數所用的顯示模式。
用法: 該函數調用方式為void initgraph(int *driver,int *mode,char *path);
說明: 1) 函數中參數driver指向圖形驅動程式(或者等價值)。
在頭部檔案graphics.h中定義了圖形驅動程式的宏名與其等價 ,如下:
宏 名 等 價值
------------------------------
DETECT 0
CGA 1
MCGA 2
EGA 3
EGA64 4
EGAMONO 5
IBM8514 6
HERCMONO 7
ATT400 8
VGA 9
PC3270 10
--------------------------------
註: 在現在的電腦中,上表中的許多顯示卡已經過時,不再使用。
這樣就不必擔心圖形驅動程式的準確名字,而只要用其等價值即可,若使用 detect(即等價值0)時,initgraph()函數自動檢測當前電腦中裝有的顯示卡類型,並且選用最大解析度的顯示模式。
2)參數 mode指向顯示模式或用等價值(風表1-5),mode所指的值必須是有效模式之一。
3)參數path指向圖形驅動程式所在的路徑,例如 path="C:/TC/BG1".若沒有指定路徑,就在目前的目錄下尋找。
一般圖形驅動程式套件含在.BGI檔案中,這些檔案是系統可以得到 的。這個函數對應的標頭檔是graphics.h。
傳回值: 無
例: 調用initgraph()自動檢測硬體圖形系統,並選用最大解析度顯示模式。
init drver,mode;
driver=DETECT;
mode=0;
initgraph(&driver,&mode,"");
22. getdrivername() 擷取圖形驅動程式名的指標
功能: 函數getdrivername()返回指向當前圖形驅動程式名的指標。
用 法: 此函數調用方式為char *getdrivername(void);
說明: 本函數可以用來檢測顯示卡,但只能在initgraph()設定圖形驅動程式和顯示模式之後調用。
該函數相應的標頭檔為 graphics.h
傳回值: 返回一指標,指向含有當前圖形驅動程式名的字串。
例: 顯示當前圖形驅動程式名:
#include<graphics.h>
#include<stdio.h>
void main()
{
int graphdriver=DETECT,graphmode;
char *s;
initgraph(&graphdriver,&graphmode,"");
s=getdrivername();
outtext("Using driver:");
outtext(s);
getch();
closegraph();
}
23. getgraphmode() 擷取圖形模式函數
功能: 函數getgrapgmode()返回當前圖形模式。
用法: 該函數調用方式為int getgraphmode(void);
說明: getgraphmode()函數無參數調用。
這 個函數對應的標頭檔是graphics.h
傳回值: 返回initgraph()或setgraphmode()所設定的當前圖形模式值。
例: 顯示當前圖形模式的代碼:
printf("graphics mode is %d",getgraphmode());
24. getmoderange()擷取模式值範圍函數
功能: 函數getmoderange()返回指定的圖形驅動程式能夠支援的最低和最高模式值。
用法: 函數調用方式為 void getmoderange(int driver,int *lowmode,int himode);
說明: 參數driver是用來調用此函數時,指定圖形驅動程式等價值或宏名。
其有效值如下:
-------------------------------------
宏 名 等 價值
-------------------------------------
DETECT 0
CGA 1
MCGA 2
EGA 3
EGA64 4
EGAMONO 5
IBM8514 6
HERCMONO 7
ATT400 8
VGA 9
PC3270 10
-------------------------------------
註: 上表中的許多顯示卡在現在的電腦上已經過時,僅作參考。
該函數想應的標頭檔為graphics.h
傳回值: 返回的最小和最大有效值存放在參數指標lowmode和himode分別指向的整型變數中。
例: 顯示當前圖形硬體的顯示模式的範圍值:
#include"graphics.h"
void main()
{
int driver,mode;
int low,high;
mode=0;
initgraph(&driver,&mode,"");
getmoderange(driver,&low,&high);
printf("mode range:%d--%d,low,high);
getch();
rstorecrtmode();
}
25. getmaxmode()擷取最大顯示模式函數
功能: 函數getmaxmode()返回當前載入的圖形驅動程式所支援的最大有效顯示模式。
用 法: 函數調用方式為int getmaxmode(void);
說明:本函數無參數調用,返回圖形驅動程式所支援的最大顯示模式,所有圖形驅動 程式支援從0到getmaxmode()函數傳回值中的任一整 數值(對應的顯示模式)。
這個函數對應的標頭檔是graphics.h
返 回值:返回圖形驅動程式所支援的顯示模式最大值。
例: 顯示當前最大顯示模式:
printf("The maxmode of this driver is %d/n",getmaxmode());
26. getmodename()擷取顯示模式名函數
功 能: 函數getmodename()可擷取當前圖形驅動程式支援的指定顯示模式的名字。
用法: 此函數調用方式為char *getmodename(int modecode);
說明: 參數modecode為整型值。用以指定一顯示模式值調用該函數。
這 個函數對應的標頭檔graphics.h
傳回值: 返回指定模式值的顯示模式名。
例: 顯示當前最大顯示模式名:
#include<graphics.h>
#include<stdio.h>
void main()
{
int graphdriver=DETECT,graphmode;
int modecode;
char *s;
initgraph(&graphdriver,&graphmode,"");
modecode=getmaxmode();
s=getmodename(modecode);
outtext("The maxmode name is:");
outtext(s);
getch();
closegraph();
}
27. graphdefaults()圖形設定複位預設值函數
功能: 函數grpahdefaults()把所有圖形設定複位為它們的預設值,這包括把圖形視口複位為全螢幕;當前位置定位在0,0;調色盤、背景色和繪圖色都 被複位;填充顏色、填 充圖樣、文本文字和排齊方式都返回到它位的預設值。
用法: 此函數調用方式為void graphdefaults(void);
說明: 該函數無參數調用。
這個函數相應的標頭檔為graphics.h
返 回值: 無
例: 將圖形系統復原為其預設值:
graphdefaults();
28. setgraphmode() 設定圖形模式函數
功能: 函數setgraphmode()用當前圖形驅動程式有效圖形模式調用,一旦被調用,setgraphmode()選擇一個新的圖形模式。注意,圖形顯 示模式必須事先由initgraph()初始化。
用法: 該函數調用方式為void setgraphmode(int mode);
說 明: 參數mode調用時為指定的模式值。
此函數相應的頭部檔案是graphics.h
傳回值: 無
例: 把VGA圖形卡設定為VGAMED模式:
setgraphmode(VGAMED); // 圖形系統已經初始化
29. restorecrtmode() 恢複文本顯示模式函數
功能: 函數restrecrtmode()將顯示模式恢複到調用initgraph()時檢測出的初始文字模式。
用法: 這個函數調用方式為void restorecrtmode(void);
說明: 函數restorecrtmode()和setgraphmode()函數一起使用,可以實現文本與圖形顯示之間的切換。
此函數對應 的標頭檔為graphics.h
傳回值: 無
例: 恢複顯示模式為初始文字模式:
restorecrtmode();
30. graphresult() 圖形操作結果函數
功能: 函數graphresult()函數返回最後一次圖形操作的代碼。
用法: 此函數調用方式為int graphresult(void);
說明: C為圖形設定了代碼,它們是從-15到0的整數值。其含義見表1-6。
調 用該函數時,出錯狀態被複位為0,所以傳回值(代碼)最好存於變數中,以供需要時檢測,
進行下一步圖形操作。
| 圖形操作資訊名稱 |
代碼 |
含 義 |
| grInvalidDeviceNum |
-14 |
無效裝置號 |
| grInvalidFont |
-13 |
無效字型檔 |
| grIOerror |
-12 |
輸入輸出錯誤 |
| grError |
-11 |
一般圖形錯誤 |
| grInvalidMode |
-10 |
無效的圖形模式 |
| grNoFontMem |
-9 |
沒有足夠記憶體用於裝字型檔 |
| grFontNotFound |
-8 |
沒有找到字型檔 |
| grNoFloadMem |
-7 |
Flood填 充記憶體不足 |
| grNoScanMem |
-6 |
Scan填 充記憶體不足 |
| grNoLoadMem |
-5 |
沒有足夠記憶體裝入圖形驅動程式 |
| grInvalidDriver |
-4 |
無效圖形驅動程式 |
| grFileNoFound |
-3 |
沒有找到圖形驅動檔案 |
| grNoDetected |
-2 |
沒有檢測到圖形硬體 |
| grNoInitGraph |
-1 |
沒有圖形初始化 |
| grOK |
0 |
成功 |
這個函數對應的頭部檔案是graphics.h
傳回值: 返回最後一次圖形操作結果相應的代碼。
例: 調用graphresult()函數的執行個體見下面grapherrormsg()函數的例子。
31. grpaherrormsg() 圖形錯誤資訊函數
功能: 函數grapherrormsg()返回指向出錯代碼相應的錯誤資訊字串的指標。
用 法: 此函數調用方式為char *grapherrormsg(int errcode);
說明: 參數errcode值,即出錯代碼由調用函數graphresult()獲得。這裡所有出錯代碼及相應的錯誤資訊如表1-6中所述。
該 函數相應的標頭檔是grpahics.h
傳回值: 返回一個指向該出錯代碼相應的錯誤資訊字串的指標。
例: 用文字形式顯示有關出錯代碼相應的錯誤資訊:
int errorcode;
errorcode=graphresult();
printf(%s",grapherrormsg(errcode));
32. setgraphbufsize()設定圖形緩衝區大小函數
功能: 函數setgraphbufsize()用來設定有的圖形函數(如floodfill等)所要用到的記憶體緩衝區大小。
用法: 函數調用方式為unsigned setgraphbufsize(unsigned bufsize);
說明: 這裡無符號參數bufsize為所設定的緩衝區大小。
一般不需要用到該函數,僅使用由initgraph()函數產生的記憶體緩衝區就 夠了,緩衝區大小預設時為4KB(即4096個位元組),足以用來填 充一個大約有650個頂點的多邊形,但是為了節省記憶體,使用者可以減少緩衝區的大小,或者由於需要更多的緩衝區記憶體,這時可用函數 setgraphbufsize()來增加緩衝區大小。注意,使用setgraphbufsize()函數必須在調用initgraph()之前。
返 回值: 返回先前定義的圖形緩衝區位元組數。
例: 調用此函數設定圖形緩衝區為8KB位元組:
setgraphbufsize(0x2000);
33. setactivepage() 設定可輸出顯示頁函數
功能: 函數setactiveage()設定用作圖形輸出的顯示頁。
用法: 這個函數調用方式為void setactivepage(int pagenum);
說明: 參數pagenum為選擇的顯示頁號,如果調用成功,那麼後續圖形輸出就寫到選定的輸出頁上。預設時是以0頁作為當前輸出頁。該函數只在圖形驅動程式及其 顯示模式支援多個顯示頁時才起作用。
此函數相應的標頭檔為graphics.h
傳回值: 無
例: 設定1頁為輸出顯示頁:
setactivepage(1);
34. setvisualpage() 設定可見顯示頁數
功 能: 函數setvisualpage()設定螢幕上可見的顯示頁。
用法: 函數調用方式為void setvisualpage(int pagenum);
說明: 參數pagenum為設定的顯示頁號。預設時是以0頁作為當前可見頁。調用這個函數和調用setactivepage()一樣,僅在圖形驅動程式及其顯示 模式支援多個顯示頁時才有效。使用者可以用系統所支援的任何顯示頁,在它們之間切換,當然一次只能有一個顯示頁在螢幕上可見,有時需要在一頁上建立後備圖形 葨映像,它在當時不顯示,一旦需要時,可以馬上切換到該頁,如要實現動畫效果,只需切換顯示頁號即可。用setvisualpage()函數選 定實際顯示在螢幕上的可見頁,用setactivepage()函數選擇當前圖形輸出頁,從而實現圖形頁之間的顯示切換,通常這兩個函數都是預設的,這時 輸出頁就是可見頁。若不繪製動畫就不需要用到這兩個函數。
這兩個函數對應的標頭檔是graphics.h
傳回值: 無
例: 設定可見頁為第1頁:
setvisualpage(1);
35. closegraph()關閉圖形模式函數
功 能: 函數closegraph()將系統圖形模式關閉,,複位到initgraph()初始文字模式,並且釋放圖形驅動程式、字型和內部緩衝區所佔用的系統內 存。
用法: 這個函數調用方式為void closegraph(void);
說明: 當使用者的程式既用到圖形輸出又用到非圖形輸出時,應該調用此函數。特別是程式多次調用initgraph()函數的情況,要相應地調用 closegraph函數,釋放調用initgraph()所佔用的記憶體,否則記憶體很快就滿了,程式無法運行,如果程式結束,也可以用 restorecrtmode()函數代替該函數,這樣任何分配的記憶體都將釋放。
此函數對應的標頭檔是graphics.h
返 回值: 無
例: 關閉圖形系統:
closegraph();