版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
圖形程序設(shè)計第1頁,共65頁,2023年,2月20日,星期四TurboC為用戶提供了一個功能很強(qiáng)的畫圖軟件庫,它又稱為Borland圖形接口(BGI),它包括圖形庫文件(graphics.lib),圖形頭文件(graphics.h)和許多圖形顯示器(圖形終端)的驅(qū)動程序(如CGA.BGI、EGAVGA.BGI等)。及一些字符集的字體驅(qū)動程序(如goth.chr黑體字符集等)。編寫圖形程序時用到的一些圖形庫函數(shù)均在graphics.lib中,執(zhí)行這些函數(shù)時,所需的有關(guān)信息(如宏定義等)則包含在graphics.h頭文件中。第2頁,共65頁,2023年,2月20日,星期四圖形顯示的坐標(biāo)顯示器的屏幕如同一張坐標(biāo)紙,在其上顯示圖形時,圖形上任一點的位置均有確定的坐標(biāo),即可用x,y坐標(biāo)值來表示。第3頁,共65頁,2023年,2月20日,星期四圖形顯示的坐標(biāo)--象素顯示器顯示的圖形均由一些圓點組成(其亮度、顏色不同),這些點稱為象素(或稱象點),它們是組成圖形的最小單位。象素的大小可以通過設(shè)置不同的顯示方式來改變。象素在屏幕上的位置則可由其所在的x,y坐標(biāo)來決定。第4頁,共65頁,2023年,2月20日,星期四圖形顯示器與適配器計算機(jī)中要顯示的字符和圖形均以數(shù)字形式存儲在存儲器中,而顯示器接收的應(yīng)是模擬信號。常用的顯示器有三條模擬紅綠蘭顏色的模擬信號輸入線,每條輸入線的電壓決定了顏色的亮度,只要能產(chǎn)生出可區(qū)分的電壓來,它們不同的組合,便可使顯示器顯示出不同的顏色來。第5頁,共65頁,2023年,2月20日,星期四圖形顯示器與適配器插在PC微機(jī)插槽中的圖形卡(即適配器),其作用就是將要顯示的字符和圖形以數(shù)字形式存儲在卡上的視頻存儲器VRAM中,再將其變成視頻模擬信號送往相應(yīng)適配的顯示器進(jìn)行顯示,也即適配器在計算機(jī)主機(jī)和顯示器之間起到了信息轉(zhuǎn)換和視頻發(fā)送作用。由于計算機(jī)配有的顯示器種類不同,因而適配器種類不同第6頁,共65頁,2023年,2月20日,星期四常用的幾種適配器1.單色顯示適配器(MDA);僅顯示一種顏色,僅支持80×25行的字符顯示。2.彩色圖形適配器(CGA);這是PC/XT等微機(jī)配用的顯示器圖形卡,它可以產(chǎn)生單色或彩色字符和圖形。3.增強(qiáng)型圖形適配器〔EGA);除支持CGA的四種顯示模式外,還增加了分辨率為640×200的16色顯示方式,(EGAHI),也可顯示16色。第7頁,共65頁,2023年,2月20日,星期四常用的幾種適配器4.視頻圖形陣列適配器(VGA);它是目前流行的PC微機(jī)顯示標(biāo)準(zhǔn),它支持CGA,EGA的所有顯示方式,但自己還有640×480的高分辨顯示方式(VGAHI)、640×350的中分辨顯示方式(VGAMED)和640×200的低分辨顯示方式(VGALO),它們均可有16種顯示顏色可供選擇。第8頁,共65頁,2023年,2月20日,星期四常用的幾種適配器5.TVGA;它是目前市面上最流行的PC486,586微機(jī)配的顯示器標(biāo)準(zhǔn),在圖形方式下,它可有640×400,640×480,800×600,1024×768及768×1024等分辨率,可選顏色達(dá)256種,在文本方式下,可支持25、30、43、60行,132列的字符顯示。它也兼容CGA、EGA、VGA的顯示方式,由于TurboC早于該產(chǎn)品出現(xiàn),因而上述增強(qiáng)了的顯示方式均不支持,但對于高級編程者,可通過對TVGA各專用寄存器直接編程來實現(xiàn)這些功能。第9頁,共65頁,2023年,2月20日,星期四常用的幾種適配器6.PVGA;它是paradiseVGA的縮寫,它由WesternDigital公司生產(chǎn),有的叫SVGA(香港Surperking公司生產(chǎn)的386微機(jī)上使用)。還有稱為EVGA(ExtendedVGA),它們和PVGA在軟硬件上均是兼容的。PVGA完全兼容CGA、EGA、VGA的所有工作方式,它還有自己一些特有的工作模式,與TVGA類似。7.XGA;XGA是IBM公司新推出的一種增強(qiáng)性圖形適配器,它是VGA的換代產(chǎn)品,具有更高的分辨率和性能,它有和CGA,EGA,VGA全兼容的工作方式,但顯示速度卻比VGA快一倍。第10頁,共65頁,2023年,2月20日,星期四常用的幾種適配器8.CVGA;這是國內(nèi)研制的帶有顯示漢字功能的VGA圖形適配器,它帶有漢字字庫,該適配器提供了和CGA、EGA、VGA全兼容的工作方式,還提供了在文本工作方式下的高分辨圖形顯示功能。在它的ROMBIOS中提供了INT10H的功能號為30H-38H的功能調(diào)用,因而提供了方便的漢字處理功能。第11頁,共65頁,2023年,2月20日,星期四顯示器工作方式文本方式或稱字符顯示方式圖形顯示方式它們的主要差別是顯示存儲器(VRAM)中存的信息不同。字符方式時,VRAM存放要顯示字符的ASCII碼,用它作為地址,取出字符發(fā)生器ROM(固定存儲器)中存放的相應(yīng)字符的圖象(又稱字模),變成視頻信號在顯示器屏上進(jìn)行顯示。圖形方式時,則要顯示的圖形的圖象直接存在VRAM中,VRAM中某地址單元存放的數(shù)就表示了相應(yīng)屏幕上某行和列上的象素及顏色。第12頁,共65頁,2023年,2月20日,星期四TurboC支持的適配器和圖形模式1.MCGA(多色圖形陣列);它和VGA是PS/2系列微機(jī)的主要適配器,MCGA功能上同CGA相似,它和CGA是部分兼容的,但有些功能又和VGA類似,可有640×480的二色模式。2.IBM8514;該適配器可插入PS/2微機(jī)中,它有較強(qiáng)的圖形功能,最高分辨率可達(dá)1024×768,可有256種顏色。3.HERC;大力神公司生產(chǎn)的一種單色適配器,是PC系列微機(jī)早期的第三種顯示標(biāo)準(zhǔn)(其它兩種MDA和CGA),它采用720×348高分辨單色顯示模式。4.EGAMONO;EGA單色適配器,它只有一種640×350單色顯示模式。第13頁,共65頁,2023年,2月20日,星期四圖形系統(tǒng)的初始化即要用什么類型的圖形顯示適配器的驅(qū)動程序,采用什么模式的圖形方式(也就是相應(yīng)程序的入口地址),適配器驅(qū)動程序的尋找路徑名。注意:所用系統(tǒng)的顯示適配器一定要支持所選用的顯示模式,否則將出錯。第14頁,共65頁,2023年,2月20日,星期四圖形系統(tǒng)的初始化
圖形系統(tǒng)的初始化函數(shù)voidfarinitgraph(intfar*driver,intfar*mode,charfar*path_for_driver);其中g(shù)driver和gmode分別表示圖形驅(qū)動器和模式,path是指圖形驅(qū)動程序所在的目錄路徑。圖形驅(qū)動程序由TurboC出版商提供,文件擴(kuò)展名為.BGI。根據(jù)不同的圖形適配器有不同的圖形驅(qū)動程序。例如對于EGA、VGA圖形適配器的圖形驅(qū)動程序為EGAVGA.BGI。
第15頁,共65頁,2023年,2月20日,星期四圖形系統(tǒng)的初始化
圖形系統(tǒng)檢測函數(shù)voidfardetectgraph(intfar*graphdriver,intfar*graphmode);
有時編程者并不知道所用的圖形顯示器適配器種類,而且我們?yōu)榱藢⒕帉懙某绦蚩梢杂糜诓煌瑘D形驅(qū)動器,增強(qiáng)程序的通用性,我們通常不指定圖形顯示器適配器種類,而使用TurboC提供了一個自動檢測顯示器硬件的函數(shù),其中g(shù)driver和gmode意義同上。
第16頁,共65頁,2023年,2月20日,星期四例1:自動進(jìn)行硬件測試后進(jìn)行圖形初始化
#include"graphics.h"main(){intgdriver,gmode;detectgraph(&gdriver,&gmode);/*自動測試硬件*/printf("driveris%d,modeis%d\n",gdriver,gmode);/*輸出結(jié)果*/getch();initgraph(&gdriver,&gmode,"");/*根據(jù)測試結(jié)果初始化圖形*/circle(320,240,50);circle(320,240,80);circle(320,240,110);getch();closegraph();}
第17頁,共65頁,2023年,2月20日,星期四上例程序中先對圖形顯示器自動檢測,然后再用圖形初始化函數(shù)進(jìn)行初始化設(shè)置。其中,closegraph()為退出圖形狀態(tài)的函數(shù),其調(diào)用格式為:voidfarclosegraph(void);調(diào)用該函數(shù)后可退出圖形狀態(tài)而進(jìn)入文本方式,并釋放用于保存圖形驅(qū)動程序和字體的系統(tǒng)內(nèi)存。同時TurboC提供了一種更簡單的初始化圖形的方法,即用gdriver=DETECT語句后再跟initgraph()函數(shù)就行了。比如,上例可改為例2的樣子。
第18頁,共65頁,2023年,2月20日,星期四例2:自動進(jìn)行硬件測試后進(jìn)行圖形初始化
#include"graphics.h"main(){intgdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"");circle(320,240,50);circle(320,240,80);circle(320,240,110);getch();closegraph();}第19頁,共65頁,2023年,2月20日,星期四屏幕顏色的設(shè)置對于圖形模式的屏幕顏色設(shè)置,同樣分為背景色的設(shè)置和前景色的設(shè)置。在Turboc中分別使用以下兩個函數(shù):
voidfarsetbkcolor(intcolor);設(shè)置背景色
voidfarsetcolor(intcolor);設(shè)置作圖色其中color為圖形方式下顏色的規(guī)定數(shù)值,符號常數(shù)及數(shù)值如下所示。第20頁,共65頁,2023年,2月20日,星期四屏幕顏色的設(shè)置符號常數(shù)數(shù)值含義字符或背景BLACK0黑兩者均可BLUE1蘭兩者均可GREEN2綠兩者均可CYAN3青兩者均可RED4紅兩者均可MAGENTA5洋紅兩者均可BROWN6棕兩者均可LIGHTGRAY7淡灰兩者均可DARKGRAY8深灰只用于字符LIGHTBLUE9淡蘭只用于字符LIGHTGREEN10淡綠只用于字符LIGHTCYAN11淡青只用于字符LIGHTRED12淡紅只用于字符LIGHTMAGENTA13淡洋紅只用于字符YELLOW14黃只用于字符WHITE15白只用于字符BLINK128閃爍只用于字符第21頁,共65頁,2023年,2月20日,星期四清除圖形屏幕內(nèi)容使用清屏函數(shù),其調(diào)用格式如下
voidfarcleardevice(void);
有關(guān)顏色設(shè)置、清屏函數(shù)的使用請看例3。
例3:
#include"stdio.h"#include"graphics.h"main(){intgdriver,gmode,i,j;gdriver=DETECT;initgraph(&gdriver,&gmode,"");/*圖形初始化*/setbkcolor(0);/*設(shè)置圖形背景*/cleardevice();for(i=0;i<=15;i++){setcolor(i);/*設(shè)置不同作圖色*/circle(319,239,20+i*15);/*畫半徑不同的圓*/delay(3000);/*延遲3000毫秒*/}
第22頁,共65頁,2023年,2月20日,星期四for(i=0;i<=15;i++){setbkcolor(i);/*設(shè)置不同背景色*/cleardevice();for(j=0;j<=15;j++){setcolor(j);/*設(shè)置不同作圖色*/circle(319,239,20+j*15);/*畫半徑不同的圓*/delay(3000);}}getch();closegraph();}第23頁,共65頁,2023年,2月20日,星期四另外,TURBOC也提供了幾個獲得現(xiàn)行顏色設(shè)置情況的函數(shù)。
intfargetbkcolor(void);返回現(xiàn)行背景顏色值。
intfargetcolor(void);返回現(xiàn)行作圖顏色值。
intfargetmaxcolor(void);返回最高可用的顏色值。基本圖形函數(shù)基本圖形函數(shù)包括畫點,線以及其它一些基本圖形的函數(shù)。第24頁,共65頁,2023年,2月20日,星期四畫點1.畫點函數(shù)voidfarputpixel(intx,inty,intcolor);該函數(shù)表示有指定的象元畫一個按color所確定顏色的點。對于顏色color的值可從上表中獲得而對x,y是指圖形象元的坐標(biāo)。在圖形模式下,是按象元來定義坐標(biāo)的。對VGA適配器,它的最高分辨率為640x480,其中640為整個屏幕從左到右所有象元的個數(shù),480為整個屏幕從上到下所有象元的個數(shù)。屏幕的左上角坐標(biāo)為(0,0),右下角坐標(biāo)為(639,479),水平方向從左到右為x軸正向,垂直方向從上到下為y軸正向。TURBOC的圖形函數(shù)都是相對于圖形屏幕坐標(biāo),即象元來說的。關(guān)于點的另外一個函數(shù)是:intfargetpixel(intx,inty);它獲得當(dāng)前點(x,y)的顏色值。
第25頁,共65頁,2023年,2月20日,星期四畫點
2.有關(guān)坐標(biāo)位置的函數(shù)
intfargetmaxx(void);返回x軸的最大值。
intfargetmaxy(void);返回y軸的最大值。
intfargetx(void);返回游標(biāo)在x軸的位置。
voidfargety(void);返回游標(biāo)有y軸的位置。
voidfarmoveto(intx,inty);移動游標(biāo)到(x,y)點,不是畫點,在移動過程中亦畫點。
voidfarmoverel(intdx,intdy);移動游標(biāo)從現(xiàn)行位置(x,y)移動到(x+dx,y+dy)的位置,移動過程中不畫點。第26頁,共65頁,2023年,2月20日,星期四畫線與線型設(shè)定1.畫線函數(shù)
TURBOC提供了一系列畫線函數(shù),下面分別敘述:
voidfarline(intx0,inty0,intx1,inty1);畫一條從點(x0,y0)到(x1,y1)的直線。
voidfarlineto(intx,inty);畫一作從現(xiàn)行游標(biāo)到點(x,y)的直線。
voidfarlinerel(intdx,intdy);畫一條從現(xiàn)行游標(biāo)(x,y)到按相對增量確定的點(x+dx,y+dy)的直線。第27頁,共65頁,2023年,2月20日,星期四畫線與線型設(shè)定voidfarcircle(intx,inty,intradius);以(x,y)為圓心,radius為半徑,畫一個圓。
voidfararc(intx,inty,intstangle,intendangle,intradius);以(x,y)為圓心,radius為半徑,從stangle開始到endangle結(jié)束(用度表示)畫一段圓弧線。在TURBOC中規(guī)定x軸正向為0度,逆時針方向旋轉(zhuǎn)一周,依次為90,180,270和360度(其它有關(guān)函數(shù)也按此規(guī)定不再重述)。第28頁,共65頁,2023年,2月20日,星期四畫線與線型設(shè)定voidellipse(intx,inty,intstangle,intendangle,intxradius,intyradius);以(x,y)為中心,xradius,yradius為x軸和y軸半徑,從角stangle開始到endangle結(jié)束畫一段橢圓線,當(dāng)stangle=0,endangle=360時,畫出一個完整的橢圓。第29頁,共65頁,2023年,2月20日,星期四畫線與線型設(shè)定voidfarrectangle(intx1,inty1,intx2,inty2);以(x1,y1)為左上角,(x2,y2)為右下角畫一個矩形框。
voidfardrawpoly(intnumpoints,intfar*polypoints);畫一個頂點數(shù)為numpoints,各頂點坐標(biāo)由polypoints給出的多邊形。polypoints整型數(shù)組必須至少有2倍頂點數(shù)個無素。每一個頂點的坐標(biāo)都定義為x,y,并且x在前。值得注意的是當(dāng)畫一個封閉的多邊形時,numpoints的值取實際多邊形的頂點數(shù)加一,并且數(shù)組polypoints中第一個和最后一個點的坐標(biāo)相同。第30頁,共65頁,2023年,2月20日,星期四畫線與線型設(shè)定2.設(shè)定線型函數(shù)在沒有對線的特性進(jìn)行設(shè)定之前,TURBOC用其默認(rèn)值,即一點寬的實線,但TURBOC也提供了可以改變線型的函數(shù)。線型包括:寬度和形狀。其中寬度只有兩種選擇:一點寬和三點寬。而線的形狀則有五種。下面介紹有關(guān)線型的設(shè)置函數(shù)。第31頁,共65頁,2023年,2月20日,星期四畫線與線型設(shè)定voidfarsetlinestyle(intlinestyle,unsignedupattern,intthickness);該函數(shù)用來設(shè)置線的有關(guān)信息,其中l(wèi)inestyle是線形狀的規(guī)定,見下表:有關(guān)線的形狀(linestyle)━━━━━━━━━━━━━━━━━━━━━━━━━符號常數(shù)數(shù)值含義─────────────────────────SOLID_LINE0實線DOTTED_LINE1點線CENTER_LINE2中心線DASHED_LINE3點畫線USERBIT_LINE4用戶定義線━━━━━━━━━━━━━━━━━━━━━━━━━第32頁,共65頁,2023年,2月20日,星期四畫線與線型設(shè)定有關(guān)線寬(thickness)thickness是線的寬度,見下表。━━━━━━━━━━━━━━━━━━━━━符號常數(shù)數(shù)值含義─────────────────────NORM_WIDTH1一點寬THIC_WIDTH3三點寬━━━━━━━━━━━━━━━━━━━━━第33頁,共65頁,2023年,2月20日,星期四畫線與線型設(shè)定對于upattern,只有l(wèi)inestyle選USERBIT_LINE時才有意義(選其它線型,uppattern取0即可)。此進(jìn)uppattern的16位二進(jìn)制數(shù)的每一位代表一個象元,如果那位為1,則該象元打開,否則該象元關(guān)閉。voidfargetlinesettings(structlinesettingstypefar*lineinfo);該函數(shù)將有關(guān)線的信息存放到由lineinfo指向的結(jié)構(gòu)中,表中l(wèi)inesettingstype的結(jié)構(gòu)如下:
structlinesettingstype
{
intlinestyle;
unsignedupattern;
intthickness;
}第34頁,共65頁,2023年,2月20日,星期四畫線與線型設(shè)定例如下面兩句程序可以讀出當(dāng)前線的特性structlinesettingstype*info;getlinesettings(info);voidfarsetwritemode(intmode);該函數(shù)規(guī)定畫線的方式。如果mode=0,則表示畫線時將所畫位置的原來信息覆蓋了(這是TURBOC的默認(rèn)方式)。如果mode=1,則表示畫線時用現(xiàn)在特性的線與所畫之處原有的線進(jìn)行異或(XOR)操作,實際上畫出的線是原有線與現(xiàn)在規(guī)定的線進(jìn)行異或后的結(jié)果。因此,當(dāng)線的特性不變,進(jìn)行兩次畫線操作相當(dāng)于沒有畫線。
第35頁,共65頁,2023年,2月20日,星期四封閉圖形的填充1.先畫輪廓再填充
TURBOC提供了一些先畫出基本圖形輪廓,再按規(guī)定圖模和顏色填充整個封閉圖形的函數(shù)。在沒有改變填充方式時,TURBOC以默認(rèn)方式填充。下面介紹這些函數(shù)。voidfarbar(intx1,inty1,intx2,inty2);確定一個以(x1,y1)為左上角,(x2,y2)為右下角的矩形窗口,再按規(guī)定圖模和顏色填充。說明:此函數(shù)不畫出邊框,所以填充色為邊框。voidfarbar3d(intx1,inty1,intx2,inty2,intdepthinttopflag);當(dāng)topflag為非0時,畫出一個三維的長方體。當(dāng)topflag為0時,三維圖形不封頂,實際上很少這樣使用。說明:bar3d()函數(shù)中,長方體第三維的方向不隨任何參數(shù)而變,即始終為45度的方向。
第36頁,共65頁,2023年,2月20日,星期四封閉圖形的填充voidfarpieslice(intx,inty,intstangle,intendangle,intradius);畫一個以(x,y)為圓心,radius為半徑,stangle為起始角度,endangle為終止角度的扇形,再按規(guī)定方式填充。當(dāng)stangle=0,endangle=360時變成一個實心圓,并在圓內(nèi)從圓點沿X軸正向畫一條半徑。
voidfarsector(intx,inty,intstanle,intendangle,intxradius,intyradius);畫一個以(x,y)為圓心分別以xradius,yradius為x軸和y軸半徑,stangle為起始角,endangle為終止角的橢圓扇形,再按規(guī)定方式填充。第37頁,共65頁,2023年,2月20日,星期四封閉圖形的填充2.設(shè)定填充方式TURBOC有四個與填充方式有關(guān)的函數(shù)。下面分別介紹:
voidfarsetfillstyle(intpattern,intcolor);color的值是當(dāng)前屏幕圖形模式時顏色的有效值。pattern的值及與其等價的符號常數(shù)如下表所示。關(guān)于填充式樣pattern的規(guī)定:第38頁,共65頁,2023年,2月20日,星期四封閉圖形的填充━━━━━━━━━━━━━━━━━━━━━━━━━━━符號常數(shù)數(shù)值含義───────────────────────────EMPTY_FILL0以背景顏色填充SOLID_FILL1以實填充LINE_FILL2以直線填充LTSLASH_FILL3以斜線填充(陰影線)SLASH_FILL4以粗斜線填充(粗陰影線)BKSLASH_FILL5以粗反斜線填充(粗陰影線)LTBKSLASH_FILL6以反斜線填充(陰影線)HATCH_FILL7以直方網(wǎng)格填充XHATCH_FILL8以斜網(wǎng)格填充INTTERLEAVE_FILL9以間隔點填充WIDE_DOT_FILL10以稀疏點填充CLOSE_DOS_FILL11以密集點填充USER_FILL12以用戶定義式樣填充━━━━━━━━━━━━━━━━━━━━━━━━━━━第39頁,共65頁,2023年,2月20日,星期四封閉圖形的填充除USER_FILL(用戶定義填充式樣)以外,其它填充式樣均可由setfillstyle()函數(shù)設(shè)置。當(dāng)選用USER_FILL時,該函數(shù)對填充圖模和顏色不作任何改變。之所以定義USER_FILL主要因為在獲得有關(guān)填充信息時用到此項。voidfarsetfillpattern(char*upattern,intcolor);設(shè)置用戶定義的填充圖模的顏色以供對封閉圖形填充。其中upattern是一個指向8個字節(jié)的指針。這8個字節(jié)定義了8x8點陣的圖形。每個字節(jié)的8位二進(jìn)制數(shù)表示水平8點,8個字節(jié)表示8行,然后以此為模型向個封閉區(qū)域填充。第40頁,共65頁,2023年,2月20日,星期四封閉圖形的填充voidfargetfillpattern(char*upattern);該函數(shù)將用戶定義的填充圖模存入upattern指針指向的內(nèi)存區(qū)域。
voidfargetfillsetings(structfillsettingstypefar*fillinfo);獲得現(xiàn)行圖模的顏色并將存入結(jié)構(gòu)指針變量fillinfo中。其中fillsettingstype結(jié)構(gòu)定義如下:structfillsettingstype{intpattern;/*現(xiàn)行填充模式*/intcolor;/*現(xiàn)行填充模式*/};
第41頁,共65頁,2023年,2月20日,星期四封閉圖形的填充3.任意封閉圖形的填充截止目前為止,我們只能對一些特定形狀的封閉圖形進(jìn)行填充,但還不能對任意封閉圖形進(jìn)行填充。為此,TURBOC提供了一個可對任意封閉圖形填充的函數(shù),其調(diào)用格式如下:voidfarfloodfill(intx,inty,intborder);其中:x,y為封閉圖形內(nèi)的任意一點。border為邊界的顏色,也就是封閉圖形輪廓的顏色。調(diào)用了該函數(shù)后,將用規(guī)定的顏色和圖模填滿整個封閉圖形。第42頁,共65頁,2023年,2月20日,星期四封閉圖形的填充注意:
1.如果x或y取在邊界上,則不進(jìn)行填充。
2.如果不是封閉圖形則填充會從沒有封閉的地方溢出去,填滿其它地方。
3.如果x或y在圖形外面,則填充封閉圖形外的屏幕區(qū)域。
4.由border指定的顏色值必須與圖形輪廓的顏色值相同,但填充色可選任意顏色。下例是有關(guān)floodfill()函數(shù)的用法,該程序填充了bar3d()所畫長方體中其它兩個未填充的面。第43頁,共65頁,2023年,2月20日,星期四有關(guān)圖形窗口和圖形屏幕操作函數(shù)
1、圖形窗口操作象文本方式下可以設(shè)定屏幕窗口一樣,圖形方式下也可以在屏幕上某一區(qū)域設(shè)定窗口,只是設(shè)定的為圖形窗口而已,其后的有關(guān)圖形操作都將以這個窗口的左上角(0,0)作為坐標(biāo)原點,而且可為通過設(shè)置使窗口之外的區(qū)域為不可接觸。這樣,所有的圖形操作就被限定在窗口內(nèi)進(jìn)行。第44頁,共65頁,2023年,2月20日,星期四有關(guān)圖形窗口和圖形屏幕操作函數(shù)
voidfarsetviewport(intxl,intyl,intx2,inty2,intclipflag);設(shè)定一個以(xl,yl)象元點為左上角,(x2,y2)象元為右下角的圖形窗口,其中x1,y1,x2,y2是相對于整個屏幕的坐標(biāo)。若clipflag為非0,則設(shè)定的圖形以外部分不可接觸,若clipflag為0,則圖形窗口以外可以接觸。
voidfarclearviewport(void);清除現(xiàn)行圖形窗口的內(nèi)容。
voidfargetviewsettings(structviewporttypefar*viewport);獲得關(guān)于現(xiàn)行窗口的信息,并將其存于viewporttype定義的結(jié)構(gòu)變量viewport中,其中viewporttype的結(jié)構(gòu)說明如下:第45頁,共65頁,2023年,2月20日,星期四有關(guān)圖形窗口和圖形屏幕操作函數(shù)
structviewporttype{intleft,top,right,bottom;intcliplag;};第46頁,共65頁,2023年,2月20日,星期四有關(guān)圖形窗口和圖形屏幕操作函數(shù)注明:①窗口顏色的設(shè)置與前面講過的屏幕顏色設(shè)置相同,但屏幕背景色和窗口背景色只能是一種顏色,如果窗口背景色改變,整個屏幕的背景色也將改變這與文本窗口不同。②可以在同一個屏幕上設(shè)置多個窗口,但只能有一個現(xiàn)行窗口工作,要對其它窗口操作,通過將定義那個窗口的setviewport()函數(shù)再用一次即可。③前面講過圖形屏幕操作的函數(shù)均適合于對窗口的操作。
第47頁,共65頁,2023年,2月20日,星期四有關(guān)圖形窗口和圖形屏幕操作函數(shù)2、屏幕操作除了清屏函數(shù)以外,關(guān)于屏幕操作還有以下函數(shù):
voidfarsetactivepage(intpagenum);voidfarsetvisualpage(intpagenum);這兩個函數(shù)只用于EGA,VGA以及HERCULES圖形適配器。setctivepage()函數(shù)是為圖形輸出選擇激活頁。所謂激活頁是指后續(xù)圖形的輸出被寫到函數(shù)選定的pagenum頁面,該頁面并不一定可見。setvisualpage()函數(shù)才使pagenum所指定的頁面變成可見頁。頁面從0開始(TurboC默認(rèn)頁)。如果先用setactivepage()函數(shù)在不同頁面上畫出一幅幅圖像,再用setvisualpage()函數(shù)交替顯示,就可以實現(xiàn)一些動畫的效果。第48頁,共65頁,2023年,2月20日,星期四有關(guān)圖形窗口和圖形屏幕操作函數(shù)voidfargetimage(intxl,intyl,intx2,inty2,voidfar*mapbuf);voidfarputimge(intx,int,y,void*mapbuf,intop);unsinedfarimagesize(intxl,intyl,intx2,inty2);這三個函數(shù)用于將屏幕上的圖像復(fù)制到內(nèi)存,然后再將內(nèi)存中的圖像送回到屏幕上。首先通過函數(shù)imagesize()測試要保存左上角為(xl,yl),右上角為(x2,y2)的圖形屏幕區(qū)域內(nèi)的全部內(nèi)容需多少個字節(jié),然后再給mapbuf分配一個所測數(shù)字節(jié)內(nèi)存空間的指針。通過調(diào)用getimage()函數(shù)就可將該區(qū)域內(nèi)的圖像保存在內(nèi)存中,需要時可用putimage()函數(shù)將該圖像輸出到左上角為點(x,y)的位置上,其中g(shù)etimage()函數(shù)中的參數(shù)op規(guī)定如何釋放內(nèi)存中圖像。關(guān)于這個參數(shù)的定義參見下表:第49頁,共65頁,2023年,2月20日,星期四有關(guān)圖形窗口和圖形屏幕操作函數(shù)putimage()函數(shù)中的op值━━━━━━━━━━━━━━━━━━━━━━━━━━符號常數(shù)數(shù)值含義──────────────────────────COPY_PUT0復(fù)制XOR_PUT1與屏幕圖像異或的復(fù)制OR_PUT2與屏幕圖像或后復(fù)制AND_PUT3與屏幕圖像與后復(fù)制NOT_PUT4復(fù)制反像的圖形━━━━━━━━━━━━━━━━━━━━━━━━━━對于imagesize()函數(shù),只能返回字節(jié)數(shù)小于64K字節(jié)的圖像區(qū)域,否則將會出錯,出錯時返回-1。這在圖像動畫處理、菜單設(shè)計技巧中非常有用。第50頁,共65頁,2023年,2月20日,星期四圖形模式下的文本輸出在圖形模式下,只能用標(biāo)準(zhǔn)輸出函數(shù),如printf(),puts(),putchar()函數(shù)輸出文本到屏幕。除此之外,其它輸出函數(shù)(如窗口輸出函數(shù))不能使用,即是可以輸出的標(biāo)準(zhǔn)函數(shù),也只以前景色為白色,按80列,25行的文本方式輸出。
TurboC2.0也提供了一些專門用于在圖形顯示模式下的文本輸出函數(shù)。下面將分別進(jìn)行介紹。第51頁,共65頁,2023年,2月20日,星期四圖形模式下的文本輸出1.文本輸出函數(shù)voidfarouttext(charfar*textstring);該函數(shù)輸出字符串指針textstring所指的文本在現(xiàn)行位置。voidfarouttextxy(intx,inty,charfar*textstring);該函數(shù)輸出字符串指針textstring所指的文本在規(guī)定的(x,y)位置。其中x和y為象元坐標(biāo)。第52頁,共65頁,2023年,2月20日,星期四圖形模式下的文本輸出說明:這兩個函數(shù)都是輸出字符串,但經(jīng)常會遇到輸出數(shù)值或其它類型的數(shù)據(jù),此時就必須使用格式化輸出函數(shù)sprintf()。sprintf()函數(shù)的調(diào)用格式為:intsprintf(char*str,char*format,variable-list);它與printf()函數(shù)不同之處是將按格式化規(guī)定的內(nèi)容寫入str指向的字符串中,返回值等于寫入的字符個數(shù)。例如:
'C110F1sprintf(s,"yourTOEFLscoreis%d",mark);這里s應(yīng)是字符串指針或數(shù)組,mark為整型變量。第53頁,共65頁,2023年,2月20日,星期四圖形模式下的文本輸出2.有關(guān)文本字體、字型和輸出方式的設(shè)置有關(guān)圖形方式下的文本輸出函數(shù),可以通過setcolor()函數(shù)設(shè)置輸出文本的顏色。另外,也可以改變文本字體大小以及選擇是水平方向輸出還是垂直方向輸出。
voidfarsettexjustify(inthoriz,intvert);該函數(shù)用于定位輸出字符串。第54頁,共65頁,2023年,2月20日,星期四圖形模式下的文本輸出對使用outtextxy(intx,inty,charfar*strtextstring)函數(shù)所輸出的字符串,其中哪個點對應(yīng)于定位坐標(biāo)(x,y)在TurboC2.0中是有規(guī)定的。如果把一個字符串看成一個長方形的圖形,在水平方向顯示時,字符串長方形按垂直方向可分為頂部,中部和底部三個位置,水平方向可分為左,中,右三個位置,兩者結(jié)合就有9個位置。第55頁,共65頁,2023年,2月20日,星期四圖形模式下的文本輸出
settextjustify()函數(shù)的第一個參數(shù)horiz指出水平方向三個位置中的一個,第二個參數(shù)vert指出垂直方向三個位置中的一個,二者就確定了其中一個位置。當(dāng)規(guī)定了這個位置后,用outtextxy()函數(shù)輸出字符串時,字符串長方形的這個規(guī)定位置就對準(zhǔn)函數(shù)中的(x,y)位置。而對用outtext()函數(shù)輸出字符串時,這個規(guī)定的位置就位于現(xiàn)行游標(biāo)的位置。有關(guān)參數(shù)horiz和vert的取值參見下表:第56頁,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)代校園體育的課程設(shè)計
- 機(jī)械夾具課程設(shè)計例子
- 電聲樂隊指揮課程設(shè)計
- 治河防洪計算課程設(shè)計
- 植物適應(yīng)性科普課程設(shè)計
- 污泥處理課程設(shè)計總結(jié)
- 電子課程設(shè)計面包板
- 離子共存課程設(shè)計
- 汽車4s店課程設(shè)計
- 益智拼裝繪畫課程設(shè)計
- 喬木、灌木種植專項施工方案
- LSI-陣列卡操作手冊
- 中職園林專業(yè)實訓(xùn)(校編)教案
- 繼承法智慧樹知到答案章節(jié)測試2023年中南財經(jīng)政法大學(xué)
- 基礎(chǔ)心電圖診斷與應(yīng)用智慧樹知到答案章節(jié)測試2023年中山大學(xué)
- GB/T 37136-2018電力用戶供配電設(shè)施運行維護(hù)規(guī)范
- GB/T 22412-2016普通裝飾用鋁塑復(fù)合板
- GB 7681-2008鍘草機(jī)安全技術(shù)要求
- 新員工入職培訓(xùn)手冊PPT
- 醫(yī)藥公司開票業(yè)務(wù)技巧課件
- 門窗安裝施工組織設(shè)計方案
評論
0/150
提交評論