C語言圖形編程一_第1頁
C語言圖形編程一_第2頁
C語言圖形編程一_第3頁
C語言圖形編程一_第4頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C語言圖形編程(一、字符屏幕)ー、屏幕操作函數(shù)clrscr。淸除字符窗口函數(shù)window。字符窗口函數(shù)gotoxy()光標定位函數(shù)clreol。清除光標行尾字符函數(shù)insline。插入空行函數(shù)delline。刪除一行函數(shù)gettext??竭M文字函數(shù)puttext??匠鑫淖趾瘮?shù)movetext。移動文字函數(shù)二、字符屬性函數(shù)textmode。文本模式函數(shù)highvideo。高亮度函數(shù)lowvideo。低亮度函數(shù)normvideo(void);textcolor。文本顏色函數(shù)textattr。文本屬性函數(shù)textbackground()文本背景函數(shù)三、屏顯狀態(tài)函數(shù)wherex。光標處x坐標函數(shù)whereyO光標處y坐標函數(shù)gettextinfb。獲取文本窗口信息函數(shù)在BorlandC++里面提供了字符屏幕和圖形函數(shù)。字符屏幕的核心是窗口(Window),它是屏幕的活動部分,字符輸出或顯示在活動窗口中進行。窗口在缺省時,就是整個屏幕。窗口可以根據(jù)需要指定其大小。同樣,對圖形函數(shù)的操作,也提供了(Viewport)。也就是說圖形函數(shù)的操作都是在視口上進行。圖形視口與字符窗口具有相同的特性,用戶可以在屏幕上定義大小不同的視ロ,若不定義視口大小,它就是整個屏幕。窗口是在字符屏幕ド的概念,只有字符才能在窗口中顯示出來,這時用戶可以訪問的最小單位為ー個字符。視口是在圖形屏幕狀態(tài)下的概念,文本與圖形都可以在視口上顯示,用戶可訪問的最小單位是ー個像素(像素這一術(shù)語最初用來指顯示器上最小的、單獨的發(fā)光點單元。然而現(xiàn)在,其含義拓寬為指圖形顯示器上的最小可訪問點)。字符和圖形狀態(tài)下,屏幕上的位置都是由它們的行與列所決定的。有一點須指出:字符狀態(tài)左上角坐標為(1,1),但圖形左上角坐標為(0,0)。了解字符屏幕和圖形函數(shù)與窗口和視口的關(guān)系是很重要的。例如,字符屏幕光標位置函數(shù)gotoxy()將光標移到窗ロ的x,y位置上,這未必是相對于整個屏幕。下面介紹常用的幾類字符屏幕函數(shù)的功能用途、操作方法及其例行程序。ー、屏幕操作函數(shù)編寫程序繪圖經(jīng)常要用到對字符屏幕進行操作。例如,在往屏幕上寫字符之前,首先要將屏幕淸除干凈。又如,有時需要在屏幕上多處寫上肉中刺樣的字符內(nèi)容,這時最好用屏幕拷貝來高效率地完成這一任務(wù)。對這些操作,BorlandC++提供了一系列字符屏幕操作函數(shù)來實現(xiàn)。clrscr。清除字符窗口函數(shù)功能:函數(shù)clrscr()清除整個當前字符窗口,并且把光標定位于左上角(1,1)處。用法:此函數(shù)調(diào)用方式為voidclrscr(void);說明:括號中void表示無參數(shù)。該函數(shù)相應(yīng)的頭文件為conio.h返回值:無例:使用這個函數(shù)的例子見4.clreol()函數(shù)的實例中。window。字符窗口函數(shù)功能:函數(shù)window。用于在指定位置建立一個字符窗口。用法:此函數(shù)調(diào)用方式為voidwindow(intleft,inttop,intright,intbottom);說明:函數(shù)中參數(shù)left,top為窗口左上角坐標;right,bottom為其右下角坐標。若有一個坐標是無效的,則window。函數(shù)不起作用。??旦該函數(shù)調(diào)用成功,那么所有定位坐標都是相對于窗口的,而不是相對于整個屏幕。但是建立窗口所用的坐標總是相對整個屏幕的絕對坐標,而不是相對當前窗口的相對坐標。這樣用戶就可以根據(jù)各種需要建立多個互不嵌套的窗口。此函數(shù)的頭文件為conio.ho返回值:無例:調(diào)用這個函數(shù)的實現(xiàn)例見3.gotoxy。函數(shù)的例子中。gotoxy。光標定位函數(shù)功能:函數(shù)gotoxy。將字屏幕上的光標移到當前窗口指定的位置上。用法:這個函數(shù)調(diào)用方式為voidgotoxy(intx,inty);說明:括號里x,y是,光標定位的坐標,如果其中一個坐標值無效(如坐標超界),那么光標不會移動。此函數(shù)在字符狀態(tài)(有時稱為文本狀態(tài))下經(jīng)常用到,其相應(yīng)的頭文件為conio.h返回值:無例:下面程序建立兩個窗口,然后在窗ロ里顯示字符,字符的位置是調(diào)用該函數(shù)確定的。#include"conio.h>voidborder(intstartx,intstarty,intendx,intendy){registerinti;gotoxy(l,l);for(i=0;i<=endx-startx;i++)putch('-');gotoxy(1,endy-starty);fbr(i=O;i<=endx-startx;i-i-+)putch(し’);fbr(i=2;i<=endy-starty;i-H-){gotoxy(l,i);putch(*r);gotoxy(endx-startx+l,i);putch(T);main(){voidbordcr(int,int,int,int);clrscr();window(6,8,38,12);border(6,8,38,12);gotoxy(2,2);printf(Mwindow1H);window(8,16,40,24);border(8,16,40,24);gotoxy(3,2);printffwindow2");getch();}clreol()清除光標行尾字符函數(shù)功能:函數(shù)clreol()在當前字符窗口中清除從光標位置到行尾的所有字符,而光標位置保持不變。用法:它的調(diào)用方式為voidclreol(void);說明:此函數(shù)的相應(yīng)頭文件為conio.h返回值:無例:程序中使用了函數(shù)clreol()和clrscr()#include"conio.hAvoidmain(){registerinti;gotoxy(6,8);printff'Thisisatestoftheclreol()function.**);getch();gotoxy(6,8);clreol();fbr(i=0;i<20;i-H-)printf(**Hello\n**);getch();clrscr();insline()插入空行函數(shù)功能:函數(shù)insline()插入一空行到當前光標所在行上,同時光標以下的所有行都向下順移一行。用法:此函數(shù)的調(diào)用方式為voidinsline(void);說明:該函數(shù)只用于文本方式,并且在當了符窗口才有效。這個函數(shù)的對應(yīng)頭文件是conio.h返回值:無例:程序給出了insline。函數(shù)的用法。#include"conio.h"voidmain()(registserinti;clrscr();for(i=l;i<24;i++)(gotoxy(l,i);printff'Thisisline%d\n",i);}getch();gotoxy(l,10);insline();getch();}delline()刪除一行函數(shù)功能:函數(shù)delline()刪除當前窗口內(nèi)光標所在行,同時把該行下面所有行都ヒ移ー行。用法:此函數(shù)調(diào)用方式為voiddelline(void);說明:注意,如果當前窗口小于整個屏幕,那么該函數(shù)只影響到窗口內(nèi)的字符。這個函數(shù)相應(yīng)的頭部文件是conio.h返回值:無例:先在屏幕上顯示16行文字,然后刪除第4行#include"conio.h"voidmain(){registerinti;clrscr();for(i=0;i<16;i++)printf("line%d\n",i);getch();gotoxy(l,4);delline();getch();gettext()拷進文字函數(shù)功能:函數(shù)gettext。用于文本狀態(tài)下將屏幕上矩形域內(nèi)的文字拷進內(nèi)存。用法:該函數(shù)調(diào)用方式為intgettext(intlefi,inttop,intright,intbottom,void*bufifer);說明:函數(shù)中參數(shù)left,top為矩形區(qū)域的左上角坐標,right,bottom為其右下角坐標,這些坐標是屏幕的絕對坐標,不是窗口的相對坐標。buffer指針必須指向一個足夠保存該矩形域內(nèi)文字的內(nèi)存。所用內(nèi)存大小按下式計算:點頭用字節(jié)數(shù)=矩形哉內(nèi)的行數(shù)x矩形域的列數(shù)x2這里將行數(shù)乘以列數(shù)再乘以2的原因是保存屛幕上每個字符要用兩個字節(jié)存儲單元,ー個字節(jié)存儲單元存放字符本身,而另ー個存放其屬性。此函數(shù)相應(yīng)的頭文件是conio.h返回值:若函數(shù)調(diào)用成功則返回1,否則返順0。例:把屏幕左上角點(1,1)和右下角點(10,10)的區(qū)域拷貝到buf指向的內(nèi)存中去。buf=(char*)malloc(10*10*2);if(!buf)gettext(1,1,10,10,buf);puttext()拷出文字函數(shù)功能:函數(shù)puttext()把先前'由gettext()保存到buffer指向的內(nèi)存中的文字拷出到屏幕上一個矩形區(qū)域中。用法:此函數(shù)調(diào)用方式為intputtext(intleft,inttop,intright,intbottom,void*bufier);說明:函數(shù)里left,top為給出的屏幕上矩形區(qū)域的左上角點,right,bottom為其右下角點,其坐標是用屏幕的絕對坐標,而不是用窗口的相對坐標。該函數(shù)相應(yīng)的頭文件為conio.h返回值:函數(shù)調(diào)用成功返回值為1,否則返回0。例:屏幕上某個區(qū)域內(nèi)容拷進buf指向的內(nèi)存中,然后又將這些文字拷出到屏幕上新位置。buf=(char*)malloc(10*l0*2);gettext(1,1,10,10,buf);puttext(16,16,30,30,buf);movetext()移動文字函數(shù)功能:函數(shù)movetext。將屏幕上一個矩形區(qū)域的文字移到另一個區(qū)域上。用法:該函數(shù)調(diào)用方式為intmovetext(intleft,inttop,intright,intbottom,intnewleft,intnewtop);說明:上面left,top為矩形區(qū)域上角坐標,right,bottom為其右下角坐標,newleft,newright為移動到區(qū)域左上角坐標。這些坐標是屏幕的絕對坐標,不是窗口的相對坐標。若要把屏幕上一段文字移到屏幕的另一位置,那么使用movetext。函數(shù)比用gettext。然后再用puttext()效率更高。此函數(shù)相應(yīng)的頭文件是conio.h返回值:如果有一個以上坐標無效,那么函數(shù)返回值為〇,否則返回1。列:把屏幕左上角點(8,8),右下角點(20,20)的矩形區(qū)域文字移動到左上角點(10,10)的位置上:movetext(8,8,20,20,10,10);textmode()文本模式函數(shù)功能:函數(shù)textmode。針屏幕設(shè)置為文本模式(或者說字符狀態(tài))。用法:函數(shù)調(diào)用方式為voidtextmode(intmode);說明:參數(shù)mode必須為表!-2中所示的模式之一⑴以用模式名(符號值),也可以用其等價的整數(shù)值。表1-2文本模式模式名(符號值)等價整數(shù)值說明BW40C40BW80C80MONOLASTMODE0 40列黑白40列彩色80列黑白80列彩色7 80列單色-1 上次模式調(diào)用該函數(shù)后,屛幕復(fù)位,并且所有字符的屬性恢復(fù)其缺省值。此函數(shù)對應(yīng)的頭文件是conio.h返回值:無例:把屏幕設(shè)置為80列彩色模式textmode(C80);二、字符屬性函數(shù)用戶可以設(shè)置字符顯示的高亮度或低亮度的寫的符閃爍及其背景顏色等。具有這些操作的函數(shù)稱為字符屬性函數(shù)。除了僅支持單模式和單色的顯示卡外,字符屬性函數(shù)適用于其余所有的顯示卡。highvideo。高亮度函數(shù)功能:函數(shù)highvideo()設(shè)置屏幕為髙亮度顯示。用法:此函數(shù)調(diào)用方式為voidhighvideo(void);說明:調(diào)用該函數(shù)后,寫到屏幕上的字符是高亮度的。此函數(shù)只適用于文本模式狀態(tài)(或說字符屏幕狀態(tài))。這個函數(shù)對應(yīng)的頭文件為conio.h返回值:無例:設(shè)置屏幕顯示為高亮度的。highvideo();lowvideo()低亮度函數(shù)功能:函數(shù)lowvideo()設(shè)置屏幕為低亮度顯示。用法:該函數(shù)調(diào)用方式為voidlowvideo(void);說明:調(diào)用該函數(shù)后,此時寫到屏幕上的字符是低亮度的。這個函數(shù)只適用于文本模式狀態(tài)(或說字符屏幕狀態(tài))。此函數(shù)相應(yīng)的頭文件是conio.h返回值:無例:設(shè)置屏幕顯示為低亮度的

