两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

  • 歡迎訪問C語言網(wǎng)www.sztianhecheng.cn 比賽欄每月有獎月賽!舉辦比賽聯(lián)系QQ:2045302297
  • 問題反饋、粉絲交流 QQ群327452739 藍橋杯訓(xùn)練群:113766799 申請群時請備注排名里的昵稱
  • C語言研究中心 為您提供有圖、有料、解渴的C語言專題! 歡迎討論!

C語言之圖形顯示及計算機繪圖技術(shù)

技術(shù)專題 CTO 13190次瀏覽 0個評論

說明:本節(jié)教程的繪圖技術(shù)為Turboc編譯器,非VC6,請注意,Turboc編譯器下載地址見:?TC2.0

 

5.1 C語言圖形函數(shù)及其用法

TurboC 2.0具有70多個圖形庫函數(shù),其圖形功能極為豐富,而且用TurboC 2.0編寫和通過的程序,可以不作修改或只做很少的修改,便可以在TurboC ++或Borland C++的環(huán)境下編譯運行,所以TurboC 是一種很好的圖形設(shè)計語言。在這一節(jié)只介紹其中最常用的一部分,其余的圖形函數(shù)及用法簡介可參閱其它參考書。所有這些圖形函數(shù)均在頭文件“graphics.h”中定義,所以,凡是在程序中要調(diào)用這些圖形函數(shù),都必須在程序文件的開頭寫上文件包含命令:

#include<graphics.h>

5.2圖形系統(tǒng)管理

在一般缺省情況下,屏幕為80列、25行的文本方式。在文本方式下,所有的圖形函數(shù)均不能操作,因此在使用圖形函數(shù)繪圖之前,必須將屏幕顯示適配器設(shè)置為一種圖形模式,這就是通常所說的“圖形方式初始化”。在繪圖工作完畢之后,又要使屏幕回到文本方式,以便進行程序文件等的編輯工作。TurboC 2.0提供了14個函數(shù),來進行對圖形系統(tǒng)的控制和管理工作。

5.2.1圖形方式初始化

圖形方式初始化是通過函數(shù)initgraph來完成的。其調(diào)用格式為:

initgraph(*gdriver,*gmode,*path);

函數(shù)initgraph的功能是通過從磁盤上裝入一個圖形驅(qū)動程序來初始化圖形系統(tǒng),并將

系統(tǒng)設(shè)置為圖形方式。調(diào)用該函數(shù)須用三個參數(shù),其含義為:

①gdriver:是一個整型值,用來指定要裝入的圖形驅(qū)動程序,該值在頭文件graphics.h

中定義,見表5.1。

 

表5.1圖形驅(qū)動程序

??? 符號常量 ??? 數(shù)值
??? DETECT

CGA

MCGA

EGA

EGA64

EGAMONO

IBM8514

HERCMONO

ATT 400

VGA

PC 3270

??? 0

1

2

3

4

5

6

7

8

9

10

?

除DETECT外,表中每一個量均對應(yīng)于一種圖形驅(qū)動程序。如果使用DETECT,則由系統(tǒng)自動檢測圖形適配器的最高分辨率模式,并裝入相應(yīng)的圖形驅(qū)動程序。

②gmode:是一個整型值,用來設(shè)置圖形顯示模式。不同的圖形驅(qū)動程序有不同的圖形顯示模式,即使是在同一個圖形驅(qū)動程序下,也可能會有幾種圖形顯示模式。圖形顯示模式?jīng)Q定了顯示的分辨率、可同時顯示的顏色的多少、調(diào)色板的設(shè)置方式以及存儲圖形的頁數(shù)。幾種不同的圖形顯示模式見表5.2。

 

表5.2圖形顯示模式

圖形驅(qū)動程序(gdriver) 圖形顯示模式(gmode) ? 分辨率 ? 顏色數(shù)
???? CGA

 

 

 

?

??? CGAC0

CGACl

CGAC2

CGAC3

CGAHI

0

1

2

3

4

