版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 圖形函數(shù)圖形函數(shù) Turbo C提供了非常豐富的圖形函數(shù), 所有圖形函數(shù)的原型均在graphics. h中, 本節(jié)主要介紹圖形模式的初始化、獨(dú)立圖形程序的建立、基本圖形功能、圖形窗口以及圖形模式下的文本輸出等函數(shù)。另外, 使用圖形函數(shù)時(shí)要確保有顯示器圖形驅(qū)動(dòng)程序*BGI, 同時(shí)將集成開(kāi)發(fā)環(huán)境Options/Linker中的Graphics lib選為on, 只有這樣才能保證正確使用圖形函數(shù)。 1. 圖形模式的初始化 不同的顯示器適配器有不同的圖形分辨率。即是同一顯示器適配器, 在不同模式下也有不同分辨率。因此, 在屏幕作圖之前, 必須根據(jù)顯示器適配器種類(lèi)將顯示器設(shè)置成為某種圖形模式, 在未設(shè)
2、置圖形模式之前, 微機(jī)系統(tǒng)默認(rèn)屏幕為文本模式(80列, 25行字符模式), 此時(shí)所有圖形函數(shù)均不能工作。設(shè)置屏幕為圖形模式, 可用下列圖形初始化函數(shù): void far initgraph(int far *gdriver, int far *gmode, char *path); 其中g(shù)driver和gmode分別表示圖形驅(qū)動(dòng)器和模式, path是指圖形驅(qū)動(dòng)程序所在的目錄路徑。有關(guān)圖形驅(qū)動(dòng)器、圖形模式的符號(hào)常數(shù)及對(duì)應(yīng)的分辨率見(jiàn)表2。 圖形驅(qū)動(dòng)程序由Turbo C出版商提供, 文件擴(kuò)展名為.BGI。根據(jù)不同的圖形適配器有不同的圖形驅(qū)動(dòng)程序。例如對(duì)于EGA、 VGA 圖形適配器就調(diào)用驅(qū)動(dòng)程序EG
3、AVGA.BGI。 表2. 圖形驅(qū)動(dòng)器、模式的符號(hào)常數(shù)及數(shù)值 圖形驅(qū)動(dòng)器(gdriver) 圖形模式(gmode) 色調(diào) 分辨率 符號(hào)常數(shù) 數(shù)值 符號(hào)常數(shù) 數(shù)值 CGA 1 CGAC0 0 C0 320*200 CGAC1 1 C1 320*200 CGAC2 2 C2 320*200 CGAC3 3 C3 320*200 CGAHI 4 2色 640*200 MCGA 2 MCGAC0 0 C0 320*200 MCGAC1 1 C1 320*200 MCGAC2 2 C2 320*200 MCGAC3 3 C3 320*200 MCGAMED 4 2色 640*200 MCGAHI 5 2
4、色 640*480 EGA 3 EGALO 0 16色 640*200 EGAHI 1 16色 640*350 EGA64 4 EGA64LO 0 16色 640*200 EGA64HI 1 4色 640*350 EGAMON 5 EGAMONHI 0 2色 640*350 IBM8514 6 IBM8514LO 0 256色 640*480 IBM8514HI 1 256色 1024*768 HERC 7 HERCMONOHI 0 2色 720*348 ATT400 8 ATT400C0 0 C0 320*200 ATT400C1 1 C1 320*200 ATT400C2 2 C2 320
5、*200 ATT400C3 3 C3 320*200 ATT400MED 4 2色 320*200 ATT400HI 5 2色 320*200 VGA 9 VGALO 0 16色 640*200 VGAMED 1 16色 640*350 VGAHI 2 16色 640*480 PC3270 10 PC3270HI 0 2色 720*350 DETECT 0 用于硬件測(cè)試 例4. 使用圖形初始化函數(shù)設(shè)置VGA高分辨率圖形模式 #include <graphics.h> int main() int gdriver, gmode; gdriver=VGA; gmode=VGAHI; i
6、nitgraph(&gdriver, &gmode, "c:tc"); bar3d(100, 100, 300, 250, 50, 1); /*畫(huà)一長(zhǎng)方體*/ getch(); closegraph(); return 0; 有時(shí)編程者并不知道所用的圖形顯示器適配器種類(lèi), 或者需要將編寫(xiě)的程序用于不同圖形驅(qū)動(dòng)器, Turbo C提供了一個(gè)自動(dòng)檢測(cè)顯示器硬件的函數(shù), 其調(diào)用格式為: void far detectgraph(int *gdriver, *gmode); 其中g(shù)driver和gmode的意義與上面相同。 例5. 自動(dòng)進(jìn)行硬件測(cè)試后進(jìn)行圖形初始化
7、#include <graphics.h> int main() int gdriver, gmode; detectgraph(&gdriver, &gmode); /*自動(dòng)測(cè)試硬件*/ printf("the graphics driver is %d, mode is %dn", gdriver, gmode); /*輸出測(cè)試結(jié)果*/ getch(); initgraph(&gdriver, &gmode, "c:tc"); /* 根據(jù)測(cè)試結(jié)果初始化圖形*/ bar3d(10, 10, 130, 250,
8、 20, 1); getch(); closegraph(); return 0; 上例程序中先對(duì)圖形顯示器自動(dòng)檢測(cè), 然后再用圖形初始化函數(shù)進(jìn)行初始化設(shè)置, 但Turbo C提供了一種更簡(jiǎn)單的方法, 即用gdriver= DETECT 語(yǔ)句后再跟initgraph()函數(shù)就行了。采用這種方法后, 上例可改為: 例6. #include <graphics.h> int main() int gdriver=DETECT, gmode; initgraph(&gdriver, &gmode, "c:tc"); bar3d(50, 50, 150,
9、 30, 1); getch(); closegraph(); return 0; 另外, Turbo C提供了退出圖形狀態(tài)的函數(shù)closegraph(), 其調(diào)用格式為: void far closegraph(void); 調(diào)用該函數(shù)后可退出圖形狀態(tài)而進(jìn)入文本方式(Turbo C 默認(rèn)方式), 并釋放用于保存圖形驅(qū)動(dòng)程序和字體的系統(tǒng)內(nèi)存。 2. 獨(dú)立圖形運(yùn)行程序的建立 Turbo C對(duì)于用initgraph()函數(shù)直接進(jìn)行的圖形初始化程序, 在編譯和鏈接時(shí)并沒(méi)有將相應(yīng)的驅(qū)動(dòng)程序(*.BGI)裝入到執(zhí)行程序, 當(dāng)程序進(jìn)行到intitgraph()語(yǔ)句時(shí), 再?gòu)脑摵瘮?shù)中第三個(gè)形式參數(shù)char
10、*path中所規(guī)定的路徑中去找相應(yīng)的驅(qū)動(dòng)程序。若沒(méi)有驅(qū)動(dòng)程序, 則在C:TC中去找, 如C:TC中仍沒(méi)有或TC不存在,將會(huì)出現(xiàn)錯(cuò)誤: BGI Error: Graphics not initialized (use 'initgraph') 因此, 為了使用方便, 應(yīng)該建立一個(gè)不需要驅(qū)動(dòng)程序就能獨(dú)立運(yùn)行的可執(zhí)行圖形程序,Turbo C中規(guī)定用下述步驟(這里以EGA、VGA顯示器為例): 1. 在C:TC子目錄下輸入命令:BGIOBJ EGAVGA 此命令將驅(qū)動(dòng)程序EGAVGA.BGI轉(zhuǎn)換成EGAVGA.OBJ的目標(biāo)文件。 2. 在C:TC子目錄下輸入命令:TLIB LIBGRA
11、PHICS.LIB+EGAVGA 此命令的意思是將EGAVGA.OBJ的目標(biāo)模塊裝到GRAPHICS.LIB庫(kù)文件中。 3. 在程序中initgraph()函數(shù)調(diào)用之前加上一句: registerbgidriver(EGAVGA_driver):該函數(shù)告訴連接程序在連接時(shí)把EGAVGA的驅(qū)動(dòng)程序裝入到用戶的執(zhí)行程序中。 經(jīng)過(guò)上面處理,編譯鏈接后的執(zhí)行程序可在任何目錄或其它兼容機(jī)上運(yùn)行。假設(shè)已作了前兩個(gè)步驟,若再向例6中加 registerbgidriver()函數(shù)則變成: 例7: #include<stdio.h> #include<graphics.h> int ma
12、in() int gdriver=DETECT,gmode; registerbgidriver(EGAVGA_driver): / *建立獨(dú)立圖形運(yùn)行程序 */ initgraph( gdriver, gmode,"c:tc"); bar3d(50,50,250,150,20,1); getch(); closegraph(); return 0; 上例編譯鏈接后產(chǎn)生的執(zhí)行程序可獨(dú)立運(yùn)行。 如不初始化成EGA或CGA分辨率, 而想初始化為CGA分辨率, 則只需要將上述步驟中有EGAVGA的地方用CGA代替即可。 3.屏幕顏色的設(shè)置和清屏函數(shù) 對(duì)于圖形模式的屏幕顏色設(shè)置,
13、同樣分為背景色的設(shè)置和前景色的設(shè)置。在Turbo C中分別用下面兩個(gè)函數(shù)。 設(shè)置背景色: void far setbkcolor( int color); 設(shè)置作圖色: void far setcolor(int color); 其中color 為圖形方式下顏色的規(guī)定數(shù)值, 對(duì)EGA, VGA顯示器適配器, 有關(guān)顏色的符號(hào)常數(shù)及數(shù)值見(jiàn)下表所示。 表3 有關(guān)屏幕顏色的符號(hào)常數(shù)表 符號(hào)常數(shù) 數(shù)值 含義 符號(hào)常數(shù) 數(shù)值 含義 BLACK 0 黑色 DARKGRAY 8 深灰 BLUE 1 蘭色 LIGHTBLUE 9 深蘭 GREEN 2 綠色 LIGHTGREEN 10 淡綠 CYAN 3 青色
14、LIGHTCYAN 11 淡青 RED 4 紅色 LIGHTRED 12 淡紅 MAGENTA 5 洋紅 LIGHTMAGENTA 13 淡洋紅 BROWN 6 棕色 YELLOW 14 黃色 LIGHTGRAY 7 淡灰 WHITE 15 白色 對(duì)于CGA適配器, 背景色可以為表3中16種顏色的一種, 但前景色依賴于不同的調(diào)色板。共有四種調(diào)色板, 每種調(diào)色板上有四種顏色可供選擇。不同調(diào)色板所對(duì)應(yīng)的原色見(jiàn)表4。 表4 CGA調(diào)色板與顏色值表 調(diào)色板 顏色值 符號(hào)常數(shù) 數(shù)值 0 1 2 3 C0 0 背景 綠 紅 黃 C1 1 背景 青 洋紅 白 C2 2 背景 淡綠 淡紅 黃 C3 3 背景
15、淡青 淡洋紅 白 清除圖形屏幕內(nèi)容使用清屏函數(shù), 其調(diào)用格式如下: voide far cleardevice(void); 有關(guān)顏色設(shè)置、清屏函數(shù)的使用請(qǐng)看例8。 例8: #include<stdio.h> #include<graphics.h> int main() int gdriver, gmode, i; gdriver=DETECT; registerbgidriver(EGAVGA_DRIVER);/*建立獨(dú)立圖形運(yùn)行程序*/ initgraph(&gdriver, &gmode", "");/*圖形初始化*
16、/ setbkcolor(0); /*設(shè)置圖形背景*/ cleardevice(); for(i=0; i<=15; i+) setcolor(i); /*設(shè)置不同作圖色*/ circle(320, 240, 20+i*10); /*畫(huà)半徑不同的圓*/ delay(100); /*延遲100毫秒*/ for(i=0; i<=15; i+) setbkcolor(i); /*設(shè)置不同背景色*/ cleardevice(); circle(320, 240, 20+i*10); delay(100); closegraph(); return 0; 另外, TURBO C也提供了幾個(gè)獲
17、得現(xiàn)行顏色設(shè)置情況的函數(shù)。 int far getbkcolor(void); 返回現(xiàn)行背景顏色值。 int far getcolor(void); 返回現(xiàn)行作圖顏色值。 int far getmaxcolor(void); 返回最高可用的顏色值。 4. 基本圖形函數(shù) 基本圖形函數(shù)包括畫(huà)點(diǎn), 線以及其它一些基本圖形的函數(shù)。本節(jié)對(duì)這些函數(shù)作一全面的介紹。 一、畫(huà)點(diǎn) 1. 畫(huà)點(diǎn)函數(shù) void far putpixel(int x, int y, int color); 該函數(shù)表示有指定的象元畫(huà)一個(gè)按color所確定顏色的點(diǎn)。對(duì)于顏色color的值可從表3中獲得而對(duì)x, y是指圖形象元的坐標(biāo)。 在圖
18、形模式下, 是按象元來(lái)定義坐標(biāo)的。對(duì)VGA適配器, 它的最高分辨率為640x480, 其中640為整個(gè)屏幕從左到右所有象元的個(gè)數(shù), 480 為整個(gè)屏幕從上到下所有象元的個(gè)數(shù)。屏幕的左上角坐標(biāo)為(0, 0), 右下角坐標(biāo)為(639, 479), 水平方向從左到右為x軸正向, 垂直方向從上到下為y軸正向。TURBO C 的圖形函數(shù)都是相對(duì)于圖形屏幕坐標(biāo), 即象元來(lái)說(shuō)的。 關(guān)于點(diǎn)的另外一個(gè)函數(shù)是: int far getpixel(int x, int y); 它獲得當(dāng)前點(diǎn)(x, y)的顏色值。 2. 有關(guān)坐標(biāo)位置的函數(shù) int far getmaxx(void); 返回x軸的最大值。 int fa
19、r getmaxy(void); 返回y軸的最大值。 int far getx(void); 返回游標(biāo)在x軸的位置。 void far gety(void); 返回游標(biāo)有y軸的位置。 void far moveto(int x, int y); 移動(dòng)游標(biāo)到(x, y)點(diǎn), 不是畫(huà)點(diǎn), 在移動(dòng)過(guò)程中亦畫(huà)點(diǎn)。 void far moverel(int dx, int dy); 移動(dòng)游標(biāo)從現(xiàn)行位置(x, y)移動(dòng)到(x+dx, y+dy)的位置, 移動(dòng)過(guò)程中不畫(huà)點(diǎn)。 二、畫(huà)線 1. 畫(huà)線函數(shù) TURBO C提供了一系列畫(huà)線函數(shù), 下面分別敘述: void far line(int x0, int y
20、0, int x1, int y1); 畫(huà)一條從點(diǎn)(x0, y0)到(x1, y1)的直線。 void far lineto(int x, int y); 畫(huà)一作從現(xiàn)行游標(biāo)到點(diǎn)(x, y)的直線。 void far linerel(int dx, int dy); 畫(huà)一條從現(xiàn)行游標(biāo)(x, y)到按相對(duì)增量確定的點(diǎn)(x+dx, y+dy)的直線。 void far circle(int x, int y, int radius); 以(x, y)為圓心, radius為半徑, 畫(huà)一個(gè)圓。 void far arc(int x, int y, int stangle, int endangle,
21、int radius); 以(x, y)為圓心, radius為半徑, 從stangle開(kāi)始到endangle結(jié)束(用度表示)畫(huà)一段圓弧線。在TURBO C中規(guī)定x軸正向?yàn)?度, 逆時(shí)針?lè)较蛐D(zhuǎn)一周, 依次為90, 180, 270和360度(其它有關(guān)函數(shù)也按此規(guī)定, 不再重述)。 void ellipse(int x, int y, int stangle, int endangle, int xradius,int yradius); 以(x, y)為中心, xradius, yradius為x軸和y軸半徑, 從角stangle 開(kāi)始到endangle結(jié)束畫(huà)一段橢圓線, 當(dāng)stangle=
22、0, endangle=360時(shí), 畫(huà)出一個(gè)完整的橢圓。 void far rectangle(int x1, int y1, int x2, inty2); 以(x1, y1)為左上角, (x2, y2)為右下角畫(huà)一個(gè)矩形框。 void far drawpoly(int numpoints, int far *polypoints); 畫(huà)一個(gè)頂點(diǎn)數(shù)為numpoints, 各頂點(diǎn)坐標(biāo)由polypoints 給出的多邊形。polypoints整型數(shù)組必須至少有2倍頂點(diǎn)數(shù)個(gè)無(wú)素。每一個(gè)頂點(diǎn)的坐標(biāo)都定義為x,y, 并且x在前。值得注意的是當(dāng)畫(huà)一個(gè)封閉的多邊形時(shí), numpoints 的值取實(shí)際多邊形
23、的頂點(diǎn)數(shù)加一, 并且數(shù)組polypoints中第一個(gè)和最后一個(gè)點(diǎn)的坐標(biāo)相同。 下面舉一個(gè)用drawpoly()函數(shù)畫(huà)箭頭的例子。 例9: #include<stdlib.h> #include<graphics.h> int main() int gdriver, gmode, i; int arw16=200, 102, 300, 102, 300, 107, 330, 100, 300, 93, 300, 98, 200, 98, 200, 102; gdriver=DETECT; registerbgidriver(EGAVGA_driver); initgrap
24、h(&gdriver, &gmode, ""); setbkcolor(BLUE); cleardevice(); setcolor(12); /*設(shè)置作圖顏色*/ drawpoly(8, arw); /*畫(huà)一箭頭*/ getch(); closegraph(); return 0; 2. 設(shè)定線型函數(shù) 在沒(méi)有對(duì)線的特性進(jìn)行設(shè)定之前, TURBO C用其默認(rèn)值, 即一點(diǎn)寬的實(shí)線,但TURBO C也提供了可以改變線型的函數(shù)。線型包括:寬度和形狀。其中寬度只有兩種選擇: 一點(diǎn)寬和三點(diǎn)寬。而線的形狀則有五種。下面介紹有關(guān)線型的設(shè)置函數(shù)。 void far setl
25、inestyle(int linestyle, unsigned upattern, intthickness); 該函數(shù)用來(lái)設(shè)置線的有關(guān)信息, 其中l(wèi)inestyle是線形狀的規(guī)定, 見(jiàn)表5。 表5. 有關(guān)線的形狀(linestyle) 符號(hào)常數(shù) 數(shù)值 含義 SOLID_LINE 0 實(shí)線 DOTTED_LINE 1 點(diǎn)線 CENTER_LINE 2 中心線 DASHED_LINE 3 點(diǎn)畫(huà)線 USERBIT_LINE 4 用戶定義線 thickness是線的寬度, 見(jiàn)表6。 表6. 有關(guān)線寬(thickness) 符號(hào)常數(shù) 數(shù)值 含義 NORM_WIDTH 1 一點(diǎn)寬 THIC_WIDTH
26、 3 三點(diǎn)寬 對(duì)于upattern, 只有l(wèi)inestyle選USERBIT_LINE 時(shí)才有意義( 選其它線型,uppattern取0即可)。此進(jìn)uppattern的16位二進(jìn)制數(shù)的每一位代表一個(gè)象元, 如果那位為1, 則該象元打開(kāi), 否則該象元關(guān)閉。 void far getlinesettings(struct linesettingstype far *lineinfo); 該函數(shù)將有關(guān)線的信息存放到由lineinfo 指向的結(jié)構(gòu)中, 表中l(wèi)inesettingstype的結(jié)構(gòu)如下: struct linesettingstype int linestyle; unsigned upa
27、ttern; int thickness; 例如下面兩句程序可以讀出當(dāng)前線的特性 struct linesettingstype *info; getlinesettings(info); void far setwritemode(int mode); 該函數(shù)規(guī)定畫(huà)線的方式。如果mode=0, 則表示畫(huà)線時(shí)將所畫(huà)位置的原來(lái)信息覆蓋了(這是TURBO C的默認(rèn)方式)。如果mode=1, 則表示畫(huà)線時(shí)用現(xiàn)在特性的線與所畫(huà)之處原有的線進(jìn)行異或(XOR)操作, 實(shí)際上畫(huà)出的線是原有線與現(xiàn)在規(guī)定的線進(jìn)行異或后的結(jié)果。因此, 當(dāng)線的特性不變, 進(jìn)行兩次畫(huà)線操作相當(dāng)于沒(méi)有畫(huà)線。 有關(guān)線型設(shè)定和畫(huà)線函數(shù)的例
28、子如下所示。 例10. #include<stdlib.h> #include<graphics.h> int main() int gdriver, gmode, i; gdriver=DETECT; registerbgidriver(EGAVGA_driver); initgraph(&gdriver, &gmode, ""); setbkcolor(BLUE); cleardevice(); setcolor(GREEN); circle(320, 240, 98); setlinestyle(0, 0, 3); /*設(shè)置三點(diǎn)
29、寬實(shí)線*/ setcolor(2); rectangle(220, 140, 420, 340); setcolor(WHITE); setlinestyle(4, 0xaaaa, 1); /*設(shè)置一點(diǎn)寬用戶定義線*/ line(220, 240, 420, 240); line(320, 140, 320, 340); getch(); closegraph(); return 0; 5. 封閉圖形的填充 填充就是用規(guī)定的顏色和圖模填滿一個(gè)封閉圖形。 一、先畫(huà)輪廓再填充 TURBO C提供了一些先畫(huà)出基本圖形輪廓, 再按規(guī)定圖模和顏色填充整個(gè)封閉圖形的函數(shù)。在沒(méi)有改變填充方式時(shí), TURBO
30、 C以默認(rèn)方式填充。 下面介紹這些函數(shù)。 void far bar(int x1, int y1, int x2, int y2); 確定一個(gè)以(x1, y1)為左上角, (x2, y2)為右下角的矩形窗口, 再按規(guī)定圖模和顏色填充。 說(shuō)明: 此函數(shù)不畫(huà)出邊框, 所以填充色為邊框。 void far bar3d(int x1, int y1, int x2, int y2, int depth, inttopflag); 當(dāng)topflag為非0時(shí), 畫(huà)出一個(gè)三維的長(zhǎng)方體。當(dāng)topflag為0時(shí), 三維圖形不封頂, 實(shí)際上很少這樣使用。 說(shuō)明: bar3d()函數(shù)中, 長(zhǎng)方體第三維的方向不隨任何
31、參數(shù)而變, 即始終為45度的方向。 void far pieslice(int x, int y, int stangle, int endangle, intradius); 畫(huà)一個(gè)以(x, y)為圓心, radius為半徑, stangle為起始角度, endangle 為終止角度的扇形, 再按規(guī)定方式填充。當(dāng)stangle=0, endangle=360 時(shí)變成一個(gè)實(shí)心圓, 并在圓內(nèi)從圓點(diǎn)沿X軸正向畫(huà)一條半徑。 void far sector(int x, int y, int stanle, intendangle, intxradius, int yradius); 畫(huà)一個(gè)以(x,
32、y)為圓心分別以xradius, yradius為x軸和y軸半徑, stangle為起始角, endangle為終止角的橢圓扇形, 再按規(guī)定方式填充。 二、設(shè)定填充方式 TURBO C有四個(gè)與填充方式有關(guān)的函數(shù)。下面分別介紹: void far setfillstyle(int pattern, int color); color的值是當(dāng)前屏幕圖形模式時(shí)顏色的有效值。pattern的值及與其等價(jià)的符號(hào)常數(shù)如表7所示。 表7. 關(guān)于填充式樣pattern的規(guī)定 符號(hào)常數(shù) 數(shù)值 含義 EMPTY_FILL 0 以背景顏色填充 SOLID_FILL 1 以實(shí)填充 LINE_FILL 2 以直線填充
33、LTSLASH_FILL 3 以斜線填充(陰影線) SLASH_FILL 4 以粗斜線填充(粗陰影線) BKSLASH_FILL 5 以粗反斜線填充(粗陰影線) LTBKSLASH_FILL 6 以反斜線填充(陰影線) HATCH_FILL 7 以直方網(wǎng)格填充 XHATCH_FILL 8 以斜網(wǎng)格填充 INTTERLEAVE_FILL 9 以間隔點(diǎn)填充 WIDE_DOT_FILL 10 以稀疏點(diǎn)填充 CLOSE_DOS_FILL 11 以密集點(diǎn)填充 USER_FILL 12 以用戶定義式樣填充 除USER_FILL(用戶定義填充式樣)以外, 其它填充式樣均可由setfillstyle()函數(shù)設(shè)
34、置。當(dāng)選用USER_FILL時(shí), 該函數(shù)對(duì)填充圖模和顏色不作任何改變。 之所以定義USER_FILL主要因?yàn)樵讷@得有關(guān)填充信息時(shí)用到此項(xiàng)。 void far setfillpattern(char * upattern,int color); 設(shè)置用戶定義的填充圖模的顏色以供對(duì)封閉圖形填充。 其中upattern是一個(gè)指向8個(gè)字節(jié)的指針。這8個(gè)字節(jié)定義了8x8點(diǎn)陣的圖形。每個(gè)字節(jié)的8位二進(jìn)制數(shù)表示水平8點(diǎn), 8個(gè)字節(jié)表示8行, 然后以此為模型向個(gè)封閉區(qū)域填充。 void far getfillpattern(char * upattern); 該函數(shù)將用戶定義的填充圖模存入upattern指針
35、指向的內(nèi)存區(qū)域。 void far getfillsetings(struct fillsettingstype far * fillinfo); 獲得現(xiàn)行圖模的顏色并將存入結(jié)構(gòu)指針變量fillinfo中。其中fillsettingstype結(jié)構(gòu)定義如下: struct fillsettingstype int pattern; /* 現(xiàn)行填充模式 * / int color; /* 現(xiàn)行填充模式 * / ; 有關(guān)圖形填充圖模的顏色的選擇, 請(qǐng)看下面例程。 例11: #include<graphics.h> main() char str8=10,20,30,40,50,60,70
36、,80; /*用戶定義圖模*/ int gdriver,gmode,i; struct fillsettingstype save; /*定義一個(gè)用來(lái)存儲(chǔ)填充信息的結(jié)構(gòu)變量*/ gdriver=DETECT; initgraph(&gdriver,&gmode,"c:tc"); setbkcolor(BLUE); cleardevice(); for(i=0;i<13;i+) setcolor(i+3); setfillstyle(i,2+i); /* 設(shè)置填充類(lèi)型 * bar(100,150,200,50); /*畫(huà)矩形并填充*/ bar3d(300
37、,100,500,200,70,1); /* 畫(huà)長(zhǎng)方體并填充*/ pieslice(200, 300, 90, 180, 90);/*畫(huà)扇形并填充*/ sector(500,300,180,270,200,100);/*畫(huà)橢圓扇形并填充*/ delay(1000); /*延時(shí)1秒*/ cleardevice(); setcolor(14); setfillpattern(str, RED); bar(100,150,200,50); bar3d(300,100,500,200,70,0); pieslice(200,300,0,360,90); sector(500,300,0,360,100
38、,50); getch(); getfillsettings(&save); /*獲得用戶定義的填充模式信息*/ closegraph(); clrscr(); printf("The pattern is %d, The color of filling is %d", save.pattern, save.color); /*輸出目前填充圖模和顏色值*/ getch(); 以上程序運(yùn)行結(jié)束后, 在屏幕上顯示出現(xiàn)行填充圖模和顏色的常數(shù)值。 三、任意封閉圖形的填充 截止目前為止, 我們只能對(duì)一些特定形狀的封閉圖形進(jìn)行填充, 但還不能對(duì)任意封閉圖形進(jìn)行填充。為此, T
39、URBO C 提供了一個(gè)可對(duì)任意封閉圖形填充的函數(shù), 其調(diào)用格式如下: void far floodfill(int x, int y, int border); 其中: x, y為封閉圖形內(nèi)的任意一點(diǎn)。border為邊界的顏色, 也就是封閉圖形輪廓的顏色。調(diào)用了該函數(shù)后, 將用規(guī)定的顏色和圖模填滿整個(gè)封閉圖形。 注意: 1. 如果x或y取在邊界上, 則不進(jìn)行填充。 2. 如果不是封閉圖形則填充會(huì)從沒(méi)有封閉的地方溢出去, 填滿其它地方。 3. 如果x或y在圖形外面, 則填充封閉圖形外的屏幕區(qū)域。 4. 由border指定的顏色值必須與圖形輪廓的顏色值相同, 但填充色可選任意顏色。下例是有關(guān)fl
40、oodfill()函數(shù)的用法, 該程序填充了bar3d()所畫(huà)長(zhǎng)方體中其它兩個(gè)未填充的面。 例12: #include<stdlib.h> #include<graphics.h> main() int gdriver, gmode; strct fillsettingstype save; gdriver=DETECT; initgraph(&gdriver, &gmode, ""); setbkcolor(BLUE); cleardevice(); setcolor(LIGHTRED); setlinestyle(0,0,3); setfillstyle(1,14); /*設(shè)置填充方式*/ bar3d(100,200,400,350,200,1); /*畫(huà)長(zhǎng)方體并填充*/ flood
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- DB12T 578-2015 液化氣體汽車(chē)罐車(chē)用緊急切斷閥檢驗(yàn)方法與評(píng)定要求
- 新學(xué)期學(xué)習(xí)計(jì)劃范文匯編6篇
- 智能運(yùn)輸系統(tǒng) 體系結(jié)構(gòu) 服務(wù) 編制說(shuō)明
- 全國(guó)連鎖洗衣店分布簡(jiǎn)報(bào) 2024 -洗衣行業(yè)如何搶占商機(jī) 來(lái)看這份連鎖洗衣店選址布局
- 春節(jié)期間通信保障方案
- 雪房子課件教學(xué)課件
- 部編版歷史九年級(jí)上冊(cè)第六單元 第17課《君主立憲制的英國(guó)》說(shuō)課稿
- 高壓電工作業(yè)題庫(kù)
- 寶安區(qū)重點(diǎn)中學(xué)七年級(jí)上學(xué)期語(yǔ)文期中考試試卷
- 購(gòu)銷(xiāo)合同協(xié)議書(shū)范本(2篇)
- 犟龜-完整版獲獎(jiǎng)?wù)n件
- 工業(yè)產(chǎn)品CAD技能三級(jí)試題及其評(píng)分標(biāo)準(zhǔn)
- 多元統(tǒng)計(jì)分析習(xí)題及解答
- 漢語(yǔ)詞性專(zhuān)題練習(xí)(附答案)
- 勞動(dòng)合同-高管補(bǔ)充協(xié)議20110520
- 浙江省溫州市地圖矢量PPT模板(圖文)
- 上海市建設(shè)工程項(xiàng)目管理機(jī)構(gòu)管理人員情況表
- 北師大版二年級(jí)數(shù)學(xué)上冊(cè)第九單元《除法》知識(shí)點(diǎn)梳理復(fù)習(xí)ppt
- 空氣能室外機(jī)保養(yǎng)維護(hù)記錄表
- DB37∕T 5162-2020 裝配式混凝土結(jié)構(gòu)鋼筋套筒灌漿連接應(yīng)用技術(shù)規(guī)程
- 9-2 《第三方過(guò)程評(píng)估淋蓄水檢查內(nèi)容》(指引)
評(píng)論
0/150
提交評(píng)論