c語(yǔ)言圖形編程_第1頁(yè)
c語(yǔ)言圖形編程_第2頁(yè)
c語(yǔ)言圖形編程_第3頁(yè)
c語(yǔ)言圖形編程_第4頁(yè)
已閱讀5頁(yè),還剩44頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C語(yǔ)言圖形編程(一、字符屏幕)作者:未知來源:未知加入時(shí)間:2004-7-20天新軟件園、屏幕操作函數(shù)clrscrO清除字符窗口函數(shù)window。字符窗口函數(shù)gotoxyO光標(biāo)定位函數(shù)clreolO清除光標(biāo)行尾字符函數(shù)insline。插入空行函數(shù)dellineO刪除一行函數(shù)gettext()拷進(jìn)文字函數(shù)puttext??匠鑫淖趾瘮?shù)movetext0移動(dòng)文字函數(shù)二、字符屬性函數(shù)textmode0文本模式函數(shù)highvideoO髙亮度函數(shù)lowvideo0低亮度函數(shù)normvideo(void);textcolor0文本顏色函數(shù)textattrO文本屬性函數(shù)textbackground0文本背景函數(shù)三、屏顯狀態(tài)函數(shù)wherex0光標(biāo)處x坐標(biāo)函數(shù)wherey()光標(biāo)處y坐標(biāo)函數(shù)gettextinfoO獲取文本窗口信息函數(shù)在BorlandC++里面提供了字符屏幕和圖形函數(shù)。字符扉幕的核心是窗「1(Window),它是屏幕的活動(dòng)部分,字符輸出或顯示在活動(dòng)窗口中進(jìn)行。窗口在缺省時(shí),就是整個(gè)屏幕。窗口可以根據(jù)需要指定其大小。同樣,對(duì)圖形函數(shù)的操作,也提供了(Viewport)。也就是說圖形函數(shù)的操作都是在視口上進(jìn)行。圖形視口與字符窗口具有相同的特性,用戶可以在屏幕上定義大小不同的視ロ,若不定義視口大小,它就是整個(gè)屏幕。窗口是在字符屏幕下的概念,只有字符才能在窗口中顯示出來,這時(shí)用戶可以訪問的最小單位為ー個(gè)字符。視口是在圖形屏幕狀態(tài)ド的概念,文本與圖形都可以在視口上顯示,用戶可訪問的最小單位是ー個(gè)像素(像素這ー術(shù)語(yǔ)最初用來指顯示器I:最小的、單獨(dú)的發(fā)光點(diǎn)單元。然而現(xiàn)在,其含義拓寬為指圖形顯示器上的最小可訪問點(diǎn))。字符和圖形狀態(tài)下,屏幕上.的位置都是由它們的行與列所決定的。有一點(diǎn)須指出:字符狀態(tài)左上角坐標(biāo)為(1,1),但圖形左上角坐標(biāo)為(0,0)。了解字符屏幕和圖形函數(shù)與窗口和視口的關(guān)系是很重要的。例如,字符屏幕光標(biāo)位置函數(shù)gotoxyO將光標(biāo)移到窗ロ的x,y位置上,這未必是相對(duì)于整個(gè)屏幕。ド面介紹常用的幾類字符扉幕函數(shù)的功能用途、操作方法及其例行程序。一、屏幕操作函數(shù)編寫程序繪圖經(jīng)常要用到對(duì)字符屏幕進(jìn)行操作?例如,在往屏幕I:寫字符之前,首先要將屏幕清除干凈。又如,有時(shí)需要在屏幕上多處寫上肉中刺樣的字符內(nèi)容,這時(shí)最好用屏幕拷貝來高效率地完成這一任務(wù)。對(duì)這些操作,BorlandC++提供了一系列字符屏幕操作函數(shù)來實(shí)現(xiàn)。clrscrO清除字符窗口函數(shù)功能:函數(shù)clrscrO清除整個(gè)當(dāng)前字符窗口,并且把光標(biāo)定位于左上角(1,1)處。用法:此函數(shù)調(diào)用方式為voidclrscr(void);說明:括號(hào)中void表示無參數(shù)。該函數(shù)相應(yīng)的頭文件為conio.h返回值:無例:使用這個(gè)函數(shù)的例子見4.clreol()函數(shù)的實(shí)例中。window。字符窗口函數(shù)功能:函數(shù)window()用于在指定位置建立一個(gè)字符窗口。用法:此函數(shù)調(diào)用方式為voidwindow(intleft,inttop,intright,intbottom);說明:函數(shù)中參數(shù)left,top為窗口左上角坐標(biāo);right,bottom為其右下角坐標(biāo)。若有一個(gè)坐標(biāo)是無效的,則window。函數(shù)不起作用。一旦該函數(shù)調(diào)用成功,那么所有定位坐標(biāo)都是相對(duì)于窗口的,而不是相對(duì)于整個(gè)屏幕。但是建立窗口所用的坐標(biāo)總是相對(duì)整個(gè)屏幕的絕對(duì)坐標(biāo),而不是相對(duì)當(dāng)前窗口的相對(duì)坐標(biāo)。這樣用戶就可以根據(jù)各種需要建立多個(gè)互不嵌套的窗口。此函數(shù)的頭文件為conio.ho返回值:無例:調(diào)用這個(gè)函數(shù)的實(shí)現(xiàn)例見3.gotoxy。函數(shù)的例子中。gotoxy。光標(biāo)定位函數(shù)功能:函數(shù)gotoxy。將字屏幕上的光標(biāo)移到當(dāng)前窗口指定的位置上。用法:這個(gè)函數(shù)調(diào)用方式為voidgotoxy(intx,inty);說明:括號(hào)里x,y是,光標(biāo)定位的坐標(biāo),如果其中?個(gè)坐標(biāo)值無效(如坐標(biāo)超界),那么光標(biāo)不會(huì)移動(dòng)。此函數(shù)在字符狀態(tài)(有時(shí)稱為文本狀態(tài))下經(jīng)常用到,其相應(yīng)的頭文件為conio.h返回值:無例:下面程序建立兩個(gè)窗口,然后在窗ロ里顯示字符,字符的位置是調(diào)用該函數(shù)確定的。#include"conio.h>voidborder(intstartx,intstarty,intendx,intendy)fregisterinti;gotoxyd,1);for(i=0;i<=endx-startx;i++)putch('-');gotoxy(1,endy-starty);for(i=0;i<=endx-startx;i++)putch('-');for(i=2;iく=endy-starty;i++){gotoxy(1,i);putch('1');gotoxy(endx-startx+1,i);putch('1');}}main()(voidborder(int,int,int,int);clrscrO;window(6,8,38,12);border(6,8,38,12);gotoxy(2,2);printf("window1");window(8,16,40,24);border(8,16,40,24);gotoxy(3,2);printf("window2");getchO;)clreolO清除光標(biāo)行尾字符函數(shù)功能:函數(shù)clreolO在當(dāng)前字符窗口中清除從光標(biāo)位置到行尾的所有字符,而光標(biāo)位置保持不變。用法:它的調(diào)用方式為voidclreol(void);說明:此函數(shù)的相應(yīng)頭文件為conio.h返回值:無例:程序屮使用了函數(shù)clreolO和clrscrO#include"conio.h>voidmain()(registerinti;gotoxy(6,8);printf("Thisisatestoftheclreol()function.");getchO;gotoxy(6,8);clreol();for(i=0;i<20;i++)printf("Heilo\n");getchO;clrscrO;}inslineO插入空行函數(shù)功能:函數(shù)inslineO插入?空行到當(dāng)前光標(biāo)所在行上,同時(shí)光標(biāo)以下的所有行都向下順移?行。用法:此函數(shù)的調(diào)用方式為voidinsline(void);說明:該函數(shù)只用于文本方式,并且在當(dāng)了符窗口才有效。這個(gè)函數(shù)的對(duì)應(yīng)頭文件是conio.h返回值:無例:程序給出了inslineO函數(shù)的用法。#include"conio.h"voidmain()(registserinti;clrscrO;for(i=l;i<24;i++)(gotoxy(l,i);printf("Thisisline%d\n",i);}getchO;gotoxyd,10);inslineO;getchO;)dellineO刪除一行函數(shù)功能:函數(shù)dellineO刪除當(dāng)前窗口內(nèi)光標(biāo)所在行,同時(shí)把該行下面所有行都上移一行。用法:此函數(shù)調(diào)用方式為voiddelline(void);說明:注意,如果當(dāng)前窗口小于整個(gè)屏幕,那么該函數(shù)只影響到窗口內(nèi)的字符。這個(gè)函數(shù)相應(yīng)的頭部文件是conio.h返回值:無例:先在屏幕上顯示16行文字,然后刪除第4行#include"conio.h"voidmain(){registerinti;clrscrO;for(i=0;iく16;i++)printf("line%d\n*,i);getchO;gotoxy(l,4);dellineO;getchO;}gettextO拷進(jìn)文字函數(shù)功能:函數(shù)gettextO用于文本狀態(tài)下將屏幕上矩形域內(nèi)的文字拷進(jìn)內(nèi)存。用法:該函數(shù)調(diào)用方式為intgettext(intleft,inttop,intright,intbottom,void*buffer);說明:函數(shù)中參數(shù)left,top為矩形區(qū)域的左上角坐標(biāo),right,bottom為其右下角坐標(biāo),這些坐標(biāo)是屏幕的絕對(duì)坐標(biāo),不是窗口的相對(duì)坐標(biāo)。buffer指針必須指向一個(gè)足夠保存該矩形域內(nèi)文字的內(nèi)存。所