? 320×200

320×200

320×200

320×200

640×200

??? 4

4

4

4

2

1

1

1

1

1

???? MCGA

 

 

 

 

?

??? MCGAC0

MCGACl

MCGAC2

MCGAC3

MCGAMED

MCGAHI

0

1

2

3

4

5

? 320×200

320×200

320×200

320×200

640×200

640×480

??? 4

4

4

4

2

2

1

1

1

1

1

1

???? EGA

?

??? EGALO

EGAHI

0

1

? 640×200

640×350

??? 16

16

1

2

???? EGA64

?

??? EGA64LO

EGA64HI

0

1

? 640×200

640×350

??? 16

16

1

1

???? EGAMONO ??? EGAMONOHI 0 ? 640×350 ??? 2 1(2)
???? HERCMONO ??? HERCMONOHI 0 ? 720×348 ??? 2 2
???? ATT400

 

 

 

 

?

??? ATT400C0

ATT400C1

ATT400C2

ATT400C3

ATT400MED

ATT400HI

0

1

2

3

4

5

? 320×200

320×200

320×200

320×200

640×200

640×400

??? 4

4

4

4

2

2

1

1

1

1

1

1

???? VGA

 

?

??? VGALO

VGAMED

VGAHI

0

1

2

? 640×200

640×350

640×480

??? 16

16

16

2

2

1

???? PC3270 ??? PC3270HI 0 ? 720×350 ??? 2 1
???? IBM8514

?

??? IBM8514LO

IBM8514HI

0

1

? 640×480

1024×768

??? 256

256

 

?

 

③path:是一個字符串,用來指明圖形驅(qū)動程序所在的路徑。如果驅(qū)動程序就在用戶當前目錄下,則該參數(shù)可以為空字符串,否則應(yīng)給出具體的路徑名。一般情況下,TurboC安裝在C盤的TC目錄中,則該路徑為:C:\TC,如果寫在參數(shù)中則為:”C:\\tc”。

 

以上介紹了initgraph函數(shù)中的三個參數(shù)的含義。注意,前兩個參數(shù)實際上是整型指針,調(diào)用時應(yīng)加上地址運算符“&”。下面舉例說明:

假設(shè)我們在例子中使用VGA圖形驅(qū)動程序,圖形顯示模式為VGAHI,即VGA高分辯率圖形模式,分辨率為640×480。則initgraph函數(shù)的調(diào)用方式如下:

int gdriver,gmode;

gdriver=VGA;

gmode=VGAHI;

initgraph(&gdriver,&gmode,“C:\\tc”);

也可以用整型常數(shù)代替符號常數(shù),如:

int gdriver=9,gmode=2;

initgraph(&gdriver,&gmode,”C:\\tc”);

這兩種方式是等效的。

另外,還可以使用DETECT模式,由系統(tǒng)自動對硬件進行檢測,并把圖形顯示模式設(shè)

置為檢測到的驅(qū)動程序的最高分辨率。如:

int gdriver=DETECT,gmode;

initgraph(&gdriver,&gmode,“C:\\tc”);

5.2.2關(guān)閉圖形方式

在運行圖形程序繪圖結(jié)束后,又要回到文本方式,以進行其他工作,這時應(yīng)關(guān)閉圖形方式。關(guān)閉圖形方式要用函數(shù)closegraph。其調(diào)用格式為:

closegraph();

函數(shù)closegraph的作用是:釋放所有圖形系統(tǒng)分配的存儲區(qū),恢復(fù)到調(diào)用initgraph之前的狀態(tài)。函數(shù)closegraph不需參數(shù)。

5.3屏幕管理

TurboC 2.0提供了11個函數(shù),用于對屏幕和視圖區(qū)等進行控制管理。

5.3.1設(shè)置視圖區(qū)

在圖形模式下,可以用函數(shù)setviewport在屏幕上定義一個視圖區(qū)。視圖區(qū)相當于一個

