C語言圖形編程函數(shù)_第1頁
C語言圖形編程函數(shù)_第2頁
C語言圖形編程函數(shù)_第3頁
C語言圖形編程函數(shù)_第4頁
免費預(yù)覽已結(jié)束,剩余47頁可下載查看

下載本文檔

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

文檔簡介

C語言圖形編程A字符屏幕ー、屏幕操作函數(shù)clrscr()清除字符窗口函數(shù)window()字符窗口函數(shù)gotoxy()光標(biāo)定位函數(shù)clreol()清除光標(biāo)行尾字符函數(shù)insline()插入空行函數(shù)delline()刪除一行函數(shù)gettext()拷進文字函數(shù)puttext()拷出文字函數(shù)movetext()移動文字函數(shù)二、字符屬性函數(shù)textmode()文本模式函數(shù)highvideo()高亮度函數(shù)lowvideo()低亮度函數(shù)normvideo()正常亮度函數(shù)textcolor()文本顏色函數(shù)textattr()文本屬性函數(shù)textbackground()文本背景函數(shù)三、屏顯狀態(tài)函數(shù)wherex()光標(biāo)處x坐標(biāo)函數(shù)whereyO光標(biāo)處y坐標(biāo)函數(shù)gettextinfo()獲取文本窗口信息函數(shù)在TurboC里面提供了字符屏幕和圖形函數(shù)。字符屏幕的核心是窗口(Window),它是屏幕的活動部分,字符輸出或顯示在活動窗口中進行。窗口在缺省時,就是整個屏幕。窗口可以根據(jù)需要指定其大小。同樣,對圖形函數(shù)的操作,也提供了(Viewport)。也就是說圖形函數(shù)的操作都是在視口上進行。圖形視口與字符窗口具有相同的特性,用戶可以在屏幕上定義大小不同的視ロ,若不定義視口大小,它就是整個屏幕。窗口是在字符屏幕下的概念,只有字符才能在窗口中顯示出來,這時用戶可以訪問的最小單位為ー個字符。視口是在圖形屏幕狀態(tài)下的概念,文本與圖形都可以在視口上顯示,用戶可訪問的最小單位是ー個像素(像素這ー術(shù)語最初用來指顯示器上最小的、單獨的發(fā)光點單元。然而現(xiàn)在,其含義拓寬為指圖形顯示器上的最小可訪問點)。字符和圖形狀態(tài)下,屏幕上的位置都是由它們的行與列所決定的。有一點須指出:字符狀態(tài)左上角坐標(biāo)為(1,1),但圖形左上角坐標(biāo)為(0,0)。了解字符屏幕和圖形函數(shù)與窗口和視口的關(guān)系是很重要的。例如,字符屏幕光標(biāo)位置函數(shù)gotoxy()將光標(biāo)移到窗ロ的x,y位置上,這未必是相對于整個屏幕。下面介紹常用的幾類字符屏幕函數(shù)的功能用途、操作方法及其例行程序。一、屏幕操作函數(shù)編寫程序繪圖經(jīng)常要用到對字符屏幕進行操作。例如,在往屏幕上寫字符之前,首先要將屏幕清除干凈。又如,有時需要在屏幕上多處寫上肉中刺樣的字符內(nèi)容,這時最好用屏幕拷貝來高效率地完成這一任務(wù)。對這些操作,TurboC提供了一系列字符屏幕操作函數(shù)來實現(xiàn)。clrscr()清除字符窗口函數(shù)功能:函數(shù)clrscr()清除整個當(dāng)前字符窗口,并且把光標(biāo)定位于左上角(1,1)處。用法:voidclrscr(void);說明:括號中void表示無參數(shù)。該函數(shù)相應(yīng)的頭文件為conio.h返回值:無【例】使用這個函數(shù)的例子見4.clreol()函數(shù)的實例中。window。字符窗口函數(shù)功能:函數(shù)window。用于在指定位置建立一個字符窗口。用法:voidwindow(intleft,inttop,intright,intbottom);說明:函數(shù)中參數(shù)left,top為窗口左上角坐標(biāo);right,bottom為其右下角坐標(biāo)。若有一個坐標(biāo)是無效的,則window。函數(shù)不起作用。一旦該函數(shù)調(diào)用成功,那么所有定位坐標(biāo)都是相對于窗口的,而不是相對于整個屏幕。但是建立窗口所用的坐標(biāo)總是相對整個屏幕的絕對坐標(biāo),而不是相對當(dāng)前窗口的相對坐標(biāo)。這樣用戶就可以根據(jù)各種需要建立多個互不嵌套的窗口。頭文件:conio.h□返回值:無【例】調(diào)用這個函數(shù)的實現(xiàn)例見3.gotoxy。函數(shù)的例子中。gotoxy。光標(biāo)定位函數(shù)功能:函數(shù)gotoxy()將字屏幕上的光標(biāo)移到當(dāng)前窗口指定的位置上。用法:voidgotoxy(intx,inty);說明:括號里x,y是光標(biāo)定位的坐標(biāo),如果其中一個坐標(biāo)值無效(如坐標(biāo)超界),那么光標(biāo)不會移動。此函數(shù)在字符狀態(tài)(有時稱為文本狀態(tài))下經(jīng)常用到。頭文件:conio.h返回值:無【例】下面程序建立兩個窗口,然后在窗ロ里顯示字符,字符的位置是調(diào)用該函數(shù)確定的。#include<conio.h>voidborder(intstartx,intstarty,intendx,intendy)registerinti;gotoxy(l,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(l,i);putch('l');gotoxy(endx-startx+l,i);putch('l');J)main(){voidborder(int,int,int,int);clrscr();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");getch();)clreol()清除光標(biāo)行尾字符函數(shù)功能:函數(shù)clreol()在當(dāng)前字符窗口中清除從光標(biāo)位置到行尾的所有字符,而光標(biāo)位置保持不變。用法:voidclreol(void);說明:此函數(shù)的相應(yīng)頭文件:conio.h返回值:無(例】程序中使用了函數(shù)clreol()和clrscrQ。#include"conio.h>voidmain(){registerinti;gotoxy(6,8);printf("Thisisatestoftheclreol()function.");getch();gotoxy(6,8);clreol();for(i=0;i<20;i++)printf("Hello\n");getch();clrscr();}insline()插入空行函數(shù)功能:函數(shù)insline。插入一空行到當(dāng)前光標(biāo)所在行上,同時光標(biāo)以下的所有行都向下順移ー行。用法:voidinsline(void);說明:該函數(shù)只用于文本方式,并且在當(dāng)了符窗口才有效。這個函數(shù)的對應(yīng)頭文件是conio.h返冋值:無【例】程序給出了insline。函數(shù)的用法。#include"conio.h"voidmain(){registserinti;clrscr();for(i=l;i<24;i++){gotoxy(l,i);printf("Thisisline%d\n",i);)getch();gotoxy(l,10);insline();getch();}delline()刪除一行函數(shù)功能:函數(shù)delline。刪除當(dāng)前窗口內(nèi)光標(biāo)所在行,同時把該行下面所有行都上移一行。用法:voiddelline(void);說明:注意,如果當(dāng)前窗口小于整個屏幕,那么該函數(shù)只影響到窗口內(nèi)的字符。這個函數(shù)相應(yīng)的頭部文件是conio.h返冋值:無【例】先在屏幕上顯示16行文字,然后刪除第4行。#include"conio.h"voidmain()registerinti;clrscr();for(i=0;ivl6;i++)printf(Mline%d\nM,i);getch();gotoxy(l,4);delline();getch();}gettext()拷進文字函數(shù)功能:函數(shù)gettext。用于文本狀態(tài)下將屏幕上矩形域內(nèi)的文字拷進內(nèi)存。用法:該intgettext(intleft,inttop,intright,intbottom,void*buffer);說明:函數(shù)中參數(shù)left,top為矩形區(qū)域的左上角坐標(biāo),right,bottom為其右下角坐標(biāo),這些坐標(biāo)是屏幕的絕對坐標(biāo),不是窗口的相對坐標(biāo)。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,否則返順〇?!纠堪哑聊蛔笊辖屈c(1,1)和右下角點(10,10)的區(qū)域拷貝到buf指向的內(nèi)存中去。buf=(char*)malloc(10*10*2);if(!buf)gettext(l,1,10,10,buf);puttext()拷出文字函數(shù)功能:函數(shù)puttext。把先前由gettext。保存到buffer指向的內(nèi)存中的文字拷出到屏幕上一個矩形區(qū)域中。用法:intputtext(intleft,inttop,intright,intbottom,void*buffer);說明:函數(shù)里left,top為給出的屏幕上矩形區(qū)域的左上角點,right,bottom為其右下角點,其坐標(biāo)是用屏幕的絕對坐標(biāo),而不是用窗口的相對坐標(biāo)。該函數(shù)相應(yīng)的頭文件為conio.h返回值:函數(shù)調(diào)用成功返回值為1,否則返回〇。【例】屏幕上某個區(qū)域內(nèi)容拷進buf指向的內(nèi)存中,然后又將這些文字拷出到屏幕上新位置。buf=(char*)malloc(10*10*2);gettext(l,1,10,10,buf);puttext(16,16,30,30,buf);movetext()移動文字函數(shù)功能:函數(shù)movetext()將屏幕上一個矩形區(qū)域的文字移到另一個區(qū)域上。用法:該intmovetext(intleft,inttop,intright,intbottom,intnewleft,intnewtop);說明:上面left,top為矩形區(qū)域上角坐標(biāo),right,bottom為其右下角坐標(biāo),newleft,newright為移動到區(qū)域左上角坐標(biāo)。這些坐標(biāo)是屏幕的絕對坐標(biāo),不是窗口的相對坐標(biāo)。若要把屏幕上一段文字移到屏幕的另一位置,那么使用movetext。函數(shù)比用gettext。然后再用puttext。效率更高。此函數(shù)相應(yīng)的頭文件是conio.h返冋值:如果有一個以上坐標(biāo)無效,那么函數(shù)返回值為〇,否則返回1?!纠堪哑聊蛔笊辖屈c(8,8),右下角點(20,20)的矩形區(qū)域文字移動到左上角點(10,10)的位置上:movetext(8,8,20,20,10,10);textmode()文本模式函數(shù)功能:函數(shù)textmode。針屏幕設(shè)置為文本模式(或者說字符狀態(tài))。用法:voidtextmode(intmode);說明:參數(shù)mode必須為表1-2中所示的模式之一??梢杂媚J矫?符號值),也可以用其等價的整數(shù)值。表1-2文本模式模式名(符號值)等價整數(shù)值說明BW40040列黑白C40140列彩色BW80280列黑白C80380列彩色MONO780列單色LASTMODE-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è)置屏幕為高亮度顯示。用法:voidhighvideo(void);說明:調(diào)用該函數(shù)后,寫到屏幕上的字符是高亮度的。此函數(shù)只適用于文本模式狀態(tài)(或說字符屏幕狀態(tài))。這個函數(shù)對應(yīng)的頭文件為conio.h返回值:無【例】設(shè)置屏幕顯示為高亮度的。highvideo();lowvideo。低亮度函數(shù)功能:函數(shù)lowvideo。設(shè)置屏幕為低亮度顯示。