用內(nèi)存大小按下式計(jì)算:點(diǎn)頭用字節(jié)數(shù)二矩形哉內(nèi)的行數(shù)X矩形域的列數(shù)X2這里將行數(shù)乘以列數(shù)再乘以2的原因是保存屏幕上每個(gè)字符要用兩個(gè)字節(jié)存儲(chǔ)單元,ー個(gè)字節(jié)存儲(chǔ)単元存放字符本身,而另ー個(gè)存放其屬性。此函數(shù)相應(yīng)的頭文件是conio.h返回值:若函數(shù)調(diào)用成功則返回1,否則返順0。例:把屏幕左上角點(diǎn)(LD和右下角點(diǎn)(10,10)的區(qū)域拷貝到buf指向的內(nèi)存中去。buf二(char*)malloc(10*10*2);if(Jbuf)gettext(1,1,10,10,buf);puttext0拷出文字函數(shù)功能:函數(shù)puttext()把先前由gettextO保存到buffer指向的內(nèi)存中的文字拷出到屏幕上一個(gè)矩形區(qū)域中。用法:此函數(shù)調(diào)用方式為intputtext(intleft,inttop,intright,intbottom,void*buffer);說明:函數(shù)里left,top為給出的屏幕上矩形區(qū)域的左上角點(diǎn),right,bottom為其右下角點(diǎn),其坐標(biāo)是用屏幕的絕對(duì)坐標(biāo),而不是用窗口的相對(duì)坐標(biāo)。該函數(shù)相應(yīng)的頭文件為conio.h返回值:函數(shù)調(diào)用成功返回值為1,否則返回〇。例:屏幕上某個(gè)區(qū)域內(nèi)容拷進(jìn)buf指向的內(nèi)存中,然后又將這些文字拷出到屏幕上新位置。buf=(char*)malloc(10*10*2);gettext(1,1,10,10,buf);puttext(16,16,30,30,buf);movetext()移動(dòng)文字函數(shù)功能:函數(shù)movetext()將屏幕上一個(gè)矩形區(qū)域的文字移到另一個(gè)區(qū)域上。用法:該函數(shù)調(diào)用方式為intmovetext(intleft,inttop,intright,intbottom,intnewleft,intnewtop);說明:上面left,top為矩形區(qū)域上角坐標(biāo),right,bottom為其右下角坐標(biāo),newleft,newright為移動(dòng)到區(qū)域左上角坐標(biāo)。這些坐標(biāo)是屏幕的絕對(duì)坐標(biāo),不是窗口的相對(duì)坐標(biāo)。若要把屏幕上一段文字移到屏幕的另一位置,那么使用movetext()函數(shù)比用gettext()然后再用puttext()效率更高。此函數(shù)相應(yīng)的頭文件是conio.h返回值:如果有?個(gè)以上坐標(biāo)無效,那么函數(shù)返回值為〇,否則返回1。列:把屏幕左上角點(diǎn)(8,8),右下角點(diǎn)(20,20)的矩形區(qū)域文字移動(dòng)到左上角點(diǎn)(10,10)的位置上:movetext(8,8,20,20,10,10);textmode()文本模式函數(shù)功能:函數(shù)textmode()針屏幕設(shè)置為文本模式(或者說字符狀態(tài))。用法:函數(shù)調(diào)用方式為voidtextmode(intmode);說明:參數(shù)mode必須為表1-2屮所示的模式之一⑴以用模式名(符號(hào)值),也可以用其等價(jià)的整數(shù)值。表1-2文本模式模式名(符號(hào)值)等價(jià)整數(shù)值模式名(符號(hào)值)等價(jià)整數(shù)值BW40040列黑白C40140列彩色BW80280列黑白C80380列彩色MONO780列單色LASTMODE-1上次模式調(diào)用該函數(shù)后,屏幕復(fù)位,并且所有字符的屬性恢復(fù)其缺省值。此函數(shù)對(duì)應(yīng)的頭文件是conio.h返回值:無例:把屏幕設(shè)置為80列彩色模式textmode(C80);二、字符屬性函數(shù)用戶可以設(shè)置字符顯示的高亮度或低亮度的寫的符閃爍及其背景顏色等。具有這些操作的函數(shù)稱為字符屬性函數(shù)。除了僅支持單模式和單色的顯示卡外,字符屬性函數(shù)適用于其余所有的顯示卡。highvideoO髙亮度函數(shù)功能:函數(shù)highvideoO設(shè)置屏幕為高亮度顯示。用法:此函數(shù)調(diào)用方式為voidhighvideo(void);說明:調(diào)用該函數(shù)后,寫到屏幕上的字符是高亮度的。此函數(shù)只適用于文本模式狀態(tài)(或說字符屏幕狀態(tài))。這個(gè)函數(shù)對(duì)應(yīng)的頭文件為conio.h返回值:無例:設(shè)置屏幕顯示為高亮度的。highvideo();lowvideoO低亮度函數(shù)功能:函數(shù)lowvideoO設(shè)置屏幕為低亮度顯示。用法:該函數(shù)調(diào)用方式為voidlowvideo(void);說明:調(diào)用該函數(shù)后,此時(shí)寫到扉幕上的字符是低亮度的。這個(gè)函數(shù)只適用于文本模式狀態(tài)(或說字符屏幕狀態(tài))。此函數(shù)相應(yīng)的頭文件是conio.h返回值:無例:設(shè)置屏幕顯示為低亮度的lowvideoO;normvideo(void);功能:函數(shù)normvideoO設(shè)置屏幕為正常亮度顯示。用法:這個(gè)函數(shù)調(diào)用方式為voidnormvideo(void);說明:調(diào)用該函數(shù)后,此時(shí)寫到屏幕上的字符是正常亮度的,該函數(shù)只適用于文本模式狀態(tài)(或說字符狀屏幕狀態(tài))〇此函數(shù)相應(yīng)的頭文件為conio.h返回值:無例:設(shè)置屏幕顯示為正常亮度。normvideo0;textcolorO文本顏色函數(shù)功能:函數(shù)textcolorO設(shè)置字符屏幕下文本顏色(或字符顏色),它也可以用于使字符閃爍。用法:這個(gè)函數(shù)調(diào)用方式為voidtextcolor(intcolor);說明:函數(shù)中參數(shù)color的有效值可取表!-3中的顏色名(即宏名)或等價(jià)值。表!-3顏色名與等價(jià)值名等價(jià)值含義BLACK0黑BLUE1花GREEN2綠CYAN3I1!'RED4紅MAGENTA5洋紅BROWN6棕LIGHTGRAY7淡灰DRAKGRAY8深灰LIGHTBLUE9淡藍(lán)LIGHTGREEN10淡綠LIGHTCYAN11淡青LIGHTRED12淡紅LIGHTMAGENTA13淡洋紅YELLOW14黃WHITE15自BLINK128閃爍textcolorO函數(shù)執(zhí)行后,只影響其后輸出探險(xiǎn)符顏色,而不改變已經(jīng)在當(dāng)前屏幕上的其它字符顏色。顯然,如果需要輸出的字符閃爍,只要將函數(shù)中參數(shù)color取為BLINK即可,如果要使字符帶顏色閃爍,就必須將所選的顏色值與128作“或”運(yùn)算。此函數(shù)相應(yīng)的頭文件是conio.h返回值:無例:下面程序段中第?條語(yǔ)句使輸出的字符閃爍,第三條語(yǔ)句使字符輸出為經(jīng)色同時(shí)閃爍:textcolor(BLINK);printf("hello");textcolor(RED;BLINK);textattrO文本屬性函數(shù)功能:函數(shù)textattrO用于設(shè)置文本屬性,即字符背景顏色、字符本身顏色和字符閃爍與否。用法:函數(shù)調(diào)用方式為voidtextattr(intattribute);說明:設(shè)置字符背景顏色屬性字節(jié)的最簡(jiǎn)單方法是,用所選的背景顏色值乘以16再與字符顏色值作按位或(OR)運(yùn)算。例如需要紅色背景、綠色字符,就設(shè)置成RED*16|GREEN,若還要字符閃爍,就把背景顏色值、字符顏色值與閃爍值一起按位作或運(yùn)算。如藍(lán)背景、黃字符且閃爍,就設(shè)置成為:YELLO|128|BLUE*16第。位用于設(shè)置字符顏色.此函數(shù)相應(yīng)的頭文件為conio.h返回值:無例:設(shè)置背景為藍(lán)色、字符為紅色并且字符閃爍:textattr(RED|128|BLUE*16);textbackground()文本背景函數(shù)功能:函數(shù)textbackground0設(shè)置字符屏幕下文本背景顏色(或字符背景顏色)。用法:此函數(shù)調(diào)用方式為voidtextbackground(intbcolor);說明:參數(shù)bcolor的有效值取表1-4背景顏色(即宏名)或等價(jià)值。表1-4背景顏色與等價(jià)值背景顏色等價(jià)值含義BLACK0里BLUE1藍(lán)GREEN2綠CYAN3青RED4紅MAGENTA5洋紅BROWN6棕調(diào)用該函數(shù)只影響后續(xù)寫的字符背景顏色,而不改變當(dāng)前顯示在屏幕上的字符背景顏色。這個(gè)函數(shù)對(duì)應(yīng)的頭文件是conio.h返回值:無例:設(shè)置文本背景顏色為藍(lán)色:textbackground(BLUE));三、屏顯狀態(tài)函數(shù)這里提供三個(gè)在文本模式下屏幕顯示狀態(tài)的函數(shù)wherex()光標(biāo)處x坐標(biāo)函數(shù)功能:函數(shù)wherexO返回當(dāng)前窗口中光標(biāo)處橫向坐標(biāo)。用法:此函數(shù)調(diào)用方式為intwherex(void);說明:這個(gè)函數(shù)調(diào)用無參數(shù),其對(duì)應(yīng)的頭文件是conio.h返回值:函數(shù)調(diào)用成功,返回光標(biāo)處X坐標(biāo)值。例:調(diào)用這個(gè)函數(shù)的實(shí)例見18.wherey()函數(shù)的例中。wherey()光標(biāo)處y坐標(biāo)函數(shù)功能:函數(shù)whereyO返回當(dāng)前窗口中光標(biāo)處縱向坐標(biāo)。用法:該函數(shù)調(diào)用方式為iniwherey(void);說明:此函數(shù)調(diào)用無參數(shù),其相應(yīng)的頭文件是conio.h返回值:函數(shù)調(diào)用成功,返回光標(biāo)處y坐標(biāo)值。例:調(diào)作函數(shù)wherexO與wherey(),返回當(dāng)前光標(biāo)處x坐標(biāo)與y坐標(biāo),并賦給整型變量xpos,yposointxpos,ypos;xpos=wherex0;ypos=wherey();gettextinfoO獲取文本窗口信息函數(shù)功能:函數(shù)gettextinfoO獲取當(dāng)前文本窗口信息,并存放在實(shí)參結(jié)構(gòu)中。用法:函數(shù)調(diào)用方式為voidgettextinfo(structtext-info*info);說明:函數(shù)中參數(shù)info為structtext-info結(jié)構(gòu)型指針,structtext-info結(jié)構(gòu)在此函數(shù)相應(yīng)的頭文件中定義為:structtext-info{unsignedcharwinleft;//窗口左上角X坐標(biāo)unsignedcharwintop;//窗口左上角y坐標(biāo)unsignedcharwinright;//窗口右下角X坐標(biāo)unsignedcharwinbottom;//窗口右下角y坐標(biāo)unsignedcharattribute;//文本屬性u(píng)nsignedcharnormattr;//正常屬性u(píng)nsignedcharcurrmode;//當(dāng)前屏顯模式unsignedcharscreenhight//文本窗口高度(以行數(shù)計(jì))unsignedcharscreenwidth;//文本窗口寬度(以字符個(gè)數(shù)計(jì))unsignedcharcurx;//光標(biāo)處X坐標(biāo)unsignedcharcury;//光標(biāo)處y坐標(biāo)};記住,調(diào)用函數(shù)gettextinfoO時(shí),要傳遞structtext-info結(jié)構(gòu)型指針或該結(jié)構(gòu)的首地址,不要傳遞結(jié)構(gòu)變量本身。這個(gè)函數(shù)對(duì)應(yīng)的頭文件是conio.h返回值:返回文本窗口角點(diǎn)坐標(biāo)、高寬度、文本屬性等值,并存放在info所指向的結(jié)構(gòu)變量中。例:程序語(yǔ)句說明如何正確調(diào)用gettextinfoO函數(shù):structtext-infowin-status;gettextinfo(&win-status); C語(yǔ)言圖形編程(二.圖形顯示) 作者:未知來源:未知加入時(shí)間:2004-7-20天新軟件園ー、確定顯示卡二、選擇顯示模式三、圖形顯示detectgraph()顯示卡檢測(cè)函數(shù)initgraph0圖形初始化函數(shù)getdrivername()獲取圖形驅(qū)動(dòng)程序名的指針getgraphmode0獲取圖形模式函數(shù)getmoderange()獲取模式值范圍函數(shù)getmaxmode0獲取最大顯示模式函數(shù)getmodename()獲取顯示模式名函數(shù)graphdefaultsO圖形設(shè)置復(fù)位缺省值函數(shù)setgraphmode()設(shè)置圖形模式函數(shù)restorecrtmode()恢復(fù)文本顯示模式函數(shù)graphresult()圖形操作結(jié)果函數(shù)grpaherrormsgO圖形錯(cuò)誤信息函數(shù)setgraphbufsize()設(shè)置圖形緩沖區(qū)大小函數(shù)setactivepage0設(shè)置可輸出顯示頁(yè)函數(shù)setvisualpage()設(shè)置可見顯示頁(yè)數(shù)closegraph()關(guān)閉圖形模式函數(shù)ー、確定顯示卡微機(jī)系統(tǒng)顯示部分由顯示器(monitor)和顯示卡(adapter)兩部分組成。顯示器是獨(dú)立于主機(jī)的ー種外部設(shè)備,顯示卡或稱顯示適配卡,也有的稱圖形卡,是插在主機(jī)上的ー塊電路板。但也有的顯示卡與主機(jī)板設(shè)計(jì)在ー起。顯示卡包括寄存器組、存儲(chǔ)器和控制電路三大部分。其中存儲(chǔ)器又包括顯示RAM和ROMBIOS兩部分,微機(jī)對(duì)顯示屏幕的所有操作都是通過顯示卡來實(shí)現(xiàn)的。因此要進(jìn)行圖形顯示,首先要確定計(jì)算機(jī)上安裝的是何種顯示卡。ー種方法是詢問計(jì)算機(jī)或終端使用者,確定將要使用的顯示卡類型。這種方法很難,因?yàn)樯踔翆I(yè)程序員也不總是能確定他正在使用什么樣的硬件。另?種方法是用軟件査詢硬件以識(shí)別當(dāng)前的配置。如果有一些識(shí)別硬件的標(biāo)準(zhǔn),這就很簡(jiǎn)單了。在BorlandC中對(duì)現(xiàn)在所使用的各種顯示卡提供了支持,這只要調(diào)用detectgraphO函數(shù)就可以了,該函數(shù)為程序員確定計(jì)算機(jī)上使用的顯示卡類型。二、選擇顯示模式顯示模式是指顯示卡支持的分辨率與相應(yīng)的顏色配置。每臺(tái)計(jì)算機(jī)都配置了某種類型顯示卡,可以為該顯示卡指定顯示模式。三、圖形顯示進(jìn)行圖形顯示首先要確定顯示卡,然后選擇其顯示模式。這些工作都可以調(diào)用圖形功能函數(shù)來完成,其實(shí)就是把適合于顯示卡的圖形驅(qū)動(dòng)程序裝入內(nèi)存。如果圖形驅(qū)動(dòng)程序未裝入內(nèi)存,那么圖形函數(shù)就不能操作。detectgraphO顯示卡檢測(cè)函數(shù)功能:函數(shù)detectgraphO在計(jì)算機(jī)上安裝有顯示k的情況下,測(cè)定其顯示k的類型。用法:此函數(shù)調(diào)用方式為voiddetectgraph(int*driver,int*mode);說明:函數(shù)把driver所指向的整型變量設(shè)置為圖形驅(qū)動(dòng)程序的代碼,把mode所指向的整型變量設(shè)置為顯示卡支持的最高有效模式(即該顯示卡能支持的最髙分辨率)。該函數(shù)相應(yīng)的頭文件為graphics.h返回值:返回適合了該顯示卡的圖形驅(qū)動(dòng)程序的代碼(也稱等價(jià)值),并存放在driver指向的變量中。若計(jì)算機(jī)系統(tǒng)中無圖形硬件,則由driver指向的變量設(shè)置為ー2。例:檢測(cè)計(jì)算機(jī)是否裝有顯示卡:intdriver,mode;detectgraph(&driver,&mode);if(driver=-2)(printf(*nographicsadapterinthecomputer*);exit(1);initgraphO圖形初始化函數(shù)功能:函數(shù)initgraphO用于初始化圖形系統(tǒng),把適合的圖形驅(qū)動(dòng)程序裝入內(nèi)存,設(shè)置圖形函數(shù)所用的顯示模式。用法:該函數(shù)調(diào)用方式為voidinitgraph(int*driver,int*mode,char*path);說明:1)函數(shù)中參數(shù)driver指向圖形驅(qū)動(dòng)程序(或者等價(jià)值)。在頭部文件graphics.h中定義了圖形驅(qū)動(dòng)程序的宏名與其等價(jià),如下:宏名等價(jià)值DETECT0CGA1MCGA2EGA3EGA644EGAMONO5IBM85146HERCMONO7ATT4008VGA9PC327010注:在現(xiàn)在的計(jì)算機(jī)中,上表中的許多顯示卡已經(jīng)過時(shí),不再使用。這樣就不必?fù)?dān)心圖形驅(qū)動(dòng)程序的準(zhǔn)確名字,而只要用其等價(jià)值即可,若使用detect(即等價(jià)值0)時(shí),initgraphO函數(shù)自動(dòng)檢測(cè)當(dāng)前計(jì)算機(jī)中裝有的顯示卡類型,并且選用最大分辨率的顯示模式。2)參數(shù)mode指向顯示模式或用等價(jià)值(風(fēng)表1-5),mode所指的值必須是有效模式之%3)參數(shù)path指向圖形驅(qū)動(dòng)程序所在的路徑,例如path="C:\TC\BG1”.若沒有指定路徑,就在當(dāng)前目錄下尋找。一般圖形驅(qū)動(dòng)程序包含在.BGI文件中,這些文件是系統(tǒng)可以得到的。這個(gè)函數(shù)對(duì)應(yīng)的頭文件是graphics,h?返回值:無例:調(diào)用initgraphO自動(dòng)檢測(cè)硬件圖形系統(tǒng),并選用最大分辨率顯示模式。initdrver,mode;driver=DETECT;mode二。;initgraph(&driver,&mode,);getdrivername()獲取圖形驅(qū)動(dòng)程序名的指針功能:函數(shù)getdrivernameO返回指向當(dāng)前圖形驅(qū)動(dòng)程序名的指針。用法:此函數(shù)調(diào)用方式為char*getdrivername(void);說明:本函數(shù)可以用來檢測(cè)顯示卡,但只能在initgraphO設(shè)置圖形驅(qū)動(dòng)程序和顯示模式之后調(diào)用。該函數(shù)相應(yīng)的頭文件為graphics.h返回值:返回一指針,指向含有當(dāng)前圖形驅(qū)動(dòng)程序名的字符串。例:顯示當(dāng)前圖形驅(qū)動(dòng)程序名:#inc1ude<graphics.h>#include<stdio.h>voidmain()(intgraphdriver=DETECT,graphmode;char*s;initgraph(ftgraphdriver,&graphmode,);s=getdrivername0;outtext(*Usingdriver:*);outtext(s);getchO;closegraph();)getgraphmode0獲取圖形模式函數(shù)功能:函數(shù)getgrapgmodeO返回當(dāng)前圖形模式。用法:該函數(shù)調(diào)用方式為intgetgraphmode(void);說明:getgraphmode()函數(shù)無參數(shù)調(diào)用。這個(gè)函數(shù)對(duì)應(yīng)的頭文件是graphics,h返回值:返回initgraphO或setgraphmode()所設(shè)置的當(dāng)前圖形模式值。例:顯示當(dāng)前圖形模式的代碼:printf("graphicsmodeis%d*,getgraphmode());getmoderange()獲取模式值范圍函數(shù)功能:函數(shù)getmoderange()返回指定的圖形驅(qū)動(dòng)程序能夠支持的最低和最高模式值。用法:函數(shù)調(diào)用方式為voidgetmoderange(intdriver,int*lowmode,inthimode);說明:參數(shù)driver是用來調(diào)用此函數(shù)時(shí),指定圖形驅(qū)動(dòng)程序等價(jià)值或宏名。其有效值如下:DETECT0CGA1MCGA2EGA3EGA644EGAMONO5IBM85146HERCMONO7ATT4008VGA9PC327010注:上表中的許多顯示卡在現(xiàn)在的計(jì)算機(jī)上已經(jīng)過時(shí),僅作參考。該函數(shù)想應(yīng)的頭文件為graphics.h返回值:返回的最小和最大有效值存放在參數(shù)指針lowmode和himode分別指向的整型變量中。例:顯示當(dāng)前圖形硬件的顯示模式的范圍值:^include*graphics,h*voidmainO(intdriver,mode;intlow,high;modeニ〇;initgraph(&driver,&mode,);getmoderange(driver,&low,&high);printf(*moderange:%d—%d,low,high);getchO;rstorecrtmodeO;)getmaxmodeO獲取最大顯示模式函數(shù)功能:函數(shù)getmaxmodeO返回當(dāng)前加載的圖形驅(qū)動(dòng)程序所支持的最大有效顯示模式。用法:函數(shù)調(diào)用方式為intgetmaxmode(void);說明:本函數(shù)無參數(shù)調(diào)用,返回圖形驅(qū)動(dòng)程序所支持的最大顯示模式,所有圖形驅(qū)動(dòng)程序支持從0到getmaxmo加()函數(shù)返回值中的任?整數(shù)值(對(duì)應(yīng)的顯示模式)。這個(gè)函數(shù)對(duì)應(yīng)的頭文件是graphics,h返回值:返回圖形驅(qū)動(dòng)程序所支持的顯示模式最大值。例:顯示當(dāng)前最大顯示模式:printf("Themaxmodeofthisdriveris%d\n",getmaxmodeO);getmodename()獲取顯示模式名函數(shù)功能:函數(shù)getmodename??色@取當(dāng)前圖形驅(qū)動(dòng)程序支持的指定顯示模式的名字。用法:此函數(shù)調(diào)用方式為char*getmodename(intmodecode);說明:參數(shù)modecode為整型值。用以指定一顯示模式值調(diào)用該函數(shù)。這個(gè)函數(shù)對(duì)應(yīng)的頭文件graphics.h返回值:返回指定模式值的顯示模式名。例:顯示當(dāng)前最大顯示模式名:#include<graphics.h>#include<stdio.h>voidmain()(intgraphdriver=DETECT,graphmode;intmodecode;char*s;initgraph(&graphdriver,&graphmode,**);modecode=getmaxmode();s=getmodename(modecode);outtext(*Themaxmodenameis:");outtext(s);getchO;closegraph();}graphdefaultsO圖形設(shè)置復(fù)位缺省值函數(shù)功能:函數(shù)grpahdefaultsO把所有圖形設(shè)置復(fù)位為它們的缺省值,這包括把圖形視口復(fù)位為全屏幕:當(dāng)前位置定位在0,0;調(diào)色板、背景色和繪圖色都被復(fù)位;填充顏色、填充圖樣、文本文字和排齊方式都返回到它位的缺省值。用法:此函數(shù)調(diào)用方式為voidgraphdefaults(void);說明:該函數(shù)無參數(shù)調(diào)用。這個(gè)函數(shù)相應(yīng)的頭文件為graphics,h返回值:無例:將圖形系統(tǒng)恢復(fù)為其缺省值:graphdefaults();setgraphmode0設(shè)置圖形模式函數(shù)功能:函數(shù)setgraphmodeO用當(dāng)前圖形驅(qū)動(dòng)程序有效的圖形模式調(diào)用,一旦被調(diào)用,setgraphmode()選擇?個(gè)新的圖形模式。注意,圖形顯示模式必須事先由initgraph()初始化。用法:該函數(shù)調(diào)用方式為voidsetgraphmode(intmode);說明:參數(shù)mode調(diào)用時(shí)為指定的模式值。此函數(shù)相應(yīng)的頭部文件是graphics,h返回值:無例:把VGA圖形卡設(shè)置為VGAMED模式:setgraphmode(VGAMED); /Z圖形系統(tǒng)已經(jīng)初始化restorecrtmode()恢復(fù)文本顯示模式函數(shù)功能:函數(shù)restrecrtmodeO將顯示模式恢復(fù)到調(diào)用initgraph。時(shí)檢測(cè)出的初始文本模式。用法:這個(gè)函數(shù)調(diào)用方式為voidrestorecrtmode(void);說明:函數(shù)restorecrtmode。和setgraphmodeO函數(shù)一起使用,可以實(shí)現(xiàn)文本與圖形顯示之間的切換。此函數(shù)對(duì)應(yīng)的頭文件為graphics.h返回值:無例:恢復(fù)顯示模式為初始文本模式:restorecrtmode0;graphresult()圖形操作結(jié)果函數(shù)功能:函數(shù)graphresult()函數(shù)返回最后一次圖形操作的代碼。用法:此函數(shù)調(diào)用方式為intgraphresult(void);說明:C為圖形設(shè)置了代碼,它們是從ー15到。的整數(shù)值。其含義見表1-6。調(diào)用該函數(shù)時(shí),出錯(cuò)狀態(tài)被復(fù)位為〇,所以返回值(代碼)最好存于變量中,以供需要時(shí)檢測(cè),進(jìn)行ドー步圖形操作。圖形操作信息名稱代碼含義grOKgrNoInitGraphgrNoDetectedgrFileNoFoundgrlnvalidDrivergrNoLoadMemgrNoScanMemgrNoFloadMemgrFontNotFoundgrNoFontMemgrInvalidModegrErrorgrlOerrorgrlnvalidFontgr1nva1idDeviceNum0-1-2-3-4-5-6-7-8-9-10-11-12-13-14-15成功沒有圖形初始化沒有檢測(cè)到圖形硬件沒有找到圖形驅(qū)動(dòng)文件無效圖形驅(qū)動(dòng)程序沒有足夠內(nèi)存裝入圖形驅(qū)動(dòng)程序Scan填充內(nèi)存不足Flood填充內(nèi)存不足沒有找到字體文件沒有足夠內(nèi)存用于裝字體文件無效圖形模式一般圖形錯(cuò)誤輸入輸出錯(cuò)誤無效字體文件無效字體號(hào)無效設(shè)備號(hào)這個(gè)函數(shù)對(duì)應(yīng)的頭部文件是graphics,h返冋值:返冋最后一次圖形操作結(jié)果相應(yīng)的代碼。例:調(diào)用graphresult0函數(shù)的實(shí)例見下面grapherrormsg0函數(shù)的例子。grpaherrormsgO圖形錯(cuò)誤信息函數(shù)功能:函數(shù)grapherrormsgO返回指向出錯(cuò)代碼相應(yīng)的錯(cuò)誤信息字符串的指針。用法:此函數(shù)調(diào)用方式為char*grapherrormsg(interrcode);說明:參數(shù)errcode值,即出錯(cuò)代碼由調(diào)用函數(shù)graphresultO獲得。這里所有出錯(cuò)代碼及相應(yīng)的錯(cuò)誤信息如表!-6中所述。該函數(shù)相應(yīng)的頭文件是grpahics.h返回值:返回?個(gè)指向該出錯(cuò)代碼相應(yīng)的錯(cuò)誤信息字符串的指針。例:用文字形式顯示有關(guān)出錯(cuò)代碼相應(yīng)的錯(cuò)誤信息:interrorcode;errorcode=graphresult();printf(%s*?grapherrormsg(errcode));setgraphbufsizeO設(shè)置圖形緩沖區(qū)大小函數(shù)功能:函數(shù)setgraphbufsizeO用來設(shè)置有的圖形函數(shù)(如floodfill等)所要用到的內(nèi)存緩沖區(qū)大小。用法:函數(shù)調(diào)用方式為unsignedsetgraphbufsize(unsignedbufsize);說明:這里無符號(hào)參數(shù)bufsize為所設(shè)置的緩沖區(qū)大小。一般不需要用到該函數(shù),僅使用由initgraphO函數(shù)產(chǎn)生的內(nèi)存緩沖區(qū)就夠了,緩沖區(qū)大小缺省時(shí)為4KB(即4096個(gè)字節(jié)),足以用來填充一個(gè)大約有650個(gè)頂點(diǎn)的多邊形,但是為了節(jié)省內(nèi)存,用戶可以減少緩沖區(qū)的大小,或者由于需要更多的緩沖區(qū)內(nèi)存,這時(shí)可用函數(shù)setgraphbufsizeO來增加緩沖區(qū)大小。注意,使用setgraphbufsizeO函數(shù)必須在調(diào)用initgraphO之前。返回值:返回先前定義的圖形緩沖區(qū)字節(jié)數(shù)。例:調(diào)用此函數(shù)設(shè)置圖形緩沖區(qū)為8KB字節(jié):setgraphbufsize(0x2000);setactivepageO設(shè)置可輸出顯示頁(yè)函數(shù)功能:函數(shù)setactiveageO設(shè)置用作圖形輸出的顯示頁(yè)。用法:這個(gè)函數(shù)調(diào)用方式為voidsetactivepage(intpagenum);說明:參數(shù)pagenum為選擇的顯示頁(yè)號(hào),如果調(diào)用成功,那么后續(xù)圖形輸出就寫到選定的輸出頁(yè)上。缺省時(shí)是以〇頁(yè)作為當(dāng)前輸出頁(yè)。該函數(shù)只在圖形驅(qū)動(dòng)程序及其顯示模式支持多個(gè)顯示頁(yè)時(shí)オ起作用。此函數(shù)相應(yīng)的頭文件為graphics.h返回值:無例:設(shè)置1頁(yè)為輸出顯示頁(yè):setactivepage(1);setvisualpageO設(shè)置可見顯示頁(yè)數(shù)功能:函數(shù)setvisualpageO設(shè)置屏幕上可見的顯示頁(yè)。用法:函數(shù)調(diào)用方式為voidsetvisualpage(intpagenum);說明:參數(shù)pagenum為設(shè)置的顯示頁(yè)號(hào)。缺省時(shí)是以。頁(yè)作為當(dāng)前可見頁(yè)。調(diào)用這個(gè)函數(shù)和調(diào)用setactivepageOー樣,僅在圖形驅(qū)動(dòng)程序及其顯示模式支持多個(gè)顯示頁(yè)時(shí)オ有效。用戶可以用系統(tǒng)所支持的任何顯示頁(yè),在它們之間切換,當(dāng)然一次只能有一個(gè)顯示頁(yè)在屏幕上可見,有時(shí)需要在ー頁(yè)上建立后備圖形萇圖像,它在當(dāng)時(shí)不顯示,一旦需要時(shí),可以馬上切換到該頁(yè),如要實(shí)現(xiàn)動(dòng)畫效果,只需切換顯示頁(yè)號(hào)即可。用setvisualpageO函數(shù)選定實(shí)際顯示在屏幕上的可見頁(yè),用setactivepageO函數(shù)選擇當(dāng)前圖形輸出頁(yè),從而實(shí)現(xiàn)圖形頁(yè)之間的顯示切換,通常這兩個(gè)函數(shù)都是缺省的,這時(shí)輸出頁(yè)就是可見頁(yè)。若不繪制動(dòng)畫就不需要用到這兩個(gè)函數(shù)。這兩個(gè)函數(shù)對(duì)應(yīng)的頭文件是graphics,h返回值:無例:設(shè)置可見頁(yè)為第1頁(yè):setvisualpage(1);closegraph()關(guān)閉圖形模式函數(shù)功能:函數(shù)closegraphO將系統(tǒng)圖形模式關(guān)閉,,復(fù)位到initgraph()初始文本模式,并且釋放圖形驅(qū)動(dòng)程序、字體和內(nèi)部緩沖區(qū)所占用的系統(tǒng)內(nèi)存。用法:這個(gè)函數(shù)調(diào)用方式為voidclosegraph(void);說明:當(dāng)用戶的程序既用到圖形輸出又用到非圖形輸出時(shí),應(yīng)該調(diào)用此函數(shù)。特別是程序多次調(diào)用initgraphO函數(shù)的情況,要相應(yīng)地調(diào)用closegraph函數(shù),釋放調(diào)用initgraph()所占用的內(nèi)存,否則內(nèi)存很快就滿了,程序無法運(yùn)行,如果程序結(jié)束,也可以用restorecrtmodeO函數(shù)代替該函數(shù),這樣任何分配的內(nèi)存都將釋放。此函數(shù)對(duì)應(yīng)的頭文件是graphics.h返回值:無例:關(guān)閉圖形系統(tǒng):closegraphO;C語(yǔ)言圖形編程(三、繪圖函數(shù)一01)作者:未知來源:未知加入時(shí)間:2004-7-20天新軟件園ー、屏幕和視ロ設(shè)置與清除函數(shù)setviewport0設(shè)置圖形視ロ函數(shù)clearviewport0清除圖形視ロ函數(shù)cleardevice0清除屏幕函數(shù)getviewsettingsO獲取圖形視口設(shè)置函數(shù)二、調(diào)色板和顏色函數(shù)selpalette()設(shè)置調(diào)色板函數(shù)setallpaletteO設(shè)置整個(gè)調(diào)色板函setbackcolor()設(shè)置背景顏色函數(shù)setcolor0設(shè)置顏色函數(shù)getbkcolorO返冋背景色函數(shù)getcolorO返回當(dāng)前繪圖顏色getmaxcolorO返冋最大顏色值函數(shù)getpaletteO獲取調(diào)色板函數(shù)getpalettesizeO返回調(diào)色板大小函數(shù)getdefaultpaletteO獲取缺省調(diào)色板函數(shù)三、屏幕位置函數(shù)getmaxxO返回最大x坐標(biāo)函數(shù)getmaxy()返回最大y坐標(biāo)函數(shù)getx()返回x坐標(biāo)函數(shù)getyO返回y坐標(biāo)函數(shù)movetoO函數(shù)movereK)相對(duì)移動(dòng)區(qū)數(shù)BorlandC++提供了一整套綜合性的圖形函數(shù),上節(jié)介紹了其中有關(guān)圖形顯示的函數(shù),本節(jié)介紹其中的繪圖函數(shù),下節(jié)將介紹它的圖形文本函數(shù)。一般繪圖時(shí),首先要清除屏幕,設(shè)置圖形視ロ,設(shè)置繪圖顏色,然后在屏幕上某個(gè)位置畫點(diǎn)或直線或曲線等。下面給出具有這些功能的函數(shù)。?、屏幕和視ロ設(shè)置與清除函數(shù)setviewport()設(shè)置圖形視ロ函數(shù)功能:函數(shù)setviewport()設(shè)置當(dāng)前圖形視口。用法:函數(shù)調(diào)用方式為voidsetviewport(intleft,inttop,intright,intbottom,intclip);說明:參數(shù)left,top是左上角坐標(biāo),right,bottom是右下角坐標(biāo),它們都是絕對(duì)屏幕坐標(biāo)。傳給setviewport()的第五個(gè)參數(shù)是clip,如果clip為1,則超出視ロ的輸出圖形自動(dòng)被裁剪掉,即所有作圖限制于當(dāng)前圖彫視ロ之內(nèi),如果clip為〇,則不做裁剪,即作圖將無限制地?cái)U(kuò)展于視ロ周界之外,直到屏幕邊界。若無效參數(shù)傳入setviewport(),則graphresult()函數(shù)返回值T1,先前視ロ設(shè)置仍有效。setviewport()函數(shù)的對(duì)應(yīng)頭文件為graphics,h返回值:無例:建立對(duì)角為(6,6)和(88,88)的視ロ,并帶有裁剪功能:setviewport(6,6,88,88,1);clearviewport()清除圖形視ロ函數(shù)功能:函數(shù)clearviewport()清除當(dāng)前圖形視ロ,并把光標(biāo)從當(dāng)前位置移到原點(diǎn)(0,0)。用法:該函數(shù)調(diào)用方式為voidclearviewport(void);說明:此函數(shù)調(diào)用執(zhí)行后,當(dāng)前圖形視口將不復(fù)存在。這個(gè)函數(shù)對(duì)應(yīng)的頭文件是graphics,h返回值:無例:清除當(dāng)前圖形視ロ,但并非整個(gè)屏幕:clearviewport0;cleardevice()清除屏幕函數(shù)功能:函數(shù)cleardeviceO清除整個(gè)屏幕,并且將當(dāng)前位置移到屏幕原點(diǎn)。用法:此函數(shù)調(diào)用方式為voidcleardevice(void);說明:該函數(shù)類似于文本模式下的函數(shù)clrscrO,但clrscrO函數(shù)不能在圖形方式ド工作;同樣cleardeviceO函數(shù)不能在文木模式下工作。這個(gè)函數(shù)相應(yīng)的頭文件為graphics,h返回值:無例:清除當(dāng)前整個(gè)屏幕:cleardeviceO;getviewsettingsO獲取圖形視口設(shè)置函數(shù)功能:函數(shù)getviewsettingsO返回當(dāng)前圖形視ロ坐標(biāo)和裁剪標(biāo)志,坐標(biāo)是絕對(duì)屏幕坐標(biāo),裁剪標(biāo)志1或〇。用法:此函數(shù)調(diào)用方式為voidgetviewsettings(structviewporttype*info);說明:該函數(shù)執(zhí)行后,把有關(guān)當(dāng)前視ロ的信息裝入info指向的viewporttype型結(jié)構(gòu)中。viewporttype結(jié)構(gòu)定義如下:structviewporttype{intleft,top,right,bottom;intclipflag;)這里left,top中存放視ロ左上角坐標(biāo),right,bottom中存放視ロ右下角坐標(biāo),clipflag中存放裁剪標(biāo)志,若clipflag為1,執(zhí)行裁剪以防止超出視口邊界,如果clipflag為0,則不對(duì)超出邊界輸出作裁剪。getviewsettingsO函數(shù)對(duì)應(yīng)的頭文件是graphics,h返回值:無例:顯示當(dāng)前視口角點(diǎn)坐標(biāo):structviewporttypeinfo;getviewsettings(&info);printf(*left:%dtop:%d\n,info,left,info,top);printf(*right:%dbottom:%d\n*,info,right,info,bottom);二、調(diào)色板和顏色函數(shù)進(jìn)行圖形顯示或繪圖,除了要知道用什么顯示卡以及相應(yīng)的圖形驅(qū)動(dòng)程序外,還必須了解它們支持什么樣的調(diào)色板顏色。setpalette()設(shè)置調(diào)色板函數(shù)功能:函數(shù)setpalette()可對(duì)調(diào)色板上的顏色的色彩值重新設(shè)定。用法:setpalette()函數(shù)調(diào)用方式為voidsetpalette(intvalue,intcolor);說明:參數(shù)value為色彩值,color為色彩值相應(yīng)的顏色名。當(dāng)需要將一顏色指定為ー色彩值地,即可調(diào)用此函數(shù)來設(shè)置。表1-7預(yù)先定義的調(diào)色板與色彩調(diào)色板色彩0色彩1色彩2色彩3co黑色淡綠紅淺黃色Cl黑色淡青粉紅白色C2黑色綠色紅色棕色C3黑色青色品粉紅淡灰色這個(gè)函數(shù)相對(duì)應(yīng)的頭文件為graphics.h返回值:無setallpaletteO設(shè)置整個(gè)調(diào)色板函數(shù)功能:函數(shù)setallpaletteO對(duì)某個(gè)調(diào)色板上的所有顏色重新設(shè)定彩色值。用法:函數(shù)調(diào)用方式為voidsetallpalette(structpalettetype*p);說明:在低分辨率圖形顯示模式ド,該函數(shù)無效。若函數(shù)調(diào)用成功,則把p指向的palelte叮pe結(jié)構(gòu)中的色彩值設(shè)置為當(dāng)前調(diào)色板所有顏色的新色彩值。palettetype結(jié)構(gòu)定義如下:structpalettetype{unsignedcharsize;signedcharcolor[16];};這里必須把size設(shè)置為調(diào)色板顏色的數(shù)目,并把每個(gè)色彩值都裝入color數(shù)組相應(yīng)元素中,然后オ可用于調(diào)用函數(shù)。此函數(shù)對(duì)應(yīng)的頭文件是graphics,h返回值:無例:把16色的EGA/VGA顯示卡調(diào)色板改為其前16種顏色:structpalettetype;inti;for(i=0;i<16;i++)p.color[i]=i;p.size=16;setallpalette(&p);setbackcolor()設(shè)置背景顏色函數(shù)功能:函數(shù)setbackcolorO把當(dāng)前調(diào)色板顏色的第?個(gè)值改成指定的顏色值,以設(shè)置背景顏色。用法:此函數(shù)調(diào)用方式為voidsetbackcolor(intcolor);說明:參數(shù)color為指定的背景色,其有效值可以是顏色符號(hào)名,也可以是色彩值。表1-8列出了背景顏色供選取。表1-8背景顏色值顏色符號(hào)名色彩值顏色符號(hào)名色彩值BLACK(黑色)0DARKGRAY(深灰)8BLUE(藍(lán)色)1LIGHTBLUE(淡藍(lán))9GREEN(綠色)2LIGHTGREEN(淡綠)10CYAN(青色)3LIGHTCYAN(淡青)11RED(紅色)4LIGHTRED(淡紅)12MAGENTA(品紅)5LIGHTMAGENTA(粉紅)13BROWN(棕色)6YELLOW(黃色)14LIGHTGRAY(淡灰)7WHITE(白色)15調(diào)用該函數(shù),將改變整個(gè)屏幕的顏色,如果新的背景色與原來屏幕的圖形顏色相同,盡管圖形信息不會(huì)丟失,但是看不見圖形了。如果所選背景色為對(duì)比鮮明的顏色,看不見的圖形就會(huì)重新清晰地顯現(xiàn)出來。這個(gè)函數(shù)的頭文件為graphics.h返回值:無例:把背景色置為淡藍(lán)色setbackcolor(LIGHTBLUE);setcolor()設(shè)置顏色函數(shù)功能:函數(shù)setcolor()設(shè)置當(dāng)前繪圖顏色(或稱做前景色)。用法:該函數(shù)調(diào)用方式為voidssetcolor(intcolor);說明:參數(shù)color為選擇的當(dāng)前繪圖顏色。在高分辨率顯示模式下,選取的color是實(shí)際色彩值,也可以用顏色符號(hào)名表示。如果已經(jīng)搖籃函數(shù)setpaletteO改變了調(diào)色板色彩值,那么符號(hào)名就不可能產(chǎn)生預(yù)期作用了。在低分辨率顯示模式(320X200)下,選取的color是調(diào)色板顏色號(hào),不是實(shí)際色彩值。此函數(shù)相應(yīng)的頭文件為graphics,h返回值:無例:設(shè)置16種不同的顏色,顯示16段直線:#includeくgraphics.h>voidmainO(intdriver,mode;inti;driver=DETECT;modeニ〇;initgraph(&driver,&mode,);moveto(0,200);for(i=0;i<16;i++)setcolor(i);linerel(20,0);getch0;restorecrtmode();)getbkcolorO返回背景色函數(shù)功能:函數(shù)getbackcolorO返回當(dāng)前背景顏色。用法:函數(shù)調(diào)用方式為intgetbackcolor(void);說明:調(diào)用該函數(shù)后,獲得背景色,但其值不一定是調(diào)色板上的色彩值。這個(gè)函數(shù)對(duì)應(yīng)的頭文件是graphics.h返回值:返回當(dāng)前繪圖色彩值。例:返回當(dāng)前背景色彩值:printf(*backgroundcoloris%d”,getbkcolorO);getcolorO返回當(dāng)前繪圖顏色用法:此函數(shù)調(diào)用方式為intgetcolor(void);說明:對(duì)于使用彩色低分辨率顯示模式調(diào)色板,返回值是調(diào)色板顏色號(hào),而不是實(shí)際顏色值,對(duì)于高分辨率顯示模式,返回值對(duì)應(yīng)于顏色值,除非調(diào)色板顏色已被函數(shù)setpaletteO或setallpaletteO改變了。這個(gè)函數(shù)相應(yīng)的頭文件為graphics,h返回值:返回當(dāng)前繪圖顏色值。例:printf(*drawingcoloris%d”,getcolorO);getmaxcolor()返回最大顏色值函數(shù)用法:函數(shù)調(diào)用方式為intgetmaxcolor(void);說明:該函數(shù)調(diào)用后,在低分辨率模式下返回值為3(這種模式下有效顏色值為0至3):在高分辨率顯示模式下返回值可以是256或更髙(此模式下有效顏色值為0至256或更高)〇這個(gè)函數(shù)相應(yīng)的頭文件為graphics,h返回值:返回當(dāng)前圖形模式下最大顏色值。例:顯示最大有效顏色值:#includeくgraphics.h>voidmain(){intdriver,mode;driver=DETECT;mode=0;initgraph(&driver,&mode,);printf(*;largestcolor:%d*,getmaxcolor());getch();restorecrtmode();getpaletteO獲取調(diào)色板函數(shù)功能:函數(shù)getpaletteO將當(dāng)前調(diào)色板的值填入palettetype型結(jié)構(gòu)中。用法:getpaletteO函數(shù)調(diào)用方式為voidgetpalette(structpalettetype*p);說明:此函數(shù)調(diào)用執(zhí)行后,當(dāng)前調(diào)色板的值被裝入p指向的結(jié)構(gòu)里;從而可從該結(jié)構(gòu)中獲得這個(gè)調(diào)色板的設(shè)置信息。palettetype型結(jié)構(gòu)定義如下^defineMAXCOLORS15structpalettetype{unsignedcharsize;signedcharcolors[MAXCOLORS+1];};其中size用于存放當(dāng)前調(diào)色板的有效顏色個(gè)數(shù):colors數(shù)組的每ー元素中裝入調(diào)色板的ー個(gè)相應(yīng)顏色值。表1-9列出了這些顏色值(適用于EGA/VGA)顏色符號(hào)名色彩值EGABLACK(EGA黑色)EGA_BLUE(EGA藍(lán)色)EGAGREEN(綠色)EGA_CYAN(EGA青色)EGARED(紅色)EGA_MAGENTA(EGA品紅)EGA一BROWN(EGA棕色)EGA_LIGHTGRAY(EGA淡灰)EGA.DARKGRAY(EGA深灰)EGA_LIGHTBLUE(EGA淡藍(lán))EGA_LIGHTGREEN(EGA淡綠)EGA_LIGHTCYAN(EGA淡青)EGA_L1GHTRED(EGA淡紅)EGA_LIGHTMAGENTA(EGA粉紅)EGA_YELLOW(EGA黃色)EGA_WHITE(EGA白色)0123452075657585960616263getpaletteO函數(shù)對(duì)應(yīng)的頭文件是graphics.h返回值:無例:顯示由自動(dòng)檢測(cè)所得顯示模式支持的調(diào)色板上的顏色數(shù)目:^includeくgraphics.h>voidmain()intdriver,mode;structpalettetypep;driver=DETECT;/Z自動(dòng)檢測(cè)mode=0;initgraph(&driver,&mode,);getpalette(7p);printf(*numberofcolorspalette:%d*?p.size);getchO;restorecrtmode();)getpalettesizeO返回調(diào)色板大小函數(shù)功能:函數(shù)gelalettesizeO返回調(diào)色板的顏色數(shù)目。用法:該函數(shù)調(diào)用方式為intgetpalettesize((void);說明:調(diào)用這個(gè)函數(shù)后,就知道調(diào)色板上有多少顏色數(shù)目可在當(dāng)前顯示模式ド設(shè)置。此函數(shù)對(duì)應(yīng)的頭文件是graphics.h返冋值:返回當(dāng)前顯示模式支持的調(diào)色板的顏色數(shù)目。例:顯示當(dāng)前顯示模式支持的調(diào)色板的顏色數(shù)冃。intnumber;number=getpalettesize();printf(*palettesize:%d*,number);getdefaultpaletteO獲取缺省調(diào)色板函數(shù)功能:函數(shù)getdefaultpaletteO返回指向缺省調(diào)色板的指針。用法:該函數(shù)調(diào)用方式為structpalettetype*getdefaultpalette(void);說明:調(diào)色板結(jié)構(gòu)類型palettetype定義如下:^defineMAXCOLORS15structpalettetype{unsignedcharsize;signedcharcolors[MAXCOLORS+1];};在調(diào)用initgraphO初始化圖形系統(tǒng)時(shí),給調(diào)色板結(jié)構(gòu)類型變量賦值,作為缺省調(diào)色板,調(diào)用這個(gè)函數(shù)可返回指向它的指針。此函數(shù)相應(yīng)的頭部文件為graphics,h返回值:返回指向缺省調(diào)色板(結(jié)構(gòu))的指針。例:顯示圖形系統(tǒng)初始化后所支持的調(diào)色板上的各種顏色。ttincludeくgraphics.h>^includeくstdio.h>#includeくconio.h>#includeくstdlib.h>voidmain()(intgraphdriver=DETECT,graphmode:structpalettetype*palette;interrorcode,color;initgraph(&graphdriver,&graphmode,);errorcode=graphresult();if(errorcode!=grOK){printf(*Graphicserror%s\n*,grapherrormsg(errorcode));exit(1);}palette=getdefaultpalette();printf(*palette->size%d\n”,palette->size);getchO;for(color二〇;color<palette->size;color++)(setfillstyle(LINE_FILL,color);bar(20*(color-1),0,20*color,20);getchO;}if(palette->size>l){dosetpalette(random(palette->size),random(palette->size));while(!kbhit0);getchO;}setallpalette(palette);closegraph0;三、屏幕位置函數(shù)在圖形模式下,字符屏幕坐標(biāo)被像素坐標(biāo)取代了,這種像素坐標(biāo)根據(jù)不同的顯示硬件,水平與垂直方向的分辨率可以從320X200變化到1280X1024等。由于分辨率的變化,以致要加載合適的圖菜驅(qū)動(dòng)程序,因此大多數(shù)圖形程序是通過檢測(cè)硬件開始的,然后使用getmaxxO和getmaxyO等函數(shù)來決定屏幕尺寸,調(diào)整隨后的操作來適應(yīng)這些屏幕限制。getmaxxO返回最大x坐標(biāo)函數(shù)功能:函數(shù)getmaxxO返回當(dāng)前圖形模式下的最大x坐標(biāo),即最大橫向坐標(biāo)。用法:函數(shù)調(diào)用方式為intmaxx(void);說明:此函數(shù)獨(dú)立于圖形視口設(shè)置,僅取決于顯示卡的顯示模式相應(yīng)的分辨率。這個(gè)函數(shù)對(duì)應(yīng)的頭文件是graphics.h返回值:返回當(dāng)前顯示模式最大x坐標(biāo)值。例:使用本函數(shù)的例子見51.getmaxyO函數(shù)的例子中。getmaxyO返回最大y坐標(biāo)函數(shù)功能:函數(shù)getmaxyO返回當(dāng)前圖形模式下的最大y坐標(biāo),即最大縱向坐標(biāo)。用法:函數(shù)調(diào)用方式為intgetmaxy(void);說明:此函數(shù)獨(dú)立于圖形視口設(shè)置,僅取決于顯示卡的顯示模式相應(yīng)的分辨率。這個(gè)函數(shù)對(duì)應(yīng)的頭文件為graphics,h返回值:返回當(dāng)前顯示模式的最大y坐標(biāo)值。^includeくgraphics.h>voidmain()(intdriver,mode;driver=DETECT;modeニ〇;initgraph(&driver,&mode,**);printf(*maxx,y:%d%d*,getmaxx(),getmaxy());getchO;restorecrtmode();}getxO返回x坐標(biāo)函數(shù)功能:函數(shù)gelx()返回當(dāng)前圖形模式下當(dāng)前位置的x坐標(biāo)(水平像素坐標(biāo))。用法:此函數(shù)調(diào)用方式為intgetx(void);說明:這里坐標(biāo)是相對(duì)于當(dāng)前圖形視ロ的,如果沒有設(shè)置圖形視ロ,那么缺省的圖形視口為整個(gè)屏幕。這類似于文本模式下使用wherexO函數(shù)。getx()函數(shù)相應(yīng)的頭文件是graphics,h返回值:返回當(dāng)前x坐標(biāo)值。例:見53.gety()函數(shù)中的例子。getyO返回y坐標(biāo)函數(shù)功能:函數(shù)gety()返回圖菜模式下當(dāng)前位置的y坐標(biāo)(垂直像素坐標(biāo))〇用法:此函數(shù)調(diào)用方式為intgety(void);說明:函數(shù)返回的坐標(biāo)是相對(duì)于當(dāng)前圖形視ロ的,如果沒有設(shè)置圖形視ロ,那么缺省的圖形視口為整個(gè)屏幕,這類似于文本模式下使用whereyO函數(shù)。gety()函數(shù)對(duì)應(yīng)的頭文件是graphics,h返回值:返回當(dāng)前y坐標(biāo)值。例:顯示圖形模式下當(dāng)前位置的x,y坐標(biāo)值:printf(*x:%d,y:%d*,getxO,getyO);movetoO函數(shù)功能:函數(shù)movetoO將當(dāng)前位置移動(dòng)到指定坐標(biāo)的位置說明:這相當(dāng)于文本模式下gotoxyO函數(shù)的操作,它提供對(duì)等的功能。此函數(shù)對(duì)應(yīng)的頭文件為graphics,h返回值:無例:把當(dāng)前位置移到(66,88)位置上:moveto(66,88);moverel()相對(duì)移動(dòng)函數(shù)功能:函數(shù)moverel()根據(jù)指定的偏移量,將當(dāng)前位置移動(dòng)ー個(gè)相對(duì)距離(即偏移量大小的距離),成為新的當(dāng)前位置。用法:此函數(shù)調(diào)用方式為voidmoverel(intdx,intdy);說明:參數(shù)dx為x方向相對(duì)移動(dòng)距離dy為y方向相對(duì)移動(dòng)距離。相對(duì)移動(dòng)對(duì)圖形應(yīng)用程序,往往要比絕對(duì)移動(dòng)方便ー些。這個(gè)函數(shù)對(duì)應(yīng)的頭文件是graphics,h返回值:無例:下面的程序,當(dāng)語(yǔ)句執(zhí)行到當(dāng)前位置在(90,90),則執(zhí)行后將移動(dòng)到(100,120)的位置上。即x方向相對(duì)移動(dòng)10,y方向相對(duì)移動(dòng)30:moverel(10,30);C語(yǔ)言圖形編程(三、繪圖函數(shù)ー02)B作者:未知來源:未知加入時(shí)間:2004-7-20天新軟件園ellipse()畫橢圓弧函數(shù)功能:函數(shù)ellipse。使用當(dāng)前繪圖色畫一橢圓弧。用法: 該函數(shù)調(diào)用方式為voidel1ipse(intx,inty,intstartangle,intendangle,intxradius,intyradius);說明:參數(shù)x,y為橢圓中心坐標(biāo),startangle和endangle為給定的起始角和終止角,xradius與yradius為橢圓的x軸半徑與y軸半徑,如果startangle為〇,endangle等于360度,那么畫出的是個(gè)完整的橢圓。ellipse。函數(shù)不同于arc()和circle。函數(shù),屏顯縱橫比不能自動(dòng)調(diào)節(jié)。若需要的是成比例的半徑而不是特定的像素距離,則y軸距離必須調(diào)節(jié)為yradius*aspectratio(y軸半徑乘以縱橫比)。此函數(shù)對(duì)應(yīng)的頭文件為graphics.h返回值:無例:在屏幕上畫一個(gè)雞蛋形的橢圓。#includeくgraphics.h>voidmain。(intdriver,mode;driver=DETECT;mode=0;initgraph(&driver,&mode,);ellipse(200,100,0,360,80,40);getchO;restorecrtmode。;)fillellipse。畫橢圓區(qū)函數(shù)功能:函數(shù)fillellipse。使用當(dāng)前繪圖色畫一橢圓,然后用當(dāng)前填充色圖樣和填充色填充所畫的橢圓。用法:此函數(shù)調(diào)用方式為voidfillellipse(intx,inty,intxradius,intyradius);說明:參數(shù)x,y為橢圓中心坐標(biāo),xradius,yradius為水平軸半徑和垂直軸半徑。這個(gè)函數(shù)對(duì)應(yīng)的頭文件為graphics,h返回值:無例:畫一填充橢圓:^includeくgraphics.h>#include<stdio.h>#defineR60voidmain()(intdriver,mode;intxasp,yasp;driver=DETECT;mode=0;initgraph(&driver,&mode,);fillellipse(getmaxx()/2,getaxy()/2,66,44);getaspectratio(&xasp,&yasp);fillellipse(R,R,R,R*(long)xasp/(long)yasp);getchO;closegraph();)piesliceO畫扇區(qū)函數(shù)功能:函數(shù)piesliceO使用當(dāng)前繪圖色畫一圓弧,并把弧兩端與圓心分別連一直線段(即半徑),然后用當(dāng)前填圖樣和填充色進(jìn)行填充,即得扇區(qū)。用法:這個(gè)函數(shù)調(diào)用方式為voidpieslice(intx,inty,intstartangle,intendangle,intradius);說明:函數(shù)piesliceO的操作類似于arc()函數(shù)(即同調(diào)用參數(shù)一樣,只是函數(shù)名不同),因此調(diào)用此函數(shù)的詳細(xì)說明參見函數(shù)arc()的相應(yīng)內(nèi)容。該函數(shù)對(duì)屏顯縱橫比能自動(dòng)調(diào)節(jié)進(jìn)行補(bǔ)償。piesliceO函數(shù)対應(yīng)的頭文件為graphics.h返回值:無例:顯示一個(gè)扇形圖,每45度為ー個(gè)不同的扇區(qū):#include<graphics.h>voidmainO(intdriver,mode;inti,start,end;driver=DETECT;mode二。;initgraph(&driver,mode,**);startニ0;end=45;for(i=0;i<8;i++)(setfi1Istyle(SOLID_FILL,i);pieslice(260,200,start,end,100);start+=45;end+=45;getch();restorecrtmode0;sector0畫橢圓扇區(qū)函數(shù)功能:函數(shù)sector。先用當(dāng)前繪圖色畫橢圓扇形輪廓,然后用當(dāng)前填充圖樣和填充色進(jìn)行填充,即得橢圓扇區(qū)。用法:該函數(shù)調(diào)用方式為voidsector(intx,inty,intstartangle,intendangle,intxradius,intyradius);說明:參數(shù)x,y為橢圓中心坐標(biāo),slartangle和endangle為起始角與終止角,xradius與yradius是水平軸半徑和垂直軸半徑即長(zhǎng)短軸。當(dāng)startangle為0,endangle為360度時(shí),調(diào)用此函數(shù)可畫得一個(gè)完整的橢圓區(qū)。角度增加方向?yàn)榉磿r(shí)針方向。設(shè)定填充圖樣和填充色,用setfillstyleO或setfillpatternO函數(shù),若畫輪廓線或填充扇區(qū)出現(xiàn)錯(cuò)誤,則graphresult()函數(shù)返回值ー6。對(duì)屏顯縱橫比,sector。函數(shù)不能自動(dòng)調(diào)節(jié)補(bǔ)償。返回值:無例:畫出兩個(gè)橢圓扇區(qū):^includeくgraphics.h>#include<stdio.h>#defineR80voidmain。(intdriver,mode;intxasp,yasp;initgraph(&driver,&mode,);sector(getmaxx()/2,getmaxy()/2,0,656,R,R);getaspectratio(Axasp,&yasp);setctor(getmaxx()/2,getmaxy()/2,180,135,R,R*(long)xasp/(long)yasp);getchO;closegraph。:}getarccoords()獲取圓弧坐標(biāo)函數(shù)功能:函數(shù)getarccoords。將最后?次調(diào)用arc。或el1ipse。畫的圓弧或橢圓弧的起終點(diǎn)坐標(biāo)和中心坐標(biāo)填入arccoordstype型結(jié)構(gòu)里,進(jìn)而從該結(jié)構(gòu)中獲取這些坐標(biāo)值。用法:getarccoords。函數(shù)調(diào)用方式為voidgetarccoords(structarccoordstype*coordsp);說明:調(diào)用此函數(shù)填寫coordsp指向的結(jié)構(gòu),從而獲得起終點(diǎn)坐標(biāo)和中心坐標(biāo)值。它們可用于畫弦、半徑以及其它與圓弧端點(diǎn)相連的直線等。pieslice。函數(shù)就要用到這些值。如果最后一次調(diào)用的函數(shù)是circle。,那么getarccoords。將返回圖心坐標(biāo)和起終點(diǎn)坐標(biāo)即網(wǎng)的位置。arccoordstype型結(jié)構(gòu)定義如下:structarccoordstype{intx,y;intxstart,ystart,xend,yend;);其中,x,y存放中心坐標(biāo);xstart,ystart,xend,yend分別存放起終點(diǎn)坐標(biāo)。值得注意的是,結(jié)構(gòu)里起終點(diǎn)(xstart,ystart)與(xend,yend)坐標(biāo)是像素值,不是角度值,這和調(diào)用arc()或ellipse。函數(shù)所用的不一樣。當(dāng)然中心坐標(biāo)(x,y)與調(diào)用函數(shù)時(shí)所用的是ー樣的。這個(gè)函數(shù)的頭文件是graphics.h返回值:返回最后一次調(diào)用圓或橢圓函數(shù)的相應(yīng)起終點(diǎn)與中心坐標(biāo)值,并存放在coordsp指向的結(jié)構(gòu)里。例:下面的程序畫圓心在(100,100)的四分之一圓弧,然后于弧兩端點(diǎn)之間連一直線。#includeくgraphics.h>voidmain。(intdriver,mode;structarcccoordstypearcinfo;driver=DETECT;mode=0;initgraph(&driver,&mode,**);arc(100,100,0,90,88);getarccoords(&arcinfo);line(arcinfo,xstart,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論