用于繪圖的窗口。視圖區(qū)的位置用屏幕絕對坐標定義,并且可以把視圖區(qū)設(shè)置為裁剪和不裁剪兩種狀態(tài)。

函數(shù)setviewport的調(diào)用格式為:

setviewport(x1,y1,x2,y2,c);

函數(shù)調(diào)用中的五個參數(shù)均為整型,其中:

x1,y1:為視圖區(qū)的左上角坐標。

x2,y2:為視圖區(qū)的右下角坐標。

c:為裁剪狀態(tài)參數(shù)。當c=1時,則超出視圖區(qū)的圖形部分被自動裁剪掉;當c=0時,則對超出視圖區(qū)的圖形不作裁剪處理。

應(yīng)注意:視圖區(qū)建立以后,所有的圖形輸出坐標都是相對于當前視圖區(qū)的,即視圖區(qū)左上角點為坐標(0,0)點,而與圖形在屏幕上的位置無關(guān)。

5.3.2清除視圖區(qū)

清除視圖區(qū)用函數(shù)clearviewport。它的作用是清除掉當前的視圖區(qū),將當前點(cp:current point)位置設(shè)置于屏幕左上角(0,0)點。所以執(zhí)行后,原先設(shè)置的視圖區(qū)將不復(fù)存在。函數(shù)的調(diào)用格式為:

clearviewport();

5.3.3清屏

清除屏幕使用函數(shù)cleardevice。它的作用是立即清除全屏幕。并將當前點位置設(shè)置為原點(0,0)。但是其他的圖形系統(tǒng)設(shè)置將保持不變,如線型、充填模式、文本格式和模式等;如果設(shè)置了視圖區(qū),則視圖區(qū)的設(shè)置不變,包括當前點位置設(shè)置在視圖區(qū)的左上角。

清屏函數(shù)的調(diào)用格式為:

cleardevice();

5.4繪圖函數(shù)

繪圖函數(shù)是編寫繪圖程序的基礎(chǔ),也是任何一種圖形軟件的核心內(nèi)容。從理論上來說,

用象素點幾乎可以畫出任何圖形,但畢竟是效率太低。為此,Turbo C的BGI(Borland

Graphics Interface)提供了大量的基本繪圖函數(shù),以方便圖形設(shè)計。

在用繪圖函數(shù)作圖時,要隨時注意畫圖的“當前點位置”,它是繪圖的起始位置。也就是說,圖形總是從當前點開始畫。畫完一個圖形后,有時當前點的位置不變,仍在原來的位置;而有時則要把當前點移到新的位置。此外,為了從指定位置開始作圖,有時需要先移動當前點位置,然后再作圖。這些,在調(diào)用繪圖函數(shù)的時候要注意。

5.4.1直線類函數(shù)

用直線類函數(shù)繪制直線圖形,可以用兩種坐標:一種是絕對坐標;另一種是相對坐標。

①line函數(shù)

用line函數(shù)可以在指定的兩點之間畫一條直線段。其調(diào)用格式為:

1ine(x1,y1,x2,y2);

參數(shù)x1,y1,x2,y2均為整型,使用絕對坐標。其中(x1,y1)和(x2,y2)分別為直線的兩個端點坐標。

用line函數(shù)畫線時,其當前點的位置不變。

例如,下面的調(diào)用可在屏幕上(VGA)畫出一條對角線,

line(0,0,639,479);

如果已知三角形的三個頂點坐標分別為:(x1,y1)、(x2,y2)和(x3,y3),則用下面的語句可以把該三點連成一個三角形:

line(x1,y1,x2,y2);

line(x2,y2,x3,y3);

line(x3,y3,x1,y1);

 

② lineto函數(shù)

lineto函數(shù)用于從當前點位置到指定位置之間畫一條直線,并改變當前點的位置。所以

執(zhí)行的結(jié)果是,在畫線到指定點的同時也把當前點的位置移到了指定點(即直線的終點)。其調(diào)用格式為:

lineto(x,y);

參數(shù)x,y為指定點坐標,均為整型。

 

③ moveto函數(shù)