用法:該voidlowvideo(void);說明:調(diào)用該函數(shù)后,此時寫到屏幕上的字符是低亮度的。這個函數(shù)只適用于文本模式狀態(tài),或說字符屏幕狀態(tài)。此函數(shù)相應(yīng)的頭文件是conio.h返回值:無【例】設(shè)置屏幕顯示為低亮度的。lowvideo();.normvideo(void);功能:函數(shù)normvideo。設(shè)置屏幕為正常亮度顯示。用法:這個voidnormvideo(void);說明:調(diào)用該函數(shù)后,此時寫到屏幕上的字符是正常亮度的,該函數(shù)只適用于文本模式狀態(tài),或說字符狀屏幕狀態(tài)。此函數(shù)相應(yīng)的頭文件為conio.h返回值:無【例】設(shè)置屏幕顯示為正常亮度。normvideo();textcolor()文本顏色函數(shù)功能:函數(shù)textcolor()設(shè)置字符屏幕ド文本顏色(或字符顏色),它也可以用于使字符閃爍。用法:這個voidtextcolor(intcolor);說明:函數(shù)中參數(shù)color的有效值可取表!-3中的顏色名(即宏名)或等價值。表!-3顏色名與等價值名 等價值 含義紅紅灰灰藍(lán)綠青紅洋爍黑藍(lán)綠青紅洋棕淡深淡淡淡淡淡黃白閃TOC\o"1-5"\h\zBLACK 0紅紅灰灰藍(lán)綠青紅洋爍黑藍(lán)綠青紅洋棕淡深淡淡淡淡淡黃白閃BLUE 1GREEN 2CYAN 3RED 4MAGENTA 5BROWN 6LIGHTGRAY 7DRAKGRAY 8LIGHTBLUE 9LIGHTGREEN 10LIGHTCYAN 11LIGHTRED 12LIGHTMAGENTA13YELLOW 14WHITE 15BLINK 12textcolor。函數(shù)執(zhí)行后,只影響其后輸出探險符顏色,而不改變已經(jīng)在當(dāng)前屏幕上的其它字符顏色。顯然,如果需要輸出的字符閃爍,只要將函數(shù)中參數(shù)color取為BLINK即可,如果要使字符帶顏色閃爍,就必須將所選的顏色值與128作“或”運算。此函數(shù)相應(yīng)的頭文件是conio.h返回值:無【例】下面程序段中第一條語句使輸出的字符閃爍,第三條語句使字符輸出為經(jīng)色同時閃爍:textcolor(BLINK);printf('^hello,^);textcolor(REDIBLINK);textattr()文本屬性函數(shù)功能:函數(shù)textattr。用于設(shè)置文本屬性,即字符背景顏色、字符本身顏色和字符閃爍與否。用法:voidtextattr(intattribute);說明:設(shè)置字符背景顏色屬性字節(jié)的最簡單方法是,用所選的背景顏色值乘以16再與字符顏色值作按位或(OR)運算。例如需要紅色背景、綠色字符,就設(shè)置成RED*16IGREEN,若還要字符閃爍,就把背景顏色值、字符顏色值與閃爍值ー起按位作或運算。如藍(lán)背景、黃字符且閃爍,就設(shè)置成為:YELLOI128IBLUE*16第。位用于設(shè)置字符顏色。此函數(shù)相應(yīng)的頭文件為conio.h返回值:無【例】設(shè)置背景為藍(lán)色、字符為紅色并且字符閃爍:textattr(REDI128IBLUE*16);textbackground()文本背景函數(shù)功能:函數(shù)textbackgroundO設(shè)置字符屏幕下文本背景顏色(或字符背景顏色)。用法:voidtextbackground(intbcolor);說明:參數(shù)bcolor的有效值取表1-4背景顏色(即宏名)或等價值。表1-4背景顏色與等價值背景顏色等價值含義BLACK0BLUE1GREEN2CYAN3RED4MAGENTA5洋紅BROWN6調(diào)用該函數(shù)只影響后續(xù)寫的字符背景顏色,而不改變當(dāng)前顯示在屏幕上的字符背景顏色。這個函數(shù)對應(yīng)的頭文件是conio.h返回值:無【例】設(shè)置文本背景顏色為藍(lán)色:textbackground(BLLJE));

三、屏顯狀態(tài)函數(shù)這里提供三個在文本模式下屏幕顯示狀態(tài)的函數(shù)。wherex()光標(biāo)處x坐標(biāo)函數(shù)功能:函數(shù)wherex()返回當(dāng)前窗口中光標(biāo)處橫向坐標(biāo)。用法:intwherex(void);說明:這個函數(shù)調(diào)用無參數(shù),其對應(yīng)的頭文件是conio.h返回值:函數(shù)調(diào)用成功,返回光標(biāo)處x坐標(biāo)值?!纠空{(diào)用這個函數(shù)的實例見18.whereyO函數(shù)的例中。wherey。光標(biāo)處y坐標(biāo)函數(shù)功能:函數(shù)wherey()返回當(dāng)前窗口中光標(biāo)處縱向坐標(biāo)。用法:該intwherey(void);說明:此函數(shù)調(diào)用無參數(shù),其相應(yīng)的頭文件是conio.h返回值:函數(shù)調(diào)用成功,返回光標(biāo)處y坐標(biāo)值?!纠空{(diào)作函數(shù)wherex()與whereyO,返回當(dāng)前光標(biāo)處x坐標(biāo)與y坐標(biāo),并賦給整型變量xpos,yposointxpos,ypos;xpos=wherex();ypos=wherey();gettextinfo。獲取文本窗口信息函數(shù)功能:函數(shù)gettextinfo。獲取當(dāng)前文本窗口信息,并存放在實參結(jié)構(gòu)中。用法:voidgettextinfo(structtext-info*info);說明:函數(shù)中參數(shù)info為structtext_info結(jié)構(gòu)型指針,structtext?info結(jié)構(gòu)在此函數(shù)相應(yīng)的頭文件中定義為:structtext_info{unsignedcharwinleft;unsignedcharwintop;unsignedcharwinright;unsignedcharwinbottomunsignedcharattribute;unsignedcharnormattr;unsignedcharcurrmode;unsignedcharscreenhight;unsignedcharwinleft;unsignedcharwintop;unsignedcharwinright;unsignedcharwinbottomunsignedcharattribute;unsignedcharnormattr;unsignedcharcurrmode;unsignedcharscreenhight;/Z窗口左上角y坐標(biāo)/Z窗口右下角x坐標(biāo)/Z窗口右下角y坐標(biāo)/Z文本屬性//正常屬性/Z當(dāng)前屏顯模式//文本窗口高度(以行數(shù)計)unsignedcharscreenwidth;//文本窗口寬度(以字符個數(shù)計)unsignedcharcurx; //光標(biāo)處x坐標(biāo)unsignedcharcury; //光標(biāo)處y坐標(biāo)};記住,調(diào)用函數(shù)gettextinfo。時,要傳遞structtext-info結(jié)構(gòu)型指針或該結(jié)構(gòu)的首地址,不要傳遞結(jié)構(gòu)變量本身。這個函數(shù)對應(yīng)的頭文件是conio.h返回值:返回文本窗口角點坐標(biāo)、高寬度、文本屬性等值,并存放在info所指向的結(jié)構(gòu)變量中?!纠砍绦蛘Z句說明如何正確調(diào)用gettextinfo。函數(shù):structtext-infowin-status;gettextinfo(&win-status);B圖形顯示ー、確定顯示卡二、選擇顯示模式三、圖形顯示detectgraph()顯示卡檢測函數(shù)initgraph()圖形初始化函數(shù)getdrivernameO獲取圖形驅(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ù)closegraph()關(guān)閉圖形模式函數(shù)ー、確定顯示卡微機系統(tǒng)顯示部分由顯示器(monitor)和顯示卡(adapter)兩部分組成。顯示器是獨立于主機的ー種外部設(shè)備,顯示卡或稱顯示適配卡,也有的稱圖形卡,是插在主機上的ー塊電路板。但也有的顯示卡與主機板設(shè)計在ー起。顯示卡包括寄存器組、存儲器和控制電路三大部分。其中存儲器又包括顯示RAM和ROMBIOS兩部分,微機對顯示屏幕的所有操作都是通過顯示卡來實現(xiàn)的。因此要進行圖形顯示,首先要確定計算機上安裝的是何種顯示卡。ー種方法是詢問計算機或終端使用者,確定將要使用的顯示卡類型。這種方法很難,因為甚至專業(yè)程序員也不總是能確定他正在使用什么樣的硬件。另ー種方法是用軟件査詢硬件以識別當(dāng)前的配置。如果有一些識別硬件的標(biāo)準(zhǔn),這就很簡單了。在BorlandC中對現(xiàn)在所使用的各種顯示卡提供了支持,這只要調(diào)用detectgraph。函數(shù)就可以了,該函數(shù)為程序員確定計算機上使用的顯示卡類型。二、選擇顯示模式顯示模式是指顯示卡支持的分辨率與相應(yīng)的顏色配置。每臺計算機都配置了某種類型顯示卡,可以為該顯示卡指定顯示模式。三、圖形顯示進行圖形顯示首先要確定顯示卡,然后選擇其顯示模式。這些工作都可以調(diào)用圖形功能函數(shù)來完成,其實就是把適合于顯示卡的圖形驅(qū)動程序裝入內(nèi)存。如果圖形驅(qū)動程序未裝入內(nèi)存,那么圖形函數(shù)就不能操作。detectgraph()顯示卡檢測函數(shù)功能:函數(shù)detectgraph。在計算機上安裝有顯示卡的情況下,測定其顯示卡的類型。用法:voiddetectgraph(int*driver,int*mode);說明:函數(shù)把driver所指向的整型變量設(shè)置為圖形驅(qū)動程序的代碼,把mode所指向的整型變量設(shè)置為顯示卡支持的最高有效模式(即該顯示卡能支持的最高分辨率)。該函數(shù)相應(yīng)的頭文件為graphics.h返回值:返回適合于該顯示卡的圖形驅(qū)動程序的代碼(也稱等價值),并存放在driver指向的變量中。若計算機系統(tǒng)中無圖形硬件,則由driver指向的變量設(shè)置為ー2?!纠繖z測計算機是否裝有顯示卡:intdriver,mode;detectgraph(&driver,&mode);if(driver==-2)(printf(Mnographicsadapterinthecomputer");exit(l);)initgraph()圖形初始化函數(shù)功能:函數(shù)initgraph。用于初始化圖形系統(tǒng),把適合的圖形驅(qū)動程序裝入內(nèi)存,設(shè)置圖形函數(shù)所用的顯示模式。用法:該voidinitgraph(int*driver,int*mode,char*path);說明:1)函數(shù)中參數(shù)driver指向圖形驅(qū)動程序(或者等價值)。在頭部文件graphicsル中定義了圖形驅(qū)動程序的宏名與其等價,如ド:宏名等價值DETECT0CGA1MCGA2EGA3EGA644EGAMONO5IBM85146

HERCMONO898910VGAPC3270注:在現(xiàn)在的計算機中,上表中的許多顯示卡已經(jīng)過時,不再使用。這樣就不必?fù)?dān)心圖形驅(qū)動程序的準(zhǔn)確名字,而只要用其等價值即可,若使用detect(即等價值〇)時,initgraph()函數(shù)自動檢測當(dāng)前計算機中裝有的顯示卡類型,并且選用最大分辨率的顯示模式。2)參數(shù)mode指向顯示模式或用等價值(風(fēng)表1-5),mode所指的值必須是有效模式之一。3)參數(shù)path指向圖形驅(qū)動程序所在的路徑,例如path="C:\TC\BGド.若沒有指定路徑,就在當(dāng)前目錄下尋找。一般圖形驅(qū)動程序包含在.BGI文件中,這些文件是系統(tǒng)可以得到的。這個函數(shù)對應(yīng)的頭文件是graphics.ho返回值:無【例】調(diào)用initgraphO自動檢測硬件圖形系統(tǒng),并選用最大分辨率顯示模式。initdrver,mode;driver=DETECT;mode=0;initgraph(&driver,&mode,getdrivernameO獲取圖形驅(qū)動程序名的指針功能:函數(shù)getdrivernameO返回指向當(dāng)前圖形驅(qū)動程序名的指針。用ラ去:char*getdrivemame(void);說明:本函數(shù)可以用來檢測顯示卡,但只能在initgraphO設(shè)置圖形驅(qū)動程序和顯示模式之后調(diào)用。該函數(shù)相應(yīng)的頭文件為graphics.h返冋值:返回一指針,指向含有當(dāng)前圖形驅(qū)動程序名的字符串?!纠匡@示當(dāng)前圖形驅(qū)動程序名:#include<graphics.h>#include<stdio.h>voidmain()intgraphdriver=DETECT,graphmode;char*s;initgraph(&graphdriver,&graphmode,"");s=getdrivername();outtext(KUsingdriver:n);outtext(s);getch();closegraph();功能:函數(shù)getgrapgmode()返回當(dāng)前圖形模式。用ラ去:該intgetgraphmode(void);說明:getgraphmode。函數(shù)無參數(shù)調(diào)用。這個函數(shù)對應(yīng)的頭文件是gmphics.h返回值:返回initgraph。或setgraphmode。所設(shè)置的當(dāng)前圖形模式值?!纠匡@示當(dāng)前圖形模式的代碼:printf("graphicsmodeis%d",getgraphmode());getmoderange。獲取模式值范I韋I函數(shù)功能:函數(shù)getmoderange。返回指定的圖形驅(qū)動程序能夠支持的最低和最高模式值。用法:voidgetmoderange(intdriver,int*lowmode,inthimode);說明:參數(shù)driver是用來調(diào)用此函數(shù)時,指定圖形驅(qū)動程序等價值或宏名。其有效值如下:宏名 等價值TOC\o"1-5"\h\zDETECT 0CGA 1MCGA 2EGA 3EGA64 4EGAMONO 5IBM8514 6HERCMONO 7ATT400 8VGA 9PC3270 10注:上表中的許多顯示卡在現(xiàn)在的計算機上已經(jīng)過時,僅作參考。該函數(shù)想應(yīng)的頭文件為graphics.h返回值:返回的最小和最大有效值存放在參數(shù)指針lowmode和himode分別指向的整型變量中?!纠匡@示當(dāng)前圖形硬件的顯示模式的范圍值:#include"graphics.h"voidmain()(intdriver,mode;intlow,high;mode=0;initgraph(&driver,&mode,"");getmoderange(driver,&low,&high);printf("moderange:%d-%d,low,high);getch();rstorecrtmode();)getmaxmode。獲取最大顯示模式函數(shù)功能:函數(shù)getmaxmode。返回當(dāng)前加載的圖形驅(qū)動程序所支持的最大有效顯示模式。用法:intgetmaxmode(void);說明:本函數(shù)無參數(shù)調(diào)用,返回圖形驅(qū)動程序所支持的最大顯示模式,所有圖形驅(qū)動程序支持從0到getmaxmode。函數(shù)返回值中的任一整數(shù)值(對應(yīng)的顯示模式)。這個函數(shù)對應(yīng)的頭文件是graphics.h返冋值:返回圖形驅(qū)動程序所支持的顯示模式最大值?!纠匡@示當(dāng)前最大顯示模式:printf(HThemaxmodeofthisdriveris%d\n",getmaxmode());getmodename()獲取顯示模式名函數(shù)功能:函數(shù)getmodename??色@取當(dāng)前圖形驅(qū)動程序支持的指定顯示模式的名字。用法:char*getmodename(intmodecode);說明:參數(shù)modecode為整型值。用以指定一顯示模式值調(diào)用該函數(shù)。這個函數(shù)對應(yīng)的頭文件graphics.h返回值:返回指定模式值的顯示模式名。【例】顯示當(dāng)前最大顯示模式名:#include<graphics.h>#include<stdio.h>voidmain()(intgraphdriver=DETECT,graphmode;intmodecode;char*s;initgraph(&graphdriver,&graphmode,,M,);modecode=getmaxmode();s=getmodename(modecode);outtext(HThemaxmodenameis:");outtext(s);getch();closegraph();)graphdefaults。圖形設(shè)置復(fù)位缺省值函數(shù)功能:函數(shù)grpahdefaults。把所有圖形設(shè)置復(fù)位為它們的缺省值,這包括把圖形視口復(fù)位為全屏幕:當(dāng)前位置定位在〇,0;調(diào)色板、背景色和繪圖色都被復(fù)位;填充顏色、填充圖樣、文本文字和排齊方式都返回到它位的缺省值。用法:voidgraphdefaults(void);說明:該函數(shù)無參數(shù)調(diào)用。這個函數(shù)相應(yīng)的頭文件為graphics.h返冋值:無【例】將圖形系統(tǒng)恢復(fù)為其缺省值:graphdefaults();setgraphmode()設(shè)置圖形模式函數(shù)功能:函數(shù)setgraphmode()用當(dāng)前圖形驅(qū)動程序有效的圖形模式調(diào)用,一旦被調(diào)用,setgraphmode。選擇ー個新的圖形模式。注意,圖形顯示模式必須事先由initgraph()初始化。用法:該voidsetgraphmode(intmode);說明:參數(shù)mode調(diào)用時為指定的模式值。此函數(shù)相應(yīng)的頭部文件是graphics.h返回值:無【例】把VGA圖形卡設(shè)置為VGAMED模式:setgraphmode(VGAMED);/Z圖形系統(tǒng)已經(jīng)初始化restorecrtmode?;謴?fù)文本顯示模式函數(shù)功能:函數(shù)restrecrtmode。將顯示模式恢復(fù)到調(diào)用initgraph。時檢測出的初始文本模式。用法:這個voidrestorecrtmode(void);說明:函數(shù)restorecrtmode。和setgraphmode。函數(shù)一起使用,可以實現(xiàn)文本與圖形顯示之間的切換。此函數(shù)對應(yīng)的頭文件為graphics.h返回值:無【例】恢復(fù)顯示模式為初始文本模式:restorecrtmode();graphresult()圖形操作結(jié)果函數(shù)功能:函數(shù)graphresult。函數(shù)返回最后一次圖形操作的代碼。用法:intgraphresult(void);說明:C為圖形設(shè)置了代碼,它們是從ー15到0的整數(shù)值。其含義見表1-6。調(diào)用該函數(shù)時,出錯狀態(tài)被復(fù)位為〇,所以返回值(代碼)最好存于變量中,以供需要時檢測,進行下ー步圖形操作。圖形操作信息名稱代碼含義grOK0成功grNoInitGraph-1沒有圖形初始化grNoDetected-2沒有檢測到圖形硬件grFileNoFound-3沒有找到圖形驅(qū)動文件grlnvalidDriver-4無效圖形驅(qū)動程序grNoLoadMem-5沒有足夠內(nèi)存裝入圖形驅(qū)動程序grNoScanMem-6Scan填充內(nèi)存不足grNoFloadMem-7Flood填充內(nèi)存不足grFontNotFound-8沒有找到字體文件grNoFontMem-9沒有足夠內(nèi)存用于裝字體文件grlnvalidMode-10無效圖形模式grError-11一般圖形錯誤grIOerror-12輸入輸出錯誤grlnvalidFont-13無效字體文件grlnvalidFontNum-14無效字體號grlnvalidDeviceNum-15無效設(shè)備號這個函數(shù)對應(yīng)的頭部文件是graphics.h返回值:返回最后一次圖形操作結(jié)果相應(yīng)的代碼?!纠空{(diào)用graphresult()函數(shù)的實例見下面grapherrormsgO函數(shù)的例子〇grpaherrormsgO圖形錯誤信息函數(shù)功能:函數(shù)grapherrormsgO返回指向出錯代碼相應(yīng)的錯誤信息字符串的指針。用法:char*grapherrormsg(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ù)(如floodfill等)所要用到的內(nèi)存緩沖區(qū)大小。用法: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ū)大小。注意,使用setgraphbufsize。函數(shù)必須在調(diào)用initgraph()之前。返回值:返回先前定義的圖形緩沖區(qū)字節(jié)數(shù)?!纠空{(diào)用此函數(shù)設(shè)置圖形緩沖區(qū)為8KB字節(jié):setgraphbufsize(0x2000);setactivepage()設(shè)置可輸出顯示頁函數(shù)功能:函數(shù)setactiveage()設(shè)置用作圖形輸出的顯示頁。用法:這個voidsetactivepage(intpagenum);說明:參數(shù)pagenum為選擇的顯示頁號,如果調(diào)用成功,那么后續(xù)圖形輸出就寫到選定的輸出頁上。缺省時是以〇頁作為當(dāng)前輸出頁。該函數(shù)只在圖形驅(qū)動程序及其顯示模式支持多個顯示頁時オ起作用。此函數(shù)相應(yīng)的頭文件為graphics.h返回值:無【例】設(shè)置1頁為輸出顯示頁:setactivepage(l);setvisualpage()設(shè)置可見顯示頁數(shù)功能:函數(shù)setvisualpage()設(shè)置屏幕上可見的顯示頁。用法:voidsetvisualpage(intpagenum);說明:參數(shù)pagenum為設(shè)置的顯示頁號。缺省時是以0頁作為當(dāng)前可見頁。調(diào)用這個函數(shù)和調(diào)用setactivepage()ー樣,僅在圖形驅(qū)動程序及其顯示模式支持多個顯示頁時オ有效。用戶可以用系統(tǒng)所支持的任何顯示頁,在它們之間切換,當(dāng)然一次只能有一個顯示頁在屏幕上可見,有時需要在ー頁上建立后備圖形萇圖像,它在當(dāng)時不顯示,一旦需要時,可以馬上切換到該頁,如要實現(xiàn)動畫效果,只需切換顯示頁號即可。用setvisualpage()函數(shù)選定實際顯示在屏幕上的可見頁,用setactivepage。函數(shù)選擇當(dāng)前圖形輸出頁,從而實現(xiàn)圖形頁之間的顯示切換,通常這兩個函數(shù)都是缺省的,這時輸出頁就是可見頁。若不繪制動畫就不需要用到這兩個函數(shù)。這兩個函數(shù)對應(yīng)的頭文件是graphics.h返回值:無【例】設(shè)置可見頁為第1頁:setvisualpage(l);closegraph()關(guān)閉圖形模式函數(shù)功能:函數(shù)closegraph()將系統(tǒng)圖形模式關(guān)閉,,復(fù)位到initgraph。初始文本模式,并且釋放圖形驅(qū)動程序、字體和內(nèi)部緩沖區(qū)所占用的系統(tǒng)內(nèi)存。用法:這個voidclosegraph(void);說明:當(dāng)用戶的程序既用到圖形輸出又用到非圖形輸出時,應(yīng)該調(diào)用此函數(shù)。特別是程序多次調(diào)用initgraph。函數(shù)的情況,要相應(yīng)地調(diào)用closegraph函數(shù),釋放調(diào)用initgraph。所占用的內(nèi)存,否則內(nèi)存很快就滿了,程序無法運行,如果程序結(jié)束,也可以用restorecrtmode。函數(shù)代替該函數(shù),這樣任何分配的內(nèi)存都將釋放。此函數(shù)對應(yīng)的頭文件是graphics.h返回值:無【例】關(guān)閉圖形系統(tǒng):closegraph();c繪圖函數(shù)(一)ー、屏幕和視ロ設(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ù)getbkcolor()返回背景色函數(shù)getcolor()返回當(dāng)前繪圖顏色getmaxcolor()返回最大顏色值函數(shù)getpalette()獲取調(diào)色板函數(shù)getpalettesize()返回調(diào)色板大小函數(shù)getdefaultpalette()獲取缺省調(diào)色板函數(shù)三、屏幕位置函數(shù)getmaxx。返回最大x坐標(biāo)函數(shù)getmaxy()返回最大y坐標(biāo)函數(shù)getx()返回x坐標(biāo)函數(shù)gety()返回y坐標(biāo)函數(shù)moveto。函數(shù)moverel()相對移動函數(shù)TurboC提供了一整套綜合性的圖形函數(shù),上節(jié)介紹了其中有關(guān)圖形顯示的函數(shù),本節(jié)介紹其中的繪圖函數(shù),下節(jié)將介紹它的圖形文本函數(shù)。一般繪圖時,首先要清除屏幕,設(shè)置圖形視ロ,設(shè)置繪圖顏色,然后在屏幕上某個位置畫點或直線或曲線等。下面給出具有這些功能的函數(shù)。一、屏幕和視ロ設(shè)置與清除函數(shù)setviewport()設(shè)置圖形視ロ函數(shù)功能:函數(shù)setviewport()設(shè)置當(dāng)前圖形視U。用法:voidsetviewport(intleft,inttop,intright,intbottom,intclip);說明:參數(shù)left,top是左上角坐標(biāo),right,bottom是右下角坐標(biāo),它們都是絕對屏幕坐標(biāo)。傳給setviewport。的第五個參數(shù)是clip,如果clip為1,則超出視ロ的輸出圖形自動被裁剪掉,即所有作圖限制于當(dāng)前圖形視ロ之內(nèi),如果clip為〇,則不做裁剪,即作圖將無限制地擴展于視ロ周界之外,直到屏幕邊界。若無效參數(shù)傳入setviewport(),則graphresult。函數(shù)返回值ー11,先前視ロ設(shè)置仍有效。setviewport()函數(shù)的對應(yīng)頭文件為graphics.h返回值:無【例】建立對角為(6,6)和(88,88)的視ロ,并帶有裁剪功能:setviewport(6,6,88,88,1);clearviewport。清除圖形視ロ函數(shù)功能:函數(shù)clearviewport。清除當(dāng)前圖形視ロ,并把光標(biāo)從當(dāng)前位置移到原點(0,0)。用法:或voidclearviewport(void);說明:此函數(shù)調(diào)用執(zhí)行后,當(dāng)前圖形視口將不復(fù)存在。這個函數(shù)對應(yīng)的頭文件是graphics.h返回值:無【例】清除當(dāng)前圖形視ロ,但并非整個屏幕:clearviewport();cleardevice()清除屏幕函數(shù)功能:函數(shù)cleardevice()清除整個屏幕,并且將當(dāng)前位置移到屏幕原點。用法:voidcleardevice(void);說明:該函數(shù)類似于文本模式下的函數(shù)clrscr。,但clrscr()函數(shù)不能在圖形方式下工作;同樣cleardevice()函數(shù)不能在文本模式下工作。這個函數(shù)相應(yīng)的頭文件為graphics.h返回值:無【例】清除當(dāng)前整個屏幕:cleardevice();getviewsettings()獲取圖形視口設(shè)置函數(shù)功能:函數(shù)getviewsettings。返回當(dāng)前圖形視ロ坐標(biāo)和裁剪標(biāo)志,坐標(biāo)是絕對屏幕坐標(biāo),裁剪標(biāo)志1或〇〇用法:voidgetviewsettings(structviewporttype*info);說明:該函數(shù)執(zhí)行后,把有關(guān)當(dāng)前視ロ的信息裝入info指向的viewporttype型結(jié)構(gòu)中。viewporttype結(jié)構(gòu)定義如下:structviewporttype{intleft,top,right,bottom;intclipflag;J這里left,top中存放視ロ左上角坐標(biāo),right,bottom中存放視ロ右下角坐標(biāo),clipflag中存放裁剪標(biāo)志,若clipHag為1,執(zhí)行裁剪以防止超出視口邊界,如果clipflag為0,則不對超出邊界輸出作裁剪。getviewsettings()函數(shù)對應(yīng)的頭文件是graphics.h返回值:無【例】顯示當(dāng)前視口角點坐標(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ù)進行圖形顯示或繪圖,除了要知道用什么顯示卡以及相應(yīng)的圖形驅(qū)動程序外,還必須了解它們支持什么樣的調(diào)色板顏色。setpalette。設(shè)置調(diào)色板函數(shù)功能:函數(shù)setpalette??蓪φ{(diào)色板上的顏色的色彩值重新設(shè)定。用法:setpalette()voidsetpalette(intvalue,intcolor);說明:參數(shù)value為色彩值,color為色彩值相應(yīng)的顏色名。當(dāng)需要將一顏色指定為ー色彩值地,即可調(diào)用此函數(shù)來設(shè)置。表1-7預(yù)先定義的調(diào)色板與色彩調(diào)色板 色彩〇色彩1 色彩2 色彩3色色色色

黑黑黑黑綠青色色

淡淡綠青紅淺色色色色

黑黑黑黑綠青色色

淡淡綠青紅淺黃色粉紅白色紅色棕色品粉紅淡灰色這個函數(shù)相對應(yīng)的頭文件為graphics.h返回值:無setallpalette。設(shè)置整個調(diào)色板函數(shù)功能:函數(shù)setallpalette()對某個調(diào)色板上的所有顏色重新設(shè)定彩色值。用法:voidsetallpalette(structpalettetype*p);說明:在低分辨率圖形顯示模式下,該函數(shù)無效。若函數(shù)調(diào)用成功,則把p指向的palettetype結(jié)構(gòu)中的色彩值設(shè)置為當(dāng)前調(diào)色板所有顏色的新色彩值。palettetype結(jié)構(gòu)定義如下:structpalettetype{unsignedcharsize;signedcharcolor;};這里必須把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++)p.color[i]=i;p.size=16;setallpalette(&p);setbackcolor()設(shè)置背景顏色函數(shù)功能:函數(shù)setbackcolor()把當(dāng)前調(diào)色板顏色的第一個值改成指定的顏色值,以設(shè)置背景顏色。用法:voidsetbackcolor(intcolor);說明:參數(shù)color為指定的背景色,其有效值可以是顏色符號名,也可以是色彩值。表1-8列出了背景顏色供選取。表1-8背景顏色值顏色符號名色彩值顏色符號名色彩值BLACK(黑色)0DARKGRAY(深灰)8BLUE(藍(lán)色)1LIGHTBLUE(淡藍(lán))9GREEN(綠色)2LIGHTGREEN(淡綠)10CYAN(青色)3LIGHTCYAN(淡青)11RED(紅色)4LIGHTRED(淡紅)12TOC\o"1-5"\h\zMAGENTA(品紅) 5 LIGHTMAGENTA(粉紅) 13BROWN(棕色) 6 YELLOW(黃色) 14LIGHTGRAY(淡灰) 7 WHITE(白色) 15調(diào)用該函數(shù),將改變整個屏幕的顏色,如果新的背景色與原來屏幕的圖形顏色相同,盡管圖形信息不會丟失,但是看不見圖形了。如果所選背景色為對比鮮明的顏色,看不見的圖形就會重新清晰地顯現(xiàn)出來。這個函數(shù)的頭文件為graphics.h返回值:無【例】把背景色置為淡藍(lán)色。setbackcolor(LIGHTBLUE);setcolor()設(shè)置顏色函數(shù)功能:函數(shù)setcolor。設(shè)置當(dāng)前繪圖顏色(或稱做前景色)。用法:該voidssetcolor(intcolor);說明:參數(shù)color為選擇的當(dāng)前繪圖顏色。在高分辨率顯示模式下,選取的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,,M,);moveto(0,200);for(i=0;i<16;i++)(setcolor(i);linerel(20,0);)getch();restorecrtmode();}getbkcolor()返回背景色函數(shù)功能:函數(shù)getbackcolor。返冋當(dāng)前背景顏色。用法:intgetbackcolor(void);說明:調(diào)用該函數(shù)后,獲得背景色,但其值不一定是調(diào)色板上的色彩值。這個函數(shù)對應(yīng)的頭文件是graphics.h返回值:返回當(dāng)前繪圖色彩值?!纠糠祷禺?dāng)前背景色彩值:printf("backgroundcoloris%d",getbkcolor());getcolor()返回當(dāng)前繪圖顏色用法:intgetcolor(void);說明:對于使用彩色低分辨率顯示模式調(diào)色板,返回值是調(diào)色板顏色號,而不是實際顏色值,對于高分辨率顯示模式,返回值對應(yīng)于顏色值,除非調(diào)色板顏色已被函數(shù)setpalette。或setallpalette。改變了。這個函數(shù)相應(yīng)的頭文件為graphics.h返回值:返回當(dāng)前繪圖顏色值?!纠縫rintf("drawingcoloris%d",getcolor。);getmaxcolor()返回最大顏色值函數(shù)用法:intgetmaxcolor(void);說明:該函數(shù)調(diào)用后,在低分辨率模式下返回值為3(這種模式下有效顏色值為0至3);在高分辨率顯示模式下返冋值可以是256或更高(此模式下有效顏色值為0至256或更高)。這個函數(shù)相應(yīng)的頭文件為graphics.h返回值:返回當(dāng)前圖形模式下最大顏色值?!纠匡@示最大有效顏色值:#include<graphics.h>voidmain。(intdriver,mode;drive匸DETECT;mode=0;initgraph(&driver,&mode,"");printf(";largestcolor:%d",getmaxcolor。);getch。;restorecrtmode。;}getpalette。獲取調(diào)色板函數(shù)功能:函數(shù)getpalette。將當(dāng)前調(diào)色板的值填入palettetype型結(jié)構(gòu)中。用法:getpalette()voidgetpalette(structpalettetype*p);說明:此函數(shù)調(diào)用執(zhí)行后,當(dāng)前調(diào)色板的值被裝入p指向的結(jié)構(gòu)里;從而可從該結(jié)構(gòu)中獲得這個調(diào)色板的設(shè)置信息。palettetype型結(jié)構(gòu)定義如下:#defineMAXCOLORS15structpalettetype{unsignedcharsize;signedcharcolors[MAXCOLORS+l];};其中size用于存放當(dāng)前調(diào)色板的有效顏色個數(shù);colors數(shù)組的每ー元素中裝入調(diào)色板的ー個相應(yīng)顏色值。表!-9列出了這些顏色值(適用于EGA/VGA)顏色符號名 色彩值TOC\o"1-5"\h\zEGA_BLACK(EGA黑色) 0EGA一BLUE(EGA藍(lán)色) 1EGA_GREEN(綠色) 2EGA_CYAN(EGA青色) 3EGA_RED(紅色) 4EGA_MAGENTA(EGA品紅) 5EGA_BROWN(EGA棕色) 20EGA_LIGHTGRAY(EGA淡灰) 7EGA_DARKGRAY(EGA深灰) 56EGA_LIGHTBLUE(EGA淡藍(lán)) 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ù)目:#include<graphics.h>voidmain()(intdriver,mode;structpalettetypep;driver=DETECT;/Z自動檢測mode=0;initgraph(&driver,&mode,"");getpalette(7p);printf(Mnumberofcolorspalette:%d”,p.size);getch();restorecrtmode();)getpalettesize()返回調(diào)色板大小函數(shù)功能:函數(shù)getalettesize。返回調(diào)色板的顏色數(shù)冃。用法:該intgetpalettesize((void);說明:調(diào)用這個函數(shù)后,就知道調(diào)色板上有多少顏色數(shù)目可在當(dāng)前顯示模式下設(shè)置。此函數(shù)對應(yīng)的頭文件是graphics.h返回值:返回當(dāng)前顯示模式支持的調(diào)色板的顏色數(shù)目?!纠匡@示當(dāng)前顯示模式支持的調(diào)色板的顏色數(shù)目。intnumber;number=getpalettesize();printf("palettesize:%d",number);getdefaultpalette()獲取缺省調(diào)色板函數(shù)功能:函數(shù)getdefaultpalette。返回指向缺省調(diào)色板的指針。用;去:該structpalettetype*getdefauItpalette(void);說明:調(diào)色板結(jié)構(gòu)類型palettetype定義如下:#defineMAXCOLORS15structpalettetype{unsignedcharsize;signedcharcolorsfMAXCOLORS+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;structpalettetype*palette;interrorcode,color;initgraph(&graphdriver,&graphmode,"");errorcode=graphresult();if(errorcode!=grOK){printf("Graphicserror%s\n",grapherrormsg(errorcode));exit(l);}palette=getdefaultpalette();printf("palette->size%d\n”,palette->size);getch();fbr(color=0;color<palette->size;color++)(setfillstyle(LINE_F!LL,color);bar(20*(color-1),0,20*color,20);getch();)if(palette->size>1){do(setpalette(random(palette->size),random(palette->size));}while(!kbhit());getch();}setallpalette(palette);closegraph();}三、屏幕位置函數(shù)在圖形模式下,字符屏幕坐標(biāo)被像素坐標(biāo)取代了,這種像素坐標(biāo)根據(jù)不同的顯示硬件,水平與垂直方向的分辨率可以從320X200變化到1280X1024等。由于分辨率的變化,以致要加載合適的圖菜驅(qū)動程序,因此大多數(shù)圖形程序是通過檢測硬件開始的,然后使用getmaxx。和getmaxy。等函數(shù)來決定屏幕尺寸,調(diào)整隨后的操作來適應(yīng)這些屏幕限制。getmaxx。返回最大x坐標(biāo)函數(shù)功能:函數(shù)getmaxx。返回當(dāng)前圖形模式下的最大x坐標(biāo),即最大橫向坐標(biāo)。用法:intmaxx(void);說明:此函數(shù)獨立于圖形視口設(shè)置,僅取決于顯示卡的顯示模式相應(yīng)的分辨率。這個函數(shù)對應(yīng)的頭文件是graphics.h返回值:返回當(dāng)前顯示模式最大x坐標(biāo)值?!纠渴褂帽竞瘮?shù)的例子見51.getmaxy()函數(shù)的例子中。getmaxyO返回最大y坐標(biāo)函數(shù)功能:函數(shù)getmaxyO返回當(dāng)前圖形模式下的最大y坐標(biāo),即最大縱向坐標(biāo)。用法:intgetmaxy(void);說明:此函數(shù)獨立于圖形視口設(shè)置,僅取決于顯示卡的顯示模式相應(yīng)的分辨率。這個函數(shù)對應(yīng)的頭文件為graphics.h返冋值:返回當(dāng)前顯示模式的最大y坐標(biāo)值?!纠?include<graphics.h>voidmain()(intdriver,mode;driver=DETECT;mode=0;initgraph(&driver,&mode,printf("maxx,y:%d%d",getmaxx(),getmaxyO);getch();restorecrtmode();getx()返回x坐標(biāo)函數(shù)功能:函數(shù)getx()返回當(dāng)前圖形模式下當(dāng)前位置的x坐標(biāo)(水平像素坐標(biāo))。用法:intgetx(void);說明:這里坐標(biāo)是相對于當(dāng)前圖形視ロ的,如果沒有設(shè)置圖形視ロ,那么缺省的圖形視口為整個屏幕。這類似于文本模式下使用wherex()函數(shù)。getx()函數(shù)相應(yīng)的頭文件是graphics.h返回值:返回當(dāng)前x坐標(biāo)值。【例】見53.gety()函數(shù)中的例子〇gety()返回y坐標(biāo)函數(shù)功能:函數(shù)gety()返回圖菜模式下當(dāng)前位置的y坐標(biāo)(垂直像素坐標(biāo))。用法:intgety(void);說明:函數(shù)返回的坐標(biāo)是相對于當(dāng)前圖形視ロ的,如果沒有設(shè)置圖形視ロ,那么缺省的圖形視口為整個屏幕,這類似于文本模式下使用wherey()函數(shù)。gety()函數(shù)對應(yīng)的頭文件是graphics.h返回值:返回當(dāng)前y坐標(biāo)值。【例】顯示圖形模式下當(dāng)前位置的x,y坐標(biāo)值:printf("x:%d,y:%d",getx(),gety());moveto。函數(shù)功能:函數(shù)moveto()將當(dāng)前位置移動到指定坐標(biāo)的位置說明:這相當(dāng)于文本模式下gotoxy()函數(shù)的操作,它提供對等的功能。此函數(shù)對應(yīng)的頭文件為graphics.h返冋值:無【例】把當(dāng)前位置移到(66,88)位置上:moveto(66,88);moverel()相對移動函數(shù)功能:函數(shù)moverel。根據(jù)指定的偏移量,將當(dāng)前位置移動ー個相對距離(即偏移量大小的距離),成為新的當(dāng)前位置。用法:voidmoverel(intdx,intdy);說明:參數(shù)dx為x方向相對移動距離dy為y方向相對移動距離。相對移動對圖形應(yīng)用程序,往往要比絕對移動方便ー些。這個函數(shù)對應(yīng)的頭文件是gmphics.h返回值:無【例】下面的程序,當(dāng)語句執(zhí)行到當(dāng)前位置在(90,90),則執(zhí)行后將移動到(100,120)的位置上。即x方向相對移動10,y方向相對移動30:moverel(10,30);D繪圖函數(shù)(二)四、圖形和圖像函數(shù)(-)像素函數(shù)putpielQ畫像素點函數(shù)getpixel。返回像素色函數(shù)(-)直線和線型函數(shù)line()畫線函數(shù)lineto()畫線函數(shù)linerel()相對畫線函數(shù)setlinestyle()設(shè)置線型函數(shù)getlinesettings()獲取線型設(shè)置函數(shù)setwritemode。設(shè)置畫線模式函數(shù)(三)多邊形函數(shù)rectangle()畫矩形函數(shù)bar()畫條函數(shù)bar3d()畫條塊函數(shù)drawpoly()畫多邊形函數(shù)(四)圓、弧和曲線函數(shù)getaspectratio。獲取縱橫比函數(shù)circle。畫圓函數(shù)arc()畫圓弧函數(shù)ellipse。畫橢圓弧函數(shù)fillellipse()畫橢圓區(qū)函數(shù)pieslice()畫扇區(qū)函數(shù)sector。畫橢圓扇區(qū)函數(shù)getarccoords。獲取圓弧坐標(biāo)函數(shù)(五)填充函數(shù)setfillstyle。設(shè)置填充圖樣和顏色函數(shù)setfillpattern。設(shè)置用戶圖樣函數(shù)floodfillQ填充閉域函數(shù)fillpoly。填充多邊形函數(shù)getfillsettings()獲取填充設(shè)置函數(shù)getfillpattern。獲取用戶圖樣設(shè)置函數(shù)(六)圖像函數(shù)imagesizeQ圖像存儲大小函數(shù)getimage。保存圖像函數(shù)putimage。輸出圖像函數(shù)四、圖形和圖像函數(shù)對許多圖形應(yīng)用程序,直線和曲線是非常有用的。但對有些圖形只能靠操作單個像素才能畫出。當(dāng)然如果沒有畫像素的功能,就無法操作直線和曲線的函數(shù)。而且通過大規(guī)模使用像素功能,整個圖形就可以保存、寫、擦除和與屏幕上的原有圖形進行疊加。(-)像素函數(shù)putpixel()畫像素點函數(shù)功能:函數(shù)putpixel。在圖形模式下屏幕上畫一個像素點。用法:voidputpixel(intx,inty,intcolor);說明:參數(shù)x,y為像素點的坐標(biāo),color是該像素點的顏色,它可以是顏色符號名,也可以是整型色彩值。此函數(shù)相應(yīng)的頭文件是graphics.h返回值:無【例】在屏幕上(6,8)處畫一個紅色像素點:putpixel(6,8,RED);getpixel。返回像素色函數(shù)功能:函數(shù)getpixel。返回像素點顏色值。用法:該intgetpixel(intx,inty);說明:參數(shù)x,y為像素點坐標(biāo)。函數(shù)的返回值可以不反映實際彩色值,這取決于調(diào)色板的設(shè)置情況(參見setpalette。函數(shù))。這個函數(shù)相應(yīng)的頭文件為graphics.h返回值:返回一個像素點色彩值。【例】把屏幕上(8,6)點的像素顏色值賦給變量colorscolor=getpixel(8,6);(-)直線和線型函數(shù)有三個畫直線的函數(shù),即line(),lineto(),linerel()。這些直線使用整型坐標(biāo),并相對于當(dāng)前圖形視ロ,但不一定受視ロ限制,如果視ロ裁剪標(biāo)志clip為真,那么直線將受到視ロ邊緣截斷;如果clip為假,即使終點坐標(biāo)或新的當(dāng)前位置在圖形視ロ或屏幕極限之外,直線截斷到屏幕極限。有兩種線寬及幾種線型可供選擇,也可以自己定義線圖樣。下面分別介紹直線和線型函數(shù)。Iine()畫線函數(shù)功能:函數(shù)line。使用當(dāng)前繪圖色、線型及線寬,在給定的兩點間畫一直線。用法:該voidline(intstartx,intstarty,intendx,intendy);說明:參數(shù)startx,starty為起點坐標(biāo),endx,endy為終點坐標(biāo),函數(shù)調(diào)用前后,圖形狀態(tài)下屏幕光標(biāo)(一般不可見)當(dāng)前位置不改變。此函數(shù)相應(yīng)的頭文件為graphics.h返回值:無【例】見函數(shù)60.linerel()中的實例〇iineto()畫線函數(shù)功能:函數(shù)lineto。使用當(dāng)前繪圖色、線型及線寬,從當(dāng)前位置畫一直線到指定位置。用法:voidlineto(intx,inty);說明:參數(shù)x,y為指定點的坐標(biāo),函數(shù)調(diào)用后,當(dāng)前位置改變到指定點(x,y)。該函數(shù)對應(yīng)的頭文件為graphics.h返冋值:無【例】見函數(shù)60.linerel。中的實例。Iinerel()相對畫線函數(shù)功能:函數(shù)linerel。使用當(dāng)前繪圖色、線型及線寬,從當(dāng)前位置開始,按指定的水平和垂直偏移距離畫一直線。用法:這個voidlinerel(intdx,intdy);說明:參數(shù)dx,dy分別是水平偏移距離和垂直偏移距離。函數(shù)調(diào)用后,當(dāng)前位置變?yōu)樵黾悠凭嚯x后的位置,例如,原來的位置是(8,6),調(diào)用函數(shù)linerel(10,18)后,當(dāng)前位置為(18,24)。返冋值:無【例】下面的程序為畫線函數(shù)調(diào)用實例:#include<graphics.h>voidmain()(intdriver,mode;driver=DETECT;mode=0;initgraph(&driver,&mode,"");setcolor(15);line(66,66,88,88);lineto(100,100);linerel(36,64);getch();restorecrtmode();}setlinestyle()設(shè)置線型函數(shù)功能:setlinestyle。為畫線函數(shù)設(shè)置當(dāng)前線型,包括線型、線圖樣和線寬。用法:setlinestyle()voidsetlinestyle(intstly,unsignedpattern,intwidth);說明:參數(shù)style為線型取值,也可以用相應(yīng)名稱表示,如表1-10中所示。參數(shù)pattern用于自定義線圖樣,它是16位(bit)字,只有當(dāng)style=USERBlT_LINE(值為1)時,pattern的值オ有意義,使用用戶自定義線圖樣,與圖樣中“ド位對應(yīng)的像素顯示,因此,pattern=OxFFFF,則畫實線;pattem=0x9999,則畫每隔兩個像素交替顯示的虛線,如果要畫長虛線,那么pattern的值可為OxFFOO和OxFOOF,當(dāng)style不為USERBIT_LINE值時,雖然pattern的值不起作用,但扔須為它提供ー個值,一般取為〇。參數(shù)wigth用來設(shè)定線寬,其取值見表1/1,表中給出了兩個值,即1和3,實際上,線寬取值為2也是可以接受的。若用非法參數(shù)調(diào)用setlinestyle。函數(shù),那么graphresult()會返回錯誤代碼,并且當(dāng)前線型繼續(xù)有效。TurboC提供的線型與線寬定義在頭文件graphics.h中,表1-10和1-1I分別列出了參數(shù)的取值與含義。表1-10線型名 稱取值含義SOLID_LINE0實線DOTTED_LINEI點線CNTER_LINE2中心線DASHED_LINE3虛線USERBIT_LINE4用戶自定義線型表1-11線寬名 稱取值說明NORM_WIDTH(常寬)1ー個像素寬(缺省值)THICK一WIDTH(加寬)3三個像素寬這個函數(shù)的頭文件是graphics.h返回值:無【例】下面的程序顯示了BC中所提供的線型圖樣:#inc1ude<graphics.h>voidmain()(intdriver,mode;driver=DETECT;mode=0;initgraph(&driver,&mode,for(i=0;i<4;i++)(setlinestyle(i,0,1);line(i*50,200,i*50+60,200))getch();restored!mode();getlinesettings()獲取線型設(shè)置函數(shù)功能:函數(shù)getlinesettings。用當(dāng)前設(shè)置的線型、線圖樣和線寬填寫linesettingstype型結(jié)構(gòu)。用法:voidgetlinesettings(structlinesettingstype*info);說明:此函數(shù)調(diào)用執(zhí)行后,當(dāng)前的線型、線圖樣和線寬值被裝入info指向的結(jié)構(gòu)里,從而可從該結(jié)構(gòu)中獲得線型設(shè)置。linesettingstype型結(jié)構(gòu)定義如下:structlinesettingstype{intlinestyle;unsignedupattern;intthickness;};其中l(wèi)inestyle用于存放線型,線型值為表!-10中的各值之一。upattem用為裝入用戶自定義線圖樣,這是16位字,每一位等于一個像素,如果哪個位被設(shè)置,那么該像素打開,否則關(guān)閉。thickness為線寬值存放的變量,可參見表1-11。getlinesettings。函數(shù)對應(yīng)的頭文件

溫馨提示

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

評論

0/150

提交評論