lowvideo();normvideo(void);功能:函數(shù)normvideo()設(shè)置屏幕為正常亮度顯示。用法:這個函數(shù)調(diào)用方式為voidnormvideo(void);說明:調(diào)用該函數(shù)后,此時寫到屏幕上的字符是正常亮度的,該函數(shù)只適用于文本模式狀態(tài)(或說字符狀屏幕狀態(tài))。此函數(shù)相應(yīng)的頭文件為conio.h返回值:無例:設(shè)置屏幕顯示為正常亮度。normvideo();textcolor()文本顏色函數(shù)功能:函數(shù)textcolor。設(shè)置字符屏幕下文本顏色(或字符顏色),它也可以用于使字符閃爍。用法:這個函數(shù)調(diào)用方式為voidtextcolor(intcolor);說明:函數(shù)中參數(shù)color的有效值可取表!-3中的顏色名(即宏名)或等價值。表!-3顏色名與等價值名等價值BLACK0BLUE 名等價值BLACK0BLUE 1GREEN2CYAN 3RED4MAGENTABROWNLIGHTGRAYDRAKGRAYLIGHTBLUELIGHTGREENLIGHTCYANLIGHTRED5789101112LIGHTMAGENTAYELLOW14WHITE 15BLINK 128含義藍綠青紅洋紅棕淡灰深灰淡藍淡綠