函數(shù)moveto用于移動當前點位置,并不畫線。其調(diào)用格式為:

moveto(x,y);

參數(shù)x,y用于指定新的當前點位置坐標,用整型,使用絕對坐標。調(diào)用的結(jié)果是將當前點位置移到點(x,y)處。例如:

moveto(40,100);

結(jié)果是將當前點位置移到了(40,100)處。

moveto函數(shù)和lineto函數(shù)配合使用,可以在兩點之間畫直線。例如:

moveto(40,100);

lineto(200,300);

上面的語句是先把當前點移到(40,100)處,然后從該點畫線到(200,300)處。畫線結(jié)束后,當前點位置在(200,300)處。

用moveto函數(shù)和lineto函數(shù)結(jié)合,改寫畫上面提到的三角形的語句是這樣的:

moveto(x1,y1);

lineto(x2,y2);

lineto(x3,y3);

lineto(xl,y1);

畫圖結(jié)束,當前點又回到點(x1,y1)處。

 

④linerel函數(shù)

linerel函數(shù)用相對坐標畫線。其功能是從當前點位置開始畫線到指定點位置,該指定點位置的坐標不是以絕對坐標的形式給出,而是以其相對于當前點(即直線起點)位置的坐標增量給出的。其調(diào)用格式為:

linerel(dx,dy);

參數(shù)dx,dy用整型,是相對于直線起點的坐標增量。linerel函數(shù)改變當前點位置到指定點處。

假設(shè)當前點位置坐標是(x,y),則

linerel(dx,dy);? 等效于

lineto(x十dx,y十dy);

 

⑤moverel函數(shù)

moverel函數(shù)的功能與moveto函數(shù)相似,但它使用的是相對坐標,它使當前點位置在x和y方向上分別移動一個增量。其調(diào)用格式為:

moverel(dx,dy);

參數(shù)dx,dy為整型,是相對于當前點位置的增量。

 

下面舉幾個實際的繪圖例子,來說明上面這些函數(shù)在使用上的差別:

設(shè)要過四點(160,120),(480,120),(480,360)和(160,360)畫一個矩形,用不同的函數(shù)其繪圖程序可以是:

[例程序5.1](用1ine函數(shù)畫)

#include<graphics.h>

main()

{

int gdriver=DETECT,gmode;

initgraph(&gdriver,&gmode,“c:\\tc”);

cleardevice();

line(160,120,480,120);

line(480,120,480,360);

line(480,360,160,360);

line(160,360,160,120);

getch();

closegraph();

}

 

 

[例程序5.2](用1ineto函數(shù)畫)

#include<graphics.h>

main()

{

int gdriver=DETECT,gmode;

initgraph(&gdriver,&gmode,“c:\\tc”);

cleardevice();

moveto(160,120);

lineto(480,120);

lineto(480,360);

lineto(160,360);

lineto(160,120);

getch();

closegraph();

}

 

 

[例程序5.3](用linerel函數(shù)畫)

#include<graphics.h>

main()

{

int gdriver=DETECT,gmode;

initgraph(&gdriver,&gmode,“c:\\tc”);

cleardevice();

moveto(160,120);

linerel(320,0);

linerel(0,240);

lincrel(-320,0);

linerel(0, -240);

getch():

closegraph();

}

 

以上程序中均調(diào)用了函數(shù)getch。函數(shù)getch的功能是從鍵盤無回顯地取一個字符。所

以可以從以上三個程序的進程中看出,當程序繪圖結(jié)束后,即要執(zhí)行語句“getch();”。它等待從鍵盤輸入—個字符(即敲任意鍵),在敲任意鍵之前,圖形—直保持在屏幕上。如敲—下任意鍵,則馬上關(guān)閉圖形方式(即執(zhí)行語句closegraph();),回到文本方式。

5.4.2圓弧類函數(shù)

①circle函數(shù)

函數(shù)circle,用于以指定圓心和半徑的方式畫圓。其調(diào)用格式為:

circle(x,y,r);

參數(shù)x,y,r均為整型。其中(x,y)為指定的圓心坐標;r為圓的半徑。例如:

circle(320,240,100);

的調(diào)用結(jié)果是:以點(320,240)為圓心,以100為半徑畫—個整圓。

②arc函數(shù)

arc函數(shù)用于畫圓弧。其調(diào)用格式為:

arc(x,y,angs,ange,r);

函數(shù)調(diào)用時所需的五個參數(shù)均為整型。其中:

x,y:為圓弧所在圓的圓心坐標。

angs、ange:分別為圓弧的起始角和終止角,單位為“度”。

r:為圓弧的半徑。

例如以下的調(diào)用:

arc(320,240,90,180,100);

的結(jié)果是以點(320,240)為圓心,100為半徑,從90度到180度畫了四分之一個圓的圓弧。

當圓弧的起始角angs=0,終止角ange=360時,則可以畫出一個整圓。

②ellipse函數(shù)

函數(shù)ellipse用于畫橢圓弧或橢圓。其調(diào)用格式為:

ellipse(x,y,angs,ange,xr,yr);

函數(shù)的參數(shù)均為整型。其中:

x,y:為橢圓的中心坐標。

angs,ange:分別為橢圓弧的起始角和終止角,單位為“度”。

xr,yr:分別為橢圓的水平軸半軸和垂直軸半軸。

如果angs=0,ange=360,則可以畫出一個完整的橢圓。

另外:

xr>yr:則畫出長軸為水平方向的橢圓或橢圓?。?/span>

xr<yr:則畫出長軸為垂直方向的橢圓或橢圓??;

xr=y(tǒng)r:則可以畫出圓或圓弧。

下面的一個例子是調(diào)用ellipse函數(shù)畫出一個橢圓群。

[例程序5.4]

#include<graphics.h>

main()

{

int a=150,b;

int gdriver=DETECT,gmode;

initgraph(&gdriver,&gmode,“c:\\tc”);

cleardevice();? ‘

for(b=10;b<=140;b十=10)

ellipse(320,240,0,360,a—b,b);

getch();

closegraph();

}

 

5.4.3多邊形

①rectangle函數(shù)

函數(shù)rectangle用于繪制矩形。其調(diào)用格式為:

rectangle(x1,y1,x2,y2);

參數(shù)x1,y1,x2,y2均為整型。

函數(shù)的功能是以點(x1,y1)為矩形的左上角點,以點(x2,y2)為矩形的右下角頂點,畫

一個正方的矩形。

上面例程序5.1中畫的矩形,可以用函數(shù)rectangle的一次調(diào)用完成:

rectangle(160,120,480,360);

②drawpoly函數(shù)

函數(shù)drawpoly可用于畫一條多邊折線。其調(diào)用格式為:

drawpoly(nps,*pxy);

它有兩個參數(shù)。第一個參數(shù)nps是一個整型數(shù)據(jù),它表示所畫多邊折線的頂點數(shù);第二個參數(shù)pxy是一個整型數(shù)組的數(shù)組名,該數(shù)組中存放了nps個頂點的坐標值序列。

例如,有一個名為xy的數(shù)組中存放了4個頂點的坐標為[x1,y1,x2,y2,x3,y3,x4,

y4],則調(diào)用方式為:

drawpoly(4,xy);

如果最后一個點的坐標與第一個點的坐標相同,則利用drawpoly函數(shù)便可以畫出一個

封閉的多邊形。此時,坐標點的數(shù)目應(yīng)該是多邊形的頂點數(shù)加1,即讓最后一個頂點和第一個點重合。

5.5圖形屬性控制

圖形的屬性控制包括控制顏色和線型。顏色又有背景色和前景色之分。背景色指的是

屏幕的顏色,即繪圖時的底色;前景色指的是繪圖時圖形線條所用的顏色。

任何繪圖函數(shù)都是在當前的顏色(包括背景色和前景色)和線型的狀態(tài)下進行繪圖的。