淡青淡紅13淡洋紅黃白閃爍textcolor()函數(shù)執(zhí)行后,只影響其后輸出探險符顏色,而不改變已經(jīng)在當前屏幕上的其它字符顏色。顯然,如果需要輸出的字符閃爍,只要將函數(shù)中參數(shù)color取為BLINK即可,如果要使字符帶顏色閃爍,就必須將所選的顏色值與128作“或”運算。此函數(shù)相應(yīng)的頭文件是conio.h返回值:無例:下面程序段中第一條語句使輸出的字符閃爍,第三條語句使字符輸岀為經(jīng)色同時閃爍:textcolor(BLINK);printfC'hello");textcolor(RED|BLINK);textattr()文本屬性函數(shù)功能:函數(shù)textattr()用于設(shè)置文本屬性,即字符背景顏色、字符本身顏色和字符閃爍與否。用法:函數(shù)調(diào)用方式為voidtextattr(intattribute);說明:設(shè)置字符背景顏色屬性字節(jié)的最簡單方法是,用所選的背景顏色值乘以16再與字符顏色值作按位或(OR)運算。例如需要紅色背景、綠色字符,就設(shè)置成RED*16|GREEN,若還要字符閃爍,就把背景顏色值、字符顏色值與閃爍值ー起按位作或運算。如藍背景、黃字符且閃爍,就設(shè)置成為:YELLO|128|BLUE*16第0位用于設(shè)置字符顏色。此函數(shù)相應(yīng)的頭文件為conio.h返回值:無例:設(shè)置背景為藍色、字符為紅色并且字符閃爍:textattr(RED|128|BLUE*16);textbackground()文本背景函數(shù)功能:函數(shù)textbackground。設(shè)置字符屏幕下文本背景顏色(或字符背景顏色)。用法:此函數(shù)調(diào)用方式為voidtextbackground(intbcolor);說明:參數(shù)bcolor的有效值取表1イ背景顏色(即宏名)或等價值。表1-4背景顏色與等價值背景顏色等價值含義BLACK0里BLUE1藍GREEN2綠CYAN3青RED4紅MAGENTA5洋紅BROWN6棕調(diào)用該函數(shù)只影響后續(xù)寫的字符背景顏色,而不改變當前顯示在屏幕上的字符背景顏色。這個函數(shù)對應(yīng)的頭文件是conio.h返回值:無例:設(shè)置文本背景顏色為藍色:textbackground(BLUE));三、屏顯狀態(tài)函數(shù)這里提供三個在文本模式下屏幕顯示狀態(tài)的函數(shù)wherex()光標處x坐標函數(shù)功能:函數(shù)wherex()返回當前窗口中光標處橫向坐標。用法:此函數(shù)調(diào)用方式為intwherex(void);說明:這個函數(shù)調(diào)用無參數(shù),其對應(yīng)的頭文件是conio.h返回值:函數(shù)調(diào)用成功,返回光標處x坐標值。例:調(diào)用這個函數(shù)的實例見18.wherey()函數(shù)的例中。wherey()光標處y坐標函數(shù)功能:函數(shù)wherey()返回當前窗口中光標處縱向坐標。用法:該函數(shù)調(diào)用方式為intwherey(void);說明:此函數(shù)調(diào)用無參數(shù),其相應(yīng)的頭文件是conio.h返回值:函數(shù)調(diào)用成功,返回光標處y坐標值。例:調(diào)作函數(shù)wherex()與whereyO,返回當前光標處x坐標與y坐標,并賦給整型變量xpos,yposointxpos,ypos;xpos=wherex();ypos=wherey();gettextinfo()獲取文本窗口信息函數(shù)功能:函數(shù)gettextinfo。獲取當前文本窗口信息,并存放在實參結(jié)構(gòu)中。用法:函數(shù)調(diào)用方式為voidgettextinfb(structtext-infb*info);說明:函數(shù)中參數(shù)infb為structtext-info結(jié)構(gòu)型指針,structtext?info結(jié)構(gòu)在此函數(shù)相應(yīng)的頭文件中定義為:structtext-infb{unsignedcharwinleft; /Z窗口左上角x坐標unsignedcharwintop; 〃窗口左上角y坐標unsignedcharwinright; /Z窗口右下角x坐標unsignedcharwinbottom;/Z窗口右下角y坐標unsignedcharattribute;/Z文本屬性unsignedcharnormattr;//正常屬性unsignedcharcurrmode;/Z當前屏顯模式unsignedcharscreenhight//文本窗口高度(以行數(shù)計)unsignedcharscreenwidth;//文本窗口寬度(以字符個數(shù)計)unsignedcharcurx; //光標處x坐標unsignedcharcury; //光標處y坐標};記住,調(diào)用函數(shù)gettextinfo。時,要傳遞structtext-info結(jié)構(gòu)型指針或該結(jié)構(gòu)的首地址,不要傳遞結(jié)構(gòu)變量本身。這個函數(shù)對應(yīng)的頭文件是conio.h返回值:返回文本窗口角點坐標、高寬度、文本屬性等值,并存放在infb所指向的結(jié)構(gòu)變量中。例:程序語句說明如何正確調(diào)用gettextinfo()函數(shù):structtext-infowin-status;gettextinfo(&win-status);C語言圖形編程(二、圖形顯示)ー、確定顯示卡二、選擇顯示模式三、圖形顯示detectgraph()顯示卡檢測函數(shù)initgraph()圖形初始化函數(shù)getdrivemame()獲取圖形驅(qū)動程序名的指針getgraphmode()獲取圖形模式函數(shù)getmoderange()獲取模式值范圍函數(shù)getmaxmode。獲取最大顯示模式函數(shù)getmodename。獲取顯示模式名函數(shù)graphdefaults()圖形設(shè)置復(fù)位缺省值函數(shù)setgraphmode()設(shè)置圖形模式函數(shù)restorecrtmode?;謴?fù)文本顯示模式函數(shù)graphresult()圖形操作結(jié)果函數(shù)grpaherrormsgO圖形錯誤信息函數(shù)setgraphbufsize。設(shè)置圖形緩沖區(qū)大小函數(shù)setactivepage()設(shè)置可輸出顯示頁函數(shù)setvisualpage()設(shè)置可見顯示頁數(shù)closegr叩h()關(guān)閉圖形模式函數(shù)ー、確定顯示卡微機系統(tǒng)顯示部分由顯示器(monitor)和顯示卡(adapter)兩部分組成。顯示器是獨立于主機的ー種外部設(shè)備,顯示卡或稱顯示適配卡,也有的稱圖形卡,是插在主機上的ー塊電路板。但也有的顯示卡與主機板設(shè)計在ー起。顯示卡包括寄存器組、存儲器和控制電路三大部分。其中存儲器又包括顯示RAM和ROMBIOS兩部分,微機對顯示屏幕的所有操作都是通過顯示卡來實現(xiàn)的。因此要進行圖形顯示,首先要確定計算機上安裝的是何種顯示卡。ー種方法是詢問計算機或終端使用者,確定將要使用的顯示卡類型。這種方法很難,因為甚至專業(yè)程序員也不總是能確定他正在使用什么樣的硬件。另ー種方法是用軟件查詢硬件以識別當前的配置。如果有一些識別硬件的標準,這就很簡單了。在BorlandC中對現(xiàn)在所使用的各種顯示卡提供了支持,這只要調(diào)用detcctgraph。函數(shù)就可以了,該函數(shù)為程序員確定計算機上使用的顯示卡類型。二、選擇顯示模式顯示模式是指顯示卡支持的分辨率與相應(yīng)的顏色配置。每臺計算機都配置了某種類型顯示卡,可以為該顯示卡指定顯示模式。三、圖形顯示進行圖形顯示首先要確定顯示卡,然后選擇其顯示模式。這些工作都可以調(diào)用圖形功能函數(shù)來完成,其實就是把適合于顯示卡的圖形驅(qū)動程序裝入內(nèi)存。如果圖形驅(qū)動程序未裝入內(nèi)存,那么圖形函數(shù)就不能操作。detectgraph()顯示卡檢測函數(shù)功能:函數(shù)detectgraph()在計算機上安裝有顯示卡的情況下,測定其顯示卡的類型。用法:此函數(shù)調(diào)用方式為voiddetectgraph(int*driver,int*mode);說明:函數(shù)把driver所指向的整型變量設(shè)置為圖形驅(qū)動程序的代碼,把mode所指向的整型變量設(shè)置為顯示卡支持的最高有效模式(即該顯示卡能支持的最高分辨率)。該函數(shù)相應(yīng)的頭文件為graphics.h返回值:返回適合于該顯示卡的圖形驅(qū)動程序的代碼(也稱等價值),并存放在driver指向的變量中。若計算機系統(tǒng)中無圖形硬件,則由driver指向的變量設(shè)置為ー2。例:檢測計算機是否裝有顯示卡:intdriver,mode;detectgraph(&driver,&mode);if(driver=-2)(printf("nographicsadapterinthecomputer");exit(l);initgraph()圖形初始化函數(shù)功能:函數(shù)initgraph()用于初始化圖形系統(tǒng),把適合的圖形驅(qū)動程序裝入內(nèi)存,設(shè)置圖形函數(shù)所用的顯示模式。用法:該函數(shù)調(diào)用方式為voidinitgraph(int*driver,int*mode,char*path);說明:1)函數(shù)中參數(shù)driver指向圖形驅(qū)動程序(或者等價值)。在頭部文件graphicsj中定義了圖形驅(qū)動程序的宏名與其等價,如下:宏名等價值DETECT0CGA1MCGA2EGA3EGA644EGAMONO5IBM85146HERCMONO7ATT4008VGA9PC327010注:在現(xiàn)在的計算機中,上表中的許多顯示卡已經(jīng)過時,不再使用。這樣就不必擔(dān)心圖形驅(qū)動程序的準確名字,而只要用其等價值即可,若使用detect(即等價值0)時,initgraph()函數(shù)自動檢測當前計算機中裝有的顯示卡類型,并且選用最大分辨率的顯示模式。2)參數(shù)mode指向顯示模式或用等價值(風(fēng)表!-5),mode所指的值必須是有效模式之一。3)參數(shù)path指向圖形驅(qū)動程序所在的路徑,例如path="C:\TC\BGド.若沒有指定路徑,就在當前目錄下尋找。一-般圖形驅(qū)動程序包含在.BGI文件中,這些文件是系統(tǒng)可以得到的。這個函數(shù)對應(yīng)的頭文件是gr叩hics.h。返回值:無例:調(diào)用initgraph。自動檢測硬件圖形系統(tǒng),并選用最大分辨率顯示模式。initdrver,mode;driver=DETECT;mode=0;initgraph(&driver,&mode,*H,);getdrivemameO獲取圖形驅(qū)動程序名的指針功能:函數(shù)getdrivemame。返回指向當前圖形驅(qū)動程序名的指針。用法:此函數(shù)調(diào)用方式為char*getdrivemame(void);說明:本函數(shù)可以用來檢測顯示卡,但只能在initgr叩h()設(shè)置圖形驅(qū)動程序和顯示模式之后調(diào)用。該函數(shù)相應(yīng)的頭文件為graphics.h返回值:返回一指針,指向含有當前圖形驅(qū)動程序名的字符串。例:顯示當前圖形驅(qū)動程序名:#include<graphics.h>#include<stdio.h>voidmain()|intgraphdriver=DETECT,graphmode;char*s;initgraph(&graphdriver,&graphmode,"M);s=getdrivemame();outtext("Usingdriver:");outtext(s);getch();closegraph();}getgr叩hmode。獲取圖形模式函數(shù)功能:函數(shù)getgrapgmode()返回當前圖形模式。用法:該函數(shù)調(diào)用方式為intgetgraphmode(void);說明:gctgraphmode()函數(shù)無參數(shù)調(diào)用。這個函數(shù)對應(yīng)的頭文件是gr叩hics.h返回值:返回initgraph()或setgr叩hmodc()所設(shè)置的當前圖形模式值。例:顯示當前圖形模式的代碼:printfl(ngraphicsmodeis%dn,gctgraphmode());getmoderange。獲取模式值范圍函數(shù)功能:函數(shù)getmoderange。返回指定的圖形驅(qū)動程序能夠支持的最低和最高模式值。用法:函數(shù)調(diào)用方式為voidgetmoderange(intdriver,int*lowmode,inthimode);說明:參數(shù)driver是用來調(diào)用此函數(shù)時,指定圖形驅(qū)動程序等價值或宏名。其有效值如下:TOC\o"1-5"\h\zDETECT 0CGA 1MCGA 2EGA 3EGA64 4EGAMONO 5IBM8514 6HERCMONO7ATT400 8VGA 9PC3270 10注:上表中的許多顯示卡在現(xiàn)在的計算機上已經(jīng)過時,僅作參考。該函數(shù)想應(yīng)的頭文件為graphics.h返回值:返回的最小和最大有效值存放在參數(shù)指針lowmode和himode分別指向的整型變量中。例:顯示當前圖形硬件的顯示模式的范圍值:#include"graphics.hMvoidmain(){intdriver,mode;intlow,high;mode=0;initgraph(&driver,&mode,,H,);getmoderange(driver,&low,&high);printf("moderange:%d—%d,low,high);getch();rstorecrtmodeO;getmaxmode()獲取最大顯示模式函數(shù)功能:函數(shù)getmaxmode。返回當前加載的圖形驅(qū)動程序所支持的最大有效顯示模式。用法:函數(shù)調(diào)用方式為intgetmaxmode(void);說明:本函數(shù)無參數(shù)調(diào)用,返回圖形驅(qū)動程序所支持的最大顯示模式,所有圖形驅(qū)動程序支持從0到getmaxmode。函數(shù)返回值中的任一整數(shù)值(對應(yīng)的顯示模式)。這個函數(shù)對應(yīng)的頭文件是gr叩hics.h返回值:返回圖形驅(qū)動程序所支持的顯示模式最大值。例:顯示當前最大顯示模式:printffThemaxmodeofthisdriveris%d\n**,getmaxmode());getmodename。獲取顯示模式名函數(shù)功能:函數(shù)getmodename()可獲取當前圖形驅(qū)動程序支持的指定顯示模式的名字。用法:此函數(shù)調(diào)用方式為char*getmodename(intmodecode);說明:參數(shù)modecode為整型值。用以指定一顯示模式值調(diào)用該函數(shù)。這個函數(shù)對應(yīng)的頭文件gr叩hics.h返回值:返回指定模式值的顯示模式名。例:顯示當前最大顯示模式名:#include<graphics.h>#include<stdio.h>voidmain(){intgraphdriver=DETECT,graphmode;intmodecode;char*s;initgraph(&graphdriver,&graphmode,H");modccodc=gctmaxmodc();s=getmodename(modecode);outtext(叮hemaxmodcnameis:");outtext(s);getch();closegraph();)graphdefaults()圖形設(shè)置復(fù)位缺省值函數(shù)功能:函數(shù)grpahdefaults。把所有圖形設(shè)置復(fù)位為它們的缺省值,這包括把圖形視ロ復(fù)位為全屏幕:當前位置定位在。,〇:調(diào)色板、背景色和繪圖色都被復(fù)位;填充顏色、填充圖樣、文本文字和排齊方式都返回到它位的缺省值。用法:此函數(shù)調(diào)用方式為voidgraphdefoults(void);說明:該函數(shù)無參數(shù)調(diào)用。這個函數(shù)相應(yīng)的頭文件為gr叩hics.h返回值:無例:將圖形系統(tǒng)恢復(fù)為其缺省值:graphdefaults();setgraphmode()設(shè)置圖形模式函數(shù)功能:函數(shù)setgraphmode。用當前圖形驅(qū)動程序有效的圖形模式調(diào)用,一旦被調(diào)用,setgraphmode。選擇ー個新的圖形模式。注意,圖形顯示模式必須事先由initgraph()初始化。用法:該函數(shù)調(diào)用方式為voidsetgraphmode(intmode);說明:參數(shù)mode調(diào)用時為指定的模式值。此函數(shù)相應(yīng)的頭部文件是gr叩hics.h返回值:無例:把VGA圖形卡設(shè)置為VGAMED模式:setgraphmode(VGAMED);/Z圖形系統(tǒng)已經(jīng)初始化restorecrtmode()恢復(fù)文本顯示模式函數(shù)功能:函數(shù)restrecrtmode()將顯示模式恢復(fù)到調(diào)用initgraph。時檢測出的初始文本模式。用法:這個函數(shù)調(diào)用方式為voidrestorecrtmode(void);說明:函數(shù)restorecrtmode()fnsetgraphmode。函數(shù)一起使用,可以實現(xiàn)文本與圖形顯示之間的切換。此函數(shù)對應(yīng)的頭文件為graphics.h返回值:無例:恢復(fù)顯示模式為初始文本模式:restorecrtmode();graphresult()圖形操作結(jié)果函數(shù)功能:函數(shù)gr叩hresult。函數(shù)返回最后一次圖形操作的代碼。用法:此函數(shù)調(diào)用方式為intgraphresult(void);說明:C為圖形設(shè)置了代碼,它們是從?15到。的整數(shù)值。其含義見表1?6。調(diào)用該函數(shù)時,出錯狀態(tài)被復(fù)位為0,所以返回值(代碼)最好存于變量中,以供需要時檢測,進行下ー步圖形操作。圖形操作信息名稱代碼含義grOKgrNoInitGraphgrNoDetectcdgrFileNoFoundgrlnvalidDrivergrNoLoadMemgrNoScanMemgrNoFloadMemgrFontNotFoundgrNoFontMemgrlnvalidModegrErrorgrIOerrorgrlnvalidFontgrlnvalidDeviceNum0-1-46789101112131415成功沒有圖形初始化沒有檢測到圖形硬件沒有找到圖形驅(qū)動文件無效圖形驅(qū)動程序沒有足夠內(nèi)存裝入圖形驅(qū)動程序Scan填充內(nèi)存不足Flood填充內(nèi)存不足沒有找到字體文件沒有足夠內(nèi)存用于裝字體文件無效圖形模式一般圖形錯誤輸入輸出錯誤無效字體文件無效字體號無效設(shè)備號這個函數(shù)對應(yīng)的頭部文件是graphics.h返回值:返回最后一次圖形操作結(jié)果相應(yīng)的代碼。例:調(diào)用graphresult。函數(shù)的實例見F面grapherrormsg。函數(shù)的例子。grpahcrrormsgO圖形錯誤信息函數(shù)功能:函數(shù)gmpherrormsgO返回指向出錯代碼相應(yīng)的錯誤信息字符串的指針。用法:此函數(shù)調(diào)用方式為char*graphcrrormsg(interrcode);說明:參數(shù)errcode值,即出錯代碼由調(diào)用函數(shù)graphresult。獲得。這里所有出錯代碼及相應(yīng)的錯誤信息如表1-6中所述。該函數(shù)相應(yīng)的頭文件是grpahics.h返回值:返回一個指向該出錯代碼相應(yīng)的錯誤信息字符串的指針。例:用文字形式顯示有關(guān)出錯代碼相應(yīng)的錯誤信息:interrorcode;errorcode=graphresult();printf(%s",grapherrormsg(errcode));setgraphbufsize。設(shè)置圖形緩沖區(qū)大小函數(shù)功能:函數(shù)setgraphbufsize。用來設(shè)置有的圖形函數(shù)(如floodfil!等)所要用到的內(nèi)存緩沖區(qū)大小。用な:函數(shù)調(diào)用方式為unsignedsetgraphbufsize(unsignedbufsize);說明:這里無符號參數(shù)bufsize為所設(shè)置的緩沖區(qū)大小。一般不需要用到該函數(shù),僅使用山initgraph()函數(shù)產(chǎn)生的內(nèi)存緩沖區(qū)就夠了,緩沖區(qū)大小缺省時為4KB(即4096個字節(jié)),足以用來填充一個大約有650個頂點的多邊形,但是為了節(jié)省內(nèi)存,用戶可以減少緩沖區(qū)的大小,或者由于需要更多的緩沖區(qū)內(nèi)存,這時可用函數(shù)setgraphbufsize。來增加緩沖區(qū)大小。注意,使用setgr叩hbufsize。函數(shù)必須在調(diào)用initgraph。之前。返回值:返回先前定義的圖形緩沖區(qū)字節(jié)數(shù)。例:調(diào)用此函數(shù)設(shè)置圖形緩沖區(qū)為8KB字節(jié):setgraphbufsize(0x2000);setactivepage()設(shè)置可輸出顯示頁函數(shù)功能:函數(shù)setactiveage。設(shè)置用作圖形輸出的顯示頁。用法:這個函數(shù)調(diào)用方式為voidsetactivepage(intpagenum);說明:參數(shù)pagenum為選擇的顯示頁號,如果調(diào)用成功,那么后續(xù)圖形輸出就寫到選定的輸出頁上。缺省時是以〇頁作為當前輸出頁。該函數(shù)只在圖形驅(qū)動程序及其顯示模式支持多個顯示頁時オ起作用。此函數(shù)相應(yīng)的頭文件為graphics.h返回值:無例:設(shè)置1頁為輸出顯示頁:setactivepage(1);setvisualpage()設(shè)置可見顯示頁數(shù)功能:函數(shù)setvisualpage。設(shè)置屏幕上可見的顯示頁。用法:函數(shù)調(diào)用方式為voidsetvisualpage(intpagenum);說明:參數(shù)pagemim為設(shè)置的顯示頁號。缺省時是以。頁作為當前可見頁。調(diào)用這個函數(shù)和調(diào)用setactivepage。ー樣,僅在圖形驅(qū)動程序及其顯示模式支持多個顯示頁時オ有效。用戶可以用系統(tǒng)所支持的任何顯示頁,在它們之間切換,當然一次只能有一個顯示頁在屏幕上可見,有時需要在ー頁上建立后備圖形萇圖像,它在當時不顯示,一旦需要時,可以馬上切換到該頁,如要實現(xiàn)動畫效果,只需切換顯示頁號即可。用setvisualpage()函數(shù)選定實際顯示在屏幕上的可見頁,用setactiv叩age()函數(shù)選擇當前圖形輸出頁,從而實現(xiàn)圖形頁之間的顯示切換,通常這兩個函數(shù)都是缺省的,這時輸出頁就是可見頁。若不繪制動畫就不需要用到這兩個函數(shù)。這兩個函數(shù)對應(yīng)的頭文件是graphics.h返回值:無例:設(shè)置可見頁為第1頁:setvisualpage(1);closegraph。關(guān)閉圖形模式函數(shù)功能:函數(shù)closegraph()將系統(tǒng)圖形模式關(guān)閉,,復(fù)位到initgraph()初始文本模式,并且釋放圖形驅(qū)動程序、字體和內(nèi)部緩沖區(qū)所占用的系統(tǒng)內(nèi)存。用法:這個函數(shù)調(diào)用方式為voidclosegraph(void);說明:當用戶的程序既用到圖形輸出又用到非圖形輸出時,應(yīng)該調(diào)用此函數(shù)。特別是程序多次調(diào)用initgraph。函數(shù)的情況,要相應(yīng)地調(diào)用closegraph函數(shù),釋放調(diào)用initgraph()所占用的內(nèi)存,否則內(nèi)存很快就滿了,程序無法運行,如果程序結(jié)束,也可以用restorecrtmodeO函數(shù)代替該函數(shù),這樣任何分配的內(nèi)存都將釋放。此函數(shù)對應(yīng)的頭文件是graphics.h返回值:無例:關(guān)閉圖形系統(tǒng):closegraph();C語言圖形編程(三、繪圖函數(shù)ー01)ー、屏幕和視ロ設(shè)置與清除函數(shù)setviewport()設(shè)置圖形視ロ函數(shù)clearviewport()清除圖形視ロ函數(shù)cleardevice()清除屏幕函數(shù)getviewsettings()獲取圖形視口設(shè)置函數(shù)二、調(diào)色板和顏色函數(shù)setpalette()設(shè)置調(diào)色板函數(shù)setallpalette()設(shè)置整個調(diào)色板函setbackcolor()設(shè)置背景顏色函數(shù)setcolor()設(shè)置顏色函數(shù)gctbkcolor()返回背景色函數(shù)getcolor()返回當前繪圖顏色getmaxcolor。返回最大顏色值函數(shù)getpalette()獲取調(diào)色板函數(shù)getpalettesize()返回調(diào)色板大小函數(shù)getdefaultpalette()獲取缺省調(diào)色板函數(shù)三、屏幕位置函數(shù)getmaxx。返回最大x坐標函數(shù)getmaxy()返回最大y坐標函數(shù)getx()返回x坐標函數(shù)gety()返回y坐標函數(shù)moveto()函數(shù)moverel()相對移動函數(shù)BorlandCH提供了一整套綜合性的圖形函數(shù),上節(jié)介紹了其中有關(guān)圖形顯示的函數(shù),本節(jié)介紹其中的繪圖函數(shù),下節(jié)將介紹它的圖形文本函數(shù)。一般繪圖時,首先要清除屏幕,設(shè)置圖形視ロ,設(shè)置繪圖顏色,然后在屏幕上某個位置畫點或直線或曲線等。下面給出具有這些功能的函數(shù)。ー、屏幕和視ロ設(shè)置與清除函數(shù)setviewport()設(shè)置圖形視ロ函數(shù)功能:函數(shù)setviewport。設(shè)置當前圖形視口。用法:函數(shù)調(diào)用方式為voidsetviewport(intleft,inttop,intright,intbottom,intclip);說明:參數(shù)left,top是左上角坐標,right,bottom是右下角坐標,它們都是絕對屏幕坐標。傳給setviewport()的第五個參數(shù)是clip,如果clip為1,則超出視ロ的輸出圖形自動被裁剪掉,即所有作圖限制于當前圖形視ロ之內(nèi),如果clip為〇,則不做裁剪,即作圖將無限制地擴展于視U周界之外,直到屏幕邊界。若無效參數(shù)傳入setviewport。,則graphresult。函數(shù)返回值?11,先前視ロ設(shè)置仍有效。setviewport()函數(shù)的對應(yīng)頭文件為graphics.h返回值:無例:建立對角為(6,6)和(88,88)的視ロ,并帶有裁剪功能:setviewport(6,6,88,88,1);clearvicwport()清除圖形視ロ函數(shù)功能:函數(shù)clearviewport()清除當前圖形視ロ,并把光標從當前位置移到原點(0,0)。用法:該函數(shù)調(diào)用方式為voidclearvicwport(void);說明:此函數(shù)調(diào)用執(zhí)行后,當前圖形視口將不復(fù)存在。這個函數(shù)對應(yīng)的頭文件是graphics.h返回值:無例:清除當前圖形視ロ,但并非整個屏幕:clearviewport();cleardevice()清除屏幕函數(shù)功能:函數(shù)cleardevice()清除整個屏幕,并且將當前位置移到屏幕原點。用法:此函數(shù)調(diào)用方式為voidcleardevice(void);說明:該函數(shù)類似于文本模式下的函數(shù)clrscr(),但clrscr()函數(shù)不能在圖形方式下工作;同樣cleardevice()函數(shù)不能在文本模式下工作。這個函數(shù)相應(yīng)的頭文件為gr叩hics.h返回值:無例:清除當前整個屏幕:cleardevice();getviewsettings()獲取圖形視口設(shè)置函數(shù)功能:函數(shù)getviewsettings。返回當前圖形視ロ坐標和裁剪標志,坐標是絕對屏幕坐標,裁剪標志1或〇〇用法:此函數(shù)調(diào)用方式為voidgetviewscttings(structviewporttype*infb);說明:該函數(shù)執(zhí)行后,把有關(guān)當前視ロ的信息裝入infb指向的viewporttype型結(jié)構(gòu)中。viewporttype結(jié)構(gòu)定義如下:structviewporttype{intleft,top,right,bottom;intclipflag;這里left,top中存放視ロ左上角坐標,right,bottom中存放視ロ右下角坐標,clipflag中存放裁剪標志,若clipflag為1,執(zhí)行裁剪以防止超出視口邊界,如果clipflag為0,則不對超出邊界輸出作裁剪。getviewsettings。函數(shù)對應(yīng)的頭文件是gr叩hics.h返回值:無例:顯示當前視口角點坐標:structviewporttypeinfo;getviewscttings(&info);printfi(nleft:%dtop:%d\nn,info.left,info.top);printf(nright:%dbottom:%d\nM,info.right,info.bottom);二、調(diào)色板和顏色函數(shù)進行圖形顯示或繪圖,除了要知道用什么顯示卡以及相應(yīng)的圖形驅(qū)動程序外,還必須了解它們支持什么樣的調(diào)色板顏色。setpalette。設(shè)置調(diào)色板函數(shù)功能:函數(shù)sctpalctte()可對調(diào)色板上的顏色的色彩值重新設(shè)定。用法:setpalette。函數(shù)調(diào)用方式為voidsetpalette(intvalue,intcolor);說明:參數(shù)value為色彩值,color為色彩值相應(yīng)的顏色名。當需要將一顏色指定為一色彩值地,即可調(diào)用此函數(shù)來設(shè)置。表1-7預(yù)先定義的調(diào)色板與色彩調(diào)色板色彩〇色彩1色彩2色彩3co黑色淡綠紅淺黃色Cl黑色淡青粉紅白色C2里伊…、1__?綠色紅色棕色C3黑色青色品粉紅淡灰色這個函數(shù)相對應(yīng)的頭文件為graphics.h返回值:無setallpalette。設(shè)置整個調(diào)色板函數(shù)功能:函數(shù)setallpalette()對某個調(diào)色板上的所有顏色重新設(shè)定彩色值。用法: 函數(shù)調(diào)用方式為voidsetallpalette(structpalettetype*p);說明:在低分辨率圖形顯示模式ド,該函數(shù)無效。若函數(shù)調(diào)用成功,則把p指向的palettctype結(jié)構(gòu)中的色彩值設(shè)置為當前調(diào)色板所有顏色的新色彩值。palettctype結(jié)構(gòu)定義如下:structpalettetype{unsignedcharsize;signedcharcolor[16];);這里必須把size設(shè)置為調(diào)色板顏色的數(shù)目,并把每個色彩值都裝入color數(shù)組相應(yīng)元素中,然后オ可用于調(diào)用函數(shù)。此函數(shù)對應(yīng)的頭文件是graphics.h返回值:無例:把16色的EGA/VGA顯示卡調(diào)色板改為其前16種顏色:structpalettetype;inti;for(i=0;i<16;i-H-)p.color[i]=i;p.size=16;sctallpalette(&p);setbackcolor()設(shè)置背景顏色函數(shù)功能:函數(shù)setbackcolor()把當前調(diào)色板顏色的第一個值改成指定的顏色值,以設(shè)置背景顏色。用法:此函數(shù)調(diào)用方式為voidsetbackcolor(intcolor);說明:參數(shù)color為指定的背景色,其有效值可以是顏色符號名,也可以是色彩值。表1-8列出了背景顏色供選取。表1-8背景顏色值顏色符號名 色彩值顏色符號名 色彩值BLACK(黑色) 0DARKGRAY(深灰)8BLUE(藍色) 1LIGHTBLUE(淡藍)9GREEN(綠色) 2LIGHTGREEN(淡綠)10CYAN(青色) 3LIGHTCYAN(淡青)11RED(紅色) 4L1GHTRED(淡紅)1,2MAGENTA(品紅)5 LIGHTMAGENTA(粉紅)13BROWN(棕色) 6YELLOW(黃色)14LIGHTGRAY(淡灰)7 WHITE(白色)15調(diào)用該函數(shù),將改變整個屏幕的顏色,如果新的背景色與原來屏幕的圖形顏色相同,盡管圖形信息不會丟失,但是看不見圖形了。如果所選背景色為對比鮮明的顏色,看不見的圖形就會重新清晰地顯現(xiàn)出來。這個函數(shù)的頭文件為graphics.h返回值:無例:把背景色置為淡藍色setbackcolor(LIGHTBLUE);setcolor()設(shè)置顏色函數(shù)功能:函數(shù)setcolor。設(shè)置當前繪圖顏色(或稱做前景色)。用法:該函數(shù)調(diào)用方式為voidssetcolor(intcolor);說明:參數(shù)color為選擇的當前繪圖顏色。在高分辨率顯示模式下,選取的color是實際色彩值,也可以用顏色符號名表示。如果已經(jīng)搖籃函數(shù)setpalette()改變了調(diào)色板色彩值,那么符號名就不可能產(chǎn)生預(yù)期作用了。在低分辨率顯示模式(320X200)下,選取的color是調(diào)色板顏色號,不是實際色彩值。此函數(shù)相應(yīng)的頭文件為graphics.h返回值:無例:設(shè)置16種不同的顏色,顯示16段直線:#include<graphics.h>voidmain(){intdriver,mode;inti;driver=DETECT;mode=0;initgraph(&driver,&mode;H,);moveto(0,200);for(i=0;i<16;i-H-)(setcolor(i);lincrel(20,0);}getch();restorecrtmode();)getbkcolor()返回背景色函數(shù)功能:函數(shù)getbackcolor()返回當前背景顏色。用法:函數(shù)調(diào)用方式為intgetbackcolor(void);說明:調(diào)用該函數(shù)后,獲得背景色,但其值不一定是調(diào)色板上的色彩值。這個函數(shù)對應(yīng)的頭文件是graphics.h返回值:返回當前繪圖色彩值。例:返回當前背景色彩值:printf("backgroundcoloris%d",getbkcolor());getcolor()返回當前繪圖顏色用法:此函數(shù)調(diào)用方式為intgetcolor(void);說明:對于使用彩色低分辨率顯示模式調(diào)色板,返回值是調(diào)色板顏色號,而不是實際顏色值,對于高分辨率顯示模式,返回值對應(yīng)于顏色值,除非調(diào)色板顏色已被函數(shù)setpalette?;騭etallpalette。改變了。這個函數(shù)相應(yīng)的頭文件為graphics.h返回值:返回當前繪圖顏色值。例:printff'drawingcoloris%d",getcolor());getmaxcolor。返冋最大顏色值函數(shù)用法:函數(shù)調(diào)用方式為intgetmaxcolor(void);說明:該函數(shù)調(diào)用后,在低分辨率模式下返回值為3(這種模式下有效顏色值為0至3);在高分辨率顯示模式下返回值可以是256或更高(此模式下有效顏色值為0至256或更高)。這個函數(shù)相應(yīng)的頭文件為graphics.h返回值:返回當前圖形模式下最大顏色值。例:顯示最大有效顏色值:#include<graphics.h>voidmain(){intdriver,mode;driver=DETECT;mode=0;initgraph(&driver,&mode,"");printfi(";largestcolor:%d",getmaxcolor());getch();restorecrtmode();)getpalette()獲取調(diào)色板函數(shù)功能:函數(shù)getpalette()將當前調(diào)色板的值填入palettetype型結(jié)構(gòu)中。用法:getpalette()函數(shù)調(diào)用方式為voidgetpalette(structpalettetype*p);說明:此函數(shù)調(diào)用執(zhí)行后,當前調(diào)色板的值被裝入p指向的結(jié)構(gòu)里;從而可從該結(jié)構(gòu)中獲得這個調(diào)色板的設(shè)置信息。palettetype型結(jié)構(gòu)定義如下#defineMAXCOLORS15structpalettetype{unsignedcharsize;signedcharcolors[MAXCOLORS+1];};其中size用于存放當前調(diào)色板的有效顏色個數(shù):colors數(shù)組的每ー元素中裝入調(diào)色板的ー個相應(yīng)顏色值。表!-9列出了這些顏色值(適用于EGA7GA)顏色符號名 色彩值EGA_BLACK(EGA黑色)0TOC\o"1-5"\h\zEGA_BLUE(EGA藍色) 1EGA_GREEN(綠色) 2EGA_CYAN(EGA青色) 3EGA_RED(紅色) 4EGA_MAGENTA(EGA品紅)5EGA_BROWN(EGA棕色) 20EGA_LIGHTGRAY(EGA淡灰)7EGA_DARKGRAY(EGA深灰) 56EGA_LIGHTBLUE(EGA淡藍)57EGA_LIGHTGREEN(EGA淡綠)58EGA_LIGHTCYAN(EGA淡青)59EGA_LIGHTRED(EGA淡紅)60EGA_LIGHTMAGENTA(EGA粉紅)61EGA_YELLOW(EGA黃色)62EGA_WHITE(EGA白色)63getpalette()函數(shù)對應(yīng)的頭文件是graphics.h返回值:無例:顯示由自動檢測所得顯示模式支持的調(diào)色板上的顏色數(shù)目:#includc<graphics.h>voidmain()(intdriver,mode;structpalettetypcp;driver=DETECT;/Z自動檢測mode=0;initgraph(&driver,&mode,,,n);getpalette(7p);printff'numberofcolorspalette:%d",p.size);getch();restorecrtmode();}getpalettesize()返回調(diào)色板大小函數(shù)功能:函數(shù)getalettesize。返回調(diào)色板的顏色數(shù)目。用法:該函數(shù)調(diào)用方式為intgetpalettesize((void);說明:調(diào)用這個函數(shù)后,就知道調(diào)色板上有多少顏色數(shù)目可在當前顯示模式下設(shè)置。此函數(shù)對應(yīng)的頭文件是graphics.h返回值:返回當前顯示模式支持的調(diào)色板的顏色數(shù)目。例:顯示當前顯示模式支持的調(diào)色板的顏色數(shù)目。intnumber;number=getpalettesize();printff'palettesize:%dM,number);getdefaultpalette()獲取缺省調(diào)色板函數(shù)功能:函數(shù)gctdcfaultpalctte。返回指向缺省調(diào)色板的指針。用法: 該函數(shù)調(diào)用方式為structpalettetype*getdefaultpalette(void);說明:調(diào)色板結(jié)構(gòu)類型palettetype定義如ド:#defineMAXCOLORS15structpalettetype{unsignedcharsize;signedcharcolors[MAXCOLORS+1];);在調(diào)用initgraph()初始化圖形系統(tǒng)時,給調(diào)色板結(jié)構(gòu)類型變量賦值,作為缺省調(diào)色板,調(diào)用這個函數(shù)可返回指向它的指針。此函數(shù)相應(yīng)的頭部文件為graphics.h返回值:返回指向缺省調(diào)色板(結(jié)構(gòu))的指針。例:顯示圖形系統(tǒng)初始化后所支持的調(diào)色板上的各種顏色。#include<graphics.h>#include<stdio.h>#include<conio.h>#include<stdlib.h>voidmain(){intgraphdriver=DETECT,graphmode;structpalettetypc*palette;interrorcode,color;initgraph(&graphdriver,&graphmode,H,');errorcode=graphresult();i出errorcode!=grOK){printff'Graphicserror%s\nM,grapherrormsg(errorcode));exit(l);|palette=getdcfaultpalette();printff'palette?>size%d\nM,palette->size);getch();fbr(color=0;color<palette->size;coIor-H-){setfillstyle(LINE_FILL,color);bar(20*(color-l),0,20*color,20);getch();}if(palette->size>1){dosetpalette(random(palette->size),random(palette->size));while(!kbhit());getch();}setallpalette(palette);closegraph();三、屏幕位置函數(shù)在圖形模式下,字符屏幕坐標被像素坐標取代了,這種像素坐標根據(jù)不同的顯示硬件,水平與垂直方向的分辨率可以從320X200變化到1280X1024等。由于分辨率的變化,以致要加載合適的圖菜驅(qū)動程序,因此大多數(shù)圖形程序是通過檢測硬件開始的,然后使用getmaxxO和getmaxy()等函數(shù)來決定屏幕尺寸,調(diào)整隨后的操作來適應(yīng)這些屏幕限制。getmaxx。返回最大x坐標函數(shù)功能:函數(shù)getmaxx()返回當前圖形模式下的最大x坐標,即最大橫向坐標。用法:函數(shù)調(diào)用方式為intmaxx(void);說明:此函數(shù)獨立于圖形視口設(shè)置,僅取決于顯示卡的顯示模式相應(yīng)的分辨率。這個函數(shù)對應(yīng)的頭文件是gr叩hics.h返回值:返回當前顯示模式最大x坐標值。例:使用本函數(shù)的例子見5Lgetmaxy()函數(shù)的例子中。getmaxy()返回最大y坐標函數(shù)功能:函數(shù)getmaxy()返回當前圖形模式下的最大y坐標,即最大縱向坐標。用法:函數(shù)調(diào)用方式為intgetmaxy(void);說明:此函數(shù)獨立于圖形視口設(shè)置,僅取決于顯示卡的顯示模式相應(yīng)的分辨率。這個函數(shù)對應(yīng)的頭文件為gr叩hics.h返回值:返回當前顯示模式的最大y坐標值。#includc<graphics.h>voidmain(){intdriver,mode;driver=DETECT;mode=0;initgraph(&driver,&mode,,M,);printff'maxx,y:%d%d,,,getmaxx(),getmaxy());getch();restorecrtmode();getx()返回x坐標函數(shù)功能:函數(shù)getx()返回當前圖形模式下當前位置的x坐標(水平像素坐標)。用法:此函數(shù)調(diào)用方式為intgctx(void);說明:這里坐標是相對于當前圖形視ロ的,如果沒有設(shè)置圖形視ロ,那么缺省的圖形視ロ為整個屏幕。這類似于文本模式下使用wherex()函數(shù)。getx()函數(shù)相應(yīng)的頭文件是graphics.h返回值:返回當前x坐標值。例:見53.gety()函數(shù)中的例子。gety()返回y坐標函數(shù)功能:函數(shù)gety()返回圖菜模式下當前位置的y坐標(垂直像素坐標)。用法:此函數(shù)調(diào)用方式為intgety(void);說明:函數(shù)返回的坐標是相對于當前圖形視ロ的,如果沒有設(shè)置圖形視ロ,那么缺省的圖形視口為整個屏幕,這類似于文本模式下使用wherey。函數(shù)。gety()函數(shù)對應(yīng)的頭文件是graphics.h返回值:返回當前y坐標值。例:顯示圖形模式下當前位置的x,y坐標值:prin氓"x:%d,y:%d",getx(),gety());moveto()函數(shù)功能:函數(shù)moveto()將當前位置移動到指定坐標的位置說明:這相當于文本模式下gotoxy()函數(shù)的操作,它提供對等的功能。此函數(shù)對應(yīng)的頭文件為graphics.h返回值:無例:把當前位置移到(66,88)位置上:moveto(66,88);moverel()相對移動函數(shù)功能:函數(shù)moverel()根據(jù)指定的偏移量,將當前位置移動ー個相對距離(即偏移量大小的距離),成為新的當前位置。用法:此函數(shù)調(diào)用方式為voidmoverel(intdx,intdy);說明:參數(shù)dx為x方向相對移動距離dy為y方向相對移動距離。相對移動對圖形應(yīng)用程序,往往要比絕對移動方便一些。這個函數(shù)對應(yīng)的頭文件是graphics.h返回值:無例:下面的程序,當語句執(zhí)行到當前位置在(90,90),則執(zhí)行后將移動到(100,120)的位置上。即x方向相對移動10,y方向相對移動30:moverel(10,30);四、圖形和圖像函數(shù)(一)像素函數(shù)putpiel()畫像素點函數(shù)gctpixel。返回像素色函數(shù)(二)直線和線型函數(shù)line()畫線函數(shù)lineto()畫線函數(shù)linerel()相對畫線函數(shù)setlinestyle()設(shè)置線型函數(shù)gctlincscttings()獲取線型設(shè)置函數(shù)setwritemode()設(shè)置畫線模式函數(shù)(三)、多邊形函數(shù)rectangle()畫矩形函數(shù)bar()畫條函數(shù)bar3d()畫條塊函數(shù)drawpoly()畫多邊形函數(shù)(四)、圓、弧和曲線函數(shù)getaspcctratio。獲取縱橫比函數(shù)circle。畫圓函數(shù)arc。畫圓弧函數(shù)ellipse。畫橢圓弧函數(shù)fillellipse。畫橢圓區(qū)函數(shù)pieslice。畫扇區(qū)函數(shù)sector。畫橢圓扇區(qū)函數(shù)getarccoords。獲取圓弧坐標函數(shù)(五)、填充函數(shù)setfillstyle。設(shè)置填充圖樣和顏色函數(shù)setfillpattem()設(shè)置用戶圖樣函數(shù)floodfillO填充閉域函數(shù)fillpoly。填充多邊形函數(shù)getfillsettings。獲取填充設(shè)置函數(shù)getfillpattem。獲取用戶圖樣設(shè)置函數(shù)(六)、圖像函數(shù)imagesize。圖像存儲大小函數(shù)getimage。保存圖像函數(shù)putimage()輸出圖像函數(shù)C語言圖形編程(三、繪圖函數(shù)一〇2)A四、圖形和圖像函數(shù)對許多圖形應(yīng)用程序,直線和曲線是非常有用的。但對有些圖形只能靠操作單個像素才能畫出。當然如果沒有畫像素的功能,就無法操作直線和曲線的函數(shù)。而且通過大規(guī)模使用像素功能,整個圖形就可以保存、寫、擦除和與屏幕上的原有圖形進行疊加。(一)像素函數(shù)putpixel()畫像素點函數(shù)功能:函數(shù)putpixel()在圖形模式下屏幕上畫一個像素點。用法:函數(shù)調(diào)用方式為voidputpixel(intx,inty,intcolor);說明:參數(shù)x,y為像素點的坐標,color是該像素點的顏色,它可以是顏色符號名,也可以是整型色彩值。此函數(shù)相應(yīng)的頭文件是graphics.h返回值:無例:在屏幕上(6,8)處畫一個紅色像素點:putpixel(6,8,RED);getpixel。返回像素色函數(shù)功能:函數(shù)getpixel()返回像素點顏色值。用法:該函數(shù)調(diào)用方式為intgetpixel(intx,inty);說明:參數(shù)x,y為像素點坐標。函數(shù)的返回值可以不反映實際彩色值,這取決于調(diào)色板的設(shè)置情況(參見setpalette。函數(shù))。這個函數(shù)相應(yīng)的頭文件為graphics.h返回值:返回一個像素點色彩值。例:把屛幕上(8,6)點的像素顏色值賦給變量color.color=getpixel(8,6);(二)直線和線型函數(shù)有三個畫直線的函數(shù),即line(),lineto(),linerel().這些直線使用整型坐標,并相對于當前圖形視ロ,但不一定受視ロ限制,如果視ロ裁剪標志clip為真,那么直線將受到視ロ邊緣截斷;如果clip為假,即使終點坐標或新的當前位置在圖形視U或屏幕極限之外,直線截斷到屏幕極限。有兩種線寬及幾種線型可供選擇,也可以自己定義線圖樣。下面分別介紹直線和線型函數(shù)。line()畫線函數(shù)功能:函數(shù)line()使用當前繪圖色、線型及線寬,在給定的兩點間畫一直線。用法:該函數(shù)調(diào)用方式為voidline(intstartx,intstarty,intendx,intendy);說明:參數(shù)startx,starty為起點坐標,endx,endy為終點坐標,函數(shù)調(diào)用前后,圖形狀態(tài)下屏幕光標(一般不可見)當前位置不改變。此函數(shù)相應(yīng)的頭文件為graphics.h返回值:無例:見函數(shù)60.1inerel()中的實例。lineto()畫線函數(shù)功能:函數(shù)lineto()使用當前繪圖色、線型及線寬,從當前位置畫一直線到指定位置。用法:此函數(shù)調(diào)用方式為voidlineto(intx,inty);說明:參數(shù)x,y為指定點的坐標,函數(shù)調(diào)用后,當前位置改變到指定點(x,y)。該函數(shù)對應(yīng)的頭文件為graphics.h返回值:無例:見函數(shù)60.1inerel()中的實例。1inerel()相對畫線函數(shù)功能:函數(shù)linerel。使用當前繪圖色、線型及線寬,從當前位置開始,按指定的水平和垂直偏移距離畫一直線。用法:這個函數(shù)調(diào)用方式為voidlinerel(intdx,intdy);說明:參數(shù)dx,dy分別是水平偏移距離和垂宜偏移距離。函數(shù)調(diào)用后,當前位置變?yōu)樵黾悠凭嚯x后的位置,例如,原來的位置是(8,6),調(diào)用函數(shù)linerel(10,18)后,當前位置為(18,24)。返回值:無例:下面的程序為畫線函數(shù)調(diào)用實例:#include<graphics.h>voidmain(){intdriver,mode;driver=DETECT;mode=0;