在前面所舉的四個例程序中沒有提當前的顏色和線型,那是因為用了系統(tǒng)的缺省值。系統(tǒng)的缺省值是:背景色為黑色,前景色為白色,線型為實線。

如果繪圖時要用系統(tǒng)缺省值以外的顏色和線型,則可以利用圖形屬性控制函數(shù)另行設(shè)置。

5.5.1 setbkcolor函數(shù)

函數(shù)setbkcolor用于設(shè)置繪圖時的背景顏色。其調(diào)用格式為:

setbkcolor(color);

參數(shù)color為一個整型數(shù)據(jù),代表所取的顏色,可以用整型常數(shù),也可以用符號常數(shù),見表5.3。

 

 

表5.3

符號名 數(shù)值 顏? 色
BLACK

BLUE

GREEN

CYAN

RED

MAGENTA

BROWN

LIGHTGRAY

DARKGRAY

LIGHTBLUE

LIGHTGREEN

LIGHTCYAN

LIGHTRED

LIGHTMAGENTA

YELLOW

WHITE

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

黑色

藍色

綠色

青色

紅色

紫紅色

棕色

淺灰色

深灰色

淺藍色

淺綠色

淡青色

淺紅色

淡紫紅

黃色

白色

?

例如,要把背景色設(shè)置成淺藍,可以如下調(diào)用:

setbkcolor(LIGHTBLUE);

或:setbkcolor(9);

兩種調(diào)用方式,效果相同。

5.5.2 setcolor函數(shù)

函數(shù)setcolor用于設(shè)置前景顏色,即繪圖用的顏色。調(diào)用格式為:

setcolor(color);

參數(shù)color的含義和用法見setbkcolor函數(shù)。

下面的例程序可以演示16種顏色。

[例程序5.5]

#include<graphics.h>

main()

{

int cb,cf;

int gdriver=DETECT,gmode;

initgraph(&gdriver,&gmode,“c:\\tc”);

cleardevice();

for(cb=0;cb<=15;cb十十)

{setbkcolor(cb);

for(cf=0;cf<=15;cf十十)

{setcolor(cf);

circle(100十cf*25,240,100);}

getch();}

getch();

closegraph();}

5.5.3 setlinestyle函數(shù)

函數(shù)setlinestyle用于設(shè)置當前繪圖所用的線型和寬度,這些設(shè)置限于對直線類圖形有

效。其調(diào)用格式如下:

setlinestyle(sty,pat,b);

該函數(shù)所用的三個參數(shù)含義如下:

·sty:為整型值,用來定義所畫直線的類型。見表5.4所示。

表中前四種為系統(tǒng)預(yù)定義的類型,第五種留給用戶自定義用。

·pat:為無符號整型數(shù)。該參數(shù)在需要用戶自定義線型時使用。如果是使用前四種系

統(tǒng)預(yù)定義的線型,則該參數(shù)可取0值。

·b:為整型數(shù),指定所畫直線的粗細,以象素為單位。見表5.5所示。

表5.4

符號名 數(shù)值 含? 義
SOLID_LINE

DOTTED_LINE

CENTER_LINE

DASHED_LINE

USERBIT_LINE

0

1

2

3

4

實線(缺省)

點線

中心線

虛線

用戶自定義類型

?

 

表5.5

??? 符號名 數(shù)值 含? 義
???? NORM_WIDTH

THICK_ WIDTH

1

3

1個象素寬(缺省)

3個象素寬

?

當函數(shù)setlinestyle的第—個參數(shù)為USERBIT_LINE(或4)時,可以由用戶自己定義

直線類型。此時,第三個參數(shù)的意義同前。直線的類型在第二個參數(shù)中定義,該參數(shù)是一個16位二進制碼,每一位(bit)表示一個象素,某一位置l時表示直線上相應(yīng)位置有顯示,置0時為空白。例如:

1111111111111111

16位全置l,因此是畫一條實線。而

1010101010101010

隔位置1,因此是畫一條點線。

在實際編寫程序時,一般把16位二進制數(shù)轉(zhuǎn)換為4位十六進制數(shù),每4位二進制數(shù)轉(zhuǎn)

換為1位十六進制數(shù)。故上面的兩個例子轉(zhuǎn)換為十六進制數(shù)為:FFFF和AAAA。

函數(shù)調(diào)用方法為:

setlinestyle(4,OxAAAA,1);

用這種方法,可以根據(jù)需要定義各種線型。

下面所舉的例子程序,演示了系統(tǒng)預(yù)定義的四種線型。

[例程序5.6]

#include<graphics.h>

main()

{

int i,j,c,x=50,y=50,k=1;

int gdriver=DETECT,gmode;

printf(“input color number.\n”);

scanf(“%d”,&c);

initgraph(&gdriver,&gmode,“c:\\tc”);

cleardevice();

setbkcolor(11);

setcolor(c);

for(j=1;j<=2;j十十)

{

for(i=0;i<4;i十十)

{

setlinestyle(i,0,k);

rectangle(x,y,X十210,y十80);

x=x十110;y=y(tǒng)十40;

}

k=3;

x=50;y=250;

}

getch();

closegraph();

}

5.6充填

5.6.1 setfillstyle函數(shù)

函數(shù)setfillstyle用來設(shè)置當前充填模式和充填顏色,以便用于充填一個指定的封閉

域。其調(diào)用格式為:

setfillstyle(pattern,color);

參數(shù)pattern用于指定充填的模式。系統(tǒng)有11種預(yù)定義的模式,見表5.6所示。

表5.6

??? 符號名 ? 數(shù)值 ??? 含? 義
???? EMPTY_FILL

SOLID_FILL

LINE_FILL

LTSLASH_FILL

SLASH_FILL

BKSLASH_FILL

LTBKSLASH_FILL

HATCH_FILL

XHATCH_FILL

INTERLEAVE_FILL

WINDEDOT_FILL

CLOSEDOT_FILL

USER_FILL

??? 0

1

2

3

4

5

6

7

8

9

10

11

12

??? 用背景色充填

用指定顏色充填

用線“一”充填

用斜線充填

用粗斜線充填

用粗反斜線充填

用反斜線充填

用網(wǎng)格線充填

用斜交叉線充填

用間隔線充填

用稀疏點充填

用密集點充填

用戶自定義模式

第二個參數(shù)color指定充填用顏色

5.6.2 floodfill函數(shù)

函數(shù)floodfill實施對一指定區(qū)域進行充填操作,其充填模式和顏色已由setfillstyle函

數(shù)指定。其調(diào)用格式為:

floodfill(x,y,bcolor);

參數(shù)(x,y)指位于充填區(qū)域內(nèi)任意一點的坐標,該點作為充填的起始點。bcolor為充填

區(qū)域的邊界顏色。例:

setcolor(RED);

circle(320,240,150);

setfillstyle(SOLID_FILL,GREEN);

floodfill(320,240,RED);

該段程序的作用是,用紅顏色畫了一個圓,然后用綠色色塊充填該圓。

下面的例程序演示充填情況。

[例程序5.7]

#include<graphics.h>

main()

{

int i,c,x=5,y=6;

int gdriver=DETECT,gmode;

printf(“input color number.\n”);

scanf(“%d”,&c);

initgraph(&gdriver,&gmode,”c:\\tc”);

cleardevice();

setbkcolor(9);

for(i=c;i<c十8;i十十)

{

setcolor(i);

rectangle(x,y,x十140,y十104);

x=x十70;y=y(tǒng)十52;

setfillstyle(1,i);

floodfill(x,y,i);}

getch();

closegraph();

}

5.6.3其它充填函數(shù)

以下所列的幾個充填函數(shù),均須事先由函數(shù)setfillstyle指定當前的充填模式和顏色。

① fillellipse函數(shù)

函數(shù)fillellipse用于畫一個充填的實橢圓,用當前顏色畫出邊線。其調(diào)用格式為:

fillellipse(x,y,rx,ry);

四個參數(shù)均為整型,其中:

x,y:為橢圓的中心坐標。

rx,ry:分別為橢圓的水平和垂直半軸長。

②sector函數(shù)

函數(shù)sector用于畫一個充填的橢圓扇區(qū),用當前顏色畫出邊線。其調(diào)用格式為:

sector(x,y,angs,ange,rx,ry);

參數(shù)使用說明參閱函數(shù)ellipse。

③fillpoly函數(shù)

函數(shù)fillpoly用于畫并充填一個多邊形(必須利用首末兩點重合以確保多邊形封閉),邊

線用當前顏色畫出。其調(diào)用格式為:

fillpoly(nps,*pxy);

函數(shù)的參數(shù)說明參閱前面的drawpoly函數(shù)。

5.7圖形方式下的文本

5.7.1 BGI字體

在圖形方式下,BGI提供了兩種輸出文本的方式:一種是位映象字符(或稱點陣字符);

另一種是筆劃字體(或稱矢量字符)。其中位映象字符為缺省方式,即在一般情況下輸出文本時,都是以位映象字符顯示的。

筆劃字體不是以位模式表示的,每個字符被定義成一系列的線段或筆劃的組合。筆劃字體可以靈活地改變其大小,而且不會降低其分辨率。系統(tǒng)提供了4種不同的筆劃字體,即:小號字體、三倍字體、無襯線字體和黑體(哥特字體)。每種筆劃字體都存放在獨立的字體文件中,文件擴展名為.chr,在一般情況下,安裝在bgi目錄下。為了使用筆劃字體,必須裝入相應(yīng)的字體文件。

5.7.2文本輸出

①settextstyle函數(shù)

函數(shù)settextstyle用于在使用筆劃字體之前裝入字體文件。其調(diào)用格式為:

settextstyle(font,direction,csize);

函數(shù)所需的三個參數(shù),其含義如下:

.font:是一個整型數(shù),用來指定所使用的字體,其取值見表5.7。

表5.7

符號名 數(shù)值 含? 義
DEFAULT_ FONT

TRIPLEX_FONT

SMALL_FONT

SANSSERIF_FONT

GOTHIC_FONT

0

1

2

3

4

8×8位圖字體(缺省)

三重矢量字體

小號矢量字體

無襯線矢量字體

哥特矢量字體

?

.direction:? 是一個整型數(shù)。用來指定文本的輸出方向,取值見表5.8。

表5.8

符號名 數(shù)值 含? 義
HORIZ _DIR

VERT_DIR

0

1

從左到右輸出(缺省)

從上到下輸出

?

·csize:是一個整型數(shù),表示字符的大小。該參數(shù)實際上是—個放大系數(shù),它表示對8×8點陣的放大倍數(shù),其取值的范圍是1一10,它既影響點陣字符,也影響筆劃字體。

調(diào)用settextstyle函數(shù)后,設(shè)置了輸出字符的字體、輸出方向及大小,這些設(shè)置將影響下

面的outtext和outtextxy所產(chǎn)生的文本輸出。

C語言研究中心(www.sztianhecheng.cn)

C語言網(wǎng)提供「C語言、C++、算法競賽」在線課程,全部由資深研發(fā)工程師或ACM金牌大佬親授課,更科學、全面的課程體系,以在線視頻+在線評測的學習模式學習,學練同步,拒絕理論派,真正學會編程!還有獎學金等增值福利等你!

C語言網(wǎng), 版權(quán)所有丨如未注明 , 均為原創(chuàng)丨本網(wǎng)站采用BY-NC-SA協(xié)議進行授權(quán) , 轉(zhuǎn)載請注明C語言之圖形顯示及計算機繪圖技術(shù)
喜歡 (9)
[jinyangH@aliyun.com]
分享 (0)
發(fā)表我的評論
取消評論
表情

Hi,您需要填寫昵稱和郵箱!

  • 昵稱 (必填)
  • 郵箱 (必填)