initgraph(&driver,&mode,MH);setcolor(15);line(66,66,88,88);lineto(100,100);linerel(36,64);getch();restorecrtmode();setlinestyle()設(shè)置線型函數(shù)功能:setlinestyle()為畫線函數(shù)設(shè)置當前線型,包括線型、線圖樣和線寬。用法:setlinestyle()函數(shù)調(diào)用方式為voidsetlinestyle(intstly,unsignedpattern,intwidth);說明:參數(shù)style為線型取值,也可以用相應(yīng)名稱表示,如表1-10中所示。參數(shù)pattern用于自定義線圖樣,它是!6位(bit)字,只有當style=USERBIT.LINE(值為1)時,pattern的值オ有意義,使用用戶自定義線圖樣,與圖樣中‘T'位對應(yīng)的像素顯示,因此,pattem=0xFFFF,則畫實線:pattem=0x9999,則畫每隔兩個像素交替顯示的虛線,如果要畫長虛線,那么pattern的值可為OxFFOO和OxFOOF,當style不為USERB1T_L1NE值時,雖然pattern的值不起作用,但扔須為它提供ー個值,一?般取為0。參數(shù)wigth用來設(shè)定線寬,其取值見表1-11,表中給出了兩個值,即1和3,實際上,線寬取值為2也是可以接受的。若用非法參數(shù)調(diào)用setlinestyle。函數(shù),那么graphresult。會返回錯誤代碼,并且當前線型繼續(xù)有效。TurboC提供的線型與線寬定義在頭文件graphics.h中,表1-10和1-11分別列出了參數(shù)的取值與含義。表1-10線型名稱取值含義SOLID_LINEDOTTEDLINECNTER_LINEDASHEDLINEUSERBITLINE01SOLID_LINEDOTTEDLINECNTER_LINEDASHEDLINEUSERBITLINE01234實線點線中心線虛線用戶自定義線型表1-11線寬取值說明NORMWIDTH(常寬) 1 ー個像素寬(缺省值)THICK_W1DTH(加寬) 3 三個像素寬這個函數(shù)的頭文件是graphics.h返回值:無例:下面的程序顯示了BC中所提供的線型圖樣:#includc<graphics.h>voidmain(){intdriver,mode;driver=DETECT;mode=0;initgraph(&driver,&mode,,n,);fbr(i=0;i<4;i-H-){setlinestyle(i,O,l);line(i*50,200,i*504-60,200))getch();restorecrtmode();}getlinesettings()獲取線型設(shè)置函數(shù)功能:函數(shù)getlinesettings()用當前設(shè)置的線型、線圖樣和線寬填寫linesettingstype型結(jié)構(gòu)。用法: 函數(shù)調(diào)用方式為voidgetlinesettings(structlinesettingstype*infb);說明:此函數(shù)調(diào)用執(zhí)行后,當前的線型、線圖樣和線寬值被裝入infb指向的結(jié)構(gòu)里,從而可從該結(jié)構(gòu)中獲得線型設(shè)置。linesettingstype型結(jié)構(gòu)定義如下:structlinesettingstype{intlinestyle;unsignedupattem;intthickness;);其中!inestyle用于存放線型,線型值為表1-10中的各值之一。upattern用為裝入用戶自定義

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論