C語言圖形程序設(shè)計(jì)基礎(chǔ)_第1頁
C語言圖形程序設(shè)計(jì)基礎(chǔ)_第2頁
C語言圖形程序設(shè)計(jì)基礎(chǔ)_第3頁
C語言圖形程序設(shè)計(jì)基礎(chǔ)_第4頁
C語言圖形程序設(shè)計(jì)基礎(chǔ)_第5頁
已閱讀5頁,還剩91頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

會(huì)計(jì)學(xué)1C語言圖形程序設(shè)計(jì)基礎(chǔ)2023/1/172字符坐標(biāo)系是以屏幕的左上角為坐標(biāo)原點(diǎn),水平方向?yàn)閄軸,垂直方向?yàn)閅軸,如下圖-1所示:圖-1字符坐標(biāo)系MaxxMaxy(1,1)注:字符坐標(biāo)系的原點(diǎn)為(1,1),水平方向(X軸)分為若干列,垂直方向(Y軸)分為若干行,用一對(duì)坐標(biāo)可以指定屏幕上一個(gè)位置。(8,20)表示字符位于屏幕的第8行第20列C語言圖形程序設(shè)計(jì)基礎(chǔ)第1頁/共96頁2023/1/173(1)BW40:黑白40列方式。顯示25行文本,其中每行40個(gè)字符,以黑白兩色顯示。(2)C40:彩色40列方式??娠@示40列25行彩色字符。(3)BW80:黑白80列方式。可顯示80列25行字符。(4)C80:彩色80列25行顯示方式。(5)MONO:?jiǎn)紊?0列25行顯示方式。(6)C4350:一種特殊的彩色文本方式,適和EGA和VGA兩種適配器。若用EGA適配器,顯示80列43行;若用VGA適配器,則顯示80列50行。C語言圖形程序設(shè)計(jì)基礎(chǔ)由于顯示模式的不同,所顯示的字符的列數(shù)和行數(shù)以及顏色也不相同。C支持以下6種不同的顯示方式。第2頁/共96頁2023/1/174在不同的顯示模式下,屏幕所顯示的字符數(shù)量也不一樣。X方向一般為40列或80列,Y方向一般為25行,但EGA和VGA適配器可達(dá)43行或50行。在文本模式下,屏幕最多可顯示80X50=4000個(gè)字符,至少可顯示40X25=1000個(gè)字符。顯示字符越多,每個(gè)字符尺寸越小,反之越大。顯示模式不同,屏幕坐標(biāo)的構(gòu)成也不相同。比如:(1)在BW40方式下,最大坐標(biāo)位置為(25,40);(2)在C4350方式下,最大坐標(biāo)位置為(50,80);注:C語言圖形程序設(shè)計(jì)基礎(chǔ)第3頁/共96頁2023/1/1752.圖形模式與點(diǎn)坐標(biāo)系

在屏幕上顯示圖形的方式稱為圖形模式。在圖形模式下,屏幕是由像素點(diǎn)組成的,像素點(diǎn)的多少?zèng)Q定了屏幕的分辨率。分辨率越高,顯示圖形越細(xì)致,質(zhì)量越好。

如右圖所示1.屏幕由許多像素點(diǎn)組成;2.圖形的顯示效果取決于分辨率的高低;C語言圖形程序設(shè)計(jì)基礎(chǔ)第4頁/共96頁2023/1/176例如:CGA顯示器的分辨率為300X200,TVG顯示器的分辨率為1024X768,TVGA比CGA分率高。圖-2點(diǎn)坐標(biāo)系MaxxMaxy(0,0)注:點(diǎn)坐標(biāo)系坐標(biāo)值的范圍取決于所用的適配器/顯示分辨率C語言圖形程序設(shè)計(jì)基礎(chǔ)在圖形模式下,屏幕上每個(gè)像素的顯示位置用點(diǎn)坐標(biāo)來描述的。點(diǎn)坐標(biāo)系是以屏幕左上角為坐標(biāo)原點(diǎn)(0,0),水平方向?yàn)閄軸,自左向右;垂直方向?yàn)閅軸,自上向下。如下圖所示:第5頁/共96頁2023/1/177由于屏幕的分辨率不同,水平方向和垂直方向的點(diǎn)數(shù)也不一樣,從而點(diǎn)坐標(biāo)系的Maxx、 Maxy數(shù)值也不同。

在TurboC中,坐標(biāo)數(shù)據(jù)可以用兩種形式給出:一種是絕對(duì)坐標(biāo),另一種是相對(duì)坐標(biāo)。(1)絕對(duì)坐標(biāo)的參考點(diǎn)是坐標(biāo)的原點(diǎn)(0,0),x和y只能取規(guī)定范圍(0,Maxx

)和(0,Maxy)內(nèi)的正整數(shù);(2)相對(duì)坐標(biāo)是相對(duì)“當(dāng)前點(diǎn)”的坐標(biāo),其坐標(biāo)的參考點(diǎn)是當(dāng)前點(diǎn)。在相對(duì)坐標(biāo)中,x和y的取值是相對(duì)當(dāng)前點(diǎn)在x方向和y方向上的增量,故x和y可以為正整數(shù),也可以為負(fù)整數(shù)。C語言圖形程序設(shè)計(jì)基礎(chǔ)第6頁/共96頁2023/1/1783.1.2、圖形驅(qū)動(dòng)程序與圖形模式1.圖形驅(qū)動(dòng)程序?qū)τ诓煌膱D形顯示器,其控制方式各有差異,因此要顯示圖形就需要先裝入相應(yīng)的圖形驅(qū)動(dòng)程序。TurboC支持以下幾種圖形驅(qū)動(dòng)程序:

符號(hào)常量

數(shù)值符號(hào)常量

數(shù)值DETECT0IBM85146CGA1HERCMONO7MCGA2ATT4008EGA3VGA9EGA644PC327010EGAMONO5C語言圖形程序設(shè)計(jì)基礎(chǔ)第7頁/共96頁2023/1/1792.圖形模式由于每種圖形顯示器都有幾種不同的圖形顯示模式,所以要顯示圖形,不但要先裝入相應(yīng)的驅(qū)動(dòng)程序,而且還要決定所用的顯示模式。TurboC常采用的幾種圖形驅(qū)動(dòng)程序及相應(yīng)的模式驅(qū)動(dòng)程序(driver)圖形(gmode)等價(jià)值分辨(dpi)CGAC00320X200

CGACGAC11320X200CGAC22320X200CGAC33320X200CGAHI4640X200表2.2圖形驅(qū)動(dòng)程序及相應(yīng)的模式C語言圖形程序設(shè)計(jì)基礎(chǔ)第8頁/共96頁2023/1/1710驅(qū)動(dòng)程序(driver)圖形(gmode)等價(jià)值分辨(dpi)EGAEGAHI0640X200EGALO1640X350VGALO0640X200VGAVGAMED1640X350VGAHI2640X480注:1.不同的圖形驅(qū)動(dòng)程序有不同的圖形模式;2.同一圖形驅(qū)動(dòng)程序,也可能會(huì)有幾種圖形模式;C語言圖形程序設(shè)計(jì)基礎(chǔ)第9頁/共96頁2023/1/1711TurboC提供了十分豐富的圖形庫函數(shù),共有70多個(gè),所有圖形函數(shù)的原型均在頭文件“graphics.h”中定義。所以,在任何使用圖形函數(shù)的程序中,都要求其頭部包含文件graphics.h,即在程序文件的開頭寫上文件包含命令:

#include<graphics.h>

同時(shí)將集成開發(fā)環(huán)境option/Linker中的graphics.lib選項(xiàng)設(shè)置為”on”。下面我們介紹:圖形系統(tǒng)的初始化、圖形系統(tǒng)的關(guān)閉、

圖形模式控制。3.1.3、圖形系統(tǒng)初始化和模式控制C語言圖形程序設(shè)計(jì)基礎(chǔ)第10頁/共96頁2023/1/1712圖形系統(tǒng)初始化首先要調(diào)用initgraph()函數(shù),它通過從磁盤上裝入一個(gè)圖形驅(qū)動(dòng)程序來初始化圖形系統(tǒng),并將系統(tǒng)設(shè)置為圖形模式。

1.圖形系統(tǒng)的初始化圖形模式是有別于文本模式的一種計(jì)算機(jī)屏幕顯示模式。屏幕一般在默認(rèn)情況下為80列25行的文本模式,在文本模式下,所有的圖形函數(shù)均不能操作,因此在使用圖形函數(shù)繪圖之前,必須將屏幕顯示適配器設(shè)置為一種圖形模式,即為圖形初始化過程。C語言圖形程序設(shè)計(jì)基礎(chǔ)第11頁/共96頁2023/1/1713[功能]將圖形驅(qū)動(dòng)軟件裝入內(nèi)存,使屏幕顯示適配器設(shè)置為圖形模式,即圖形系統(tǒng)初始化;[說明]1.gdriver是一個(gè)整型值,用來指定要裝入的圖形驅(qū)動(dòng)程序;該值在頭文件graphics.h中定義;2.gmode是一個(gè)整型值,用來設(shè)置圖形顯示模式。圖形顯示模式?jīng)Q定了顯示的分辨率和顯示的顏色的多少等;3.path是一個(gè)字符串,用來指明圖形驅(qū)動(dòng)程序所在的路徑.1.若驅(qū)動(dòng)程序就在用戶當(dāng)前目錄下,則path可為空字符串,否則應(yīng)給出具體路徑名。一般情況下,TurboC安裝在C盤的TC目錄中,則該路徑為:C:\TC,若寫在參數(shù)中則為“C:\\TC”;2.前兩個(gè)參數(shù)實(shí)際上是整型指針,調(diào)用時(shí)應(yīng)加上地址運(yùn)算符“&”;注:initgraph()函數(shù)[格式]

voidfarinitgraph(int*gdriver,int*gmode,char*path);C語言圖形程序設(shè)計(jì)基礎(chǔ)第12頁/共96頁2023/1/1714(1)已知顯示器類型的圖形系統(tǒng)初始化。

如果已經(jīng)知道所用圖形顯示器的種類和要使用的圖形模式則圖形系統(tǒng)的初始化可用下面程序,例如:例1畫一實(shí)心矩形#include"graphics.h"main(){intgdriver,gmode;gdriver=CGA;/*設(shè)置顯示模式CGA*/gmode=CGAC0;/*選用CGA圖形模式*/initgraph(&gdriver,&gmode,“D:\\TC");/*初始化圖形系統(tǒng)*/C語言圖形程序設(shè)計(jì)基礎(chǔ)第13頁/共96頁2023/1/1715

bar3d(10,20,50,80,0,0);/*畫一條形圖*/getch();/*等待按一鍵結(jié)束*/closegraph();/*關(guān)閉圖形系統(tǒng),回到文本模式*/}程序注釋:bar3d()函數(shù)

[格式]:voidbar3d(intx1,inty1,intx2,inty2,intdepth,inttopflag);[功能]:畫一填充的三維條形圖;[說明]:depth為條形的深度;topflag=0則不加頂,否則在條形圖上加一個(gè)頂。C語言圖形程序設(shè)計(jì)基礎(chǔ)第14頁/共96頁2023/1/1716[格式]voidfardetectgraph(int*gdriver,int*gmode);[功能]在計(jì)算機(jī)有圖形適配器的情況下,確定圖形適配器的類型;[說明]1.若系統(tǒng)有圖形適配器,則把gdriver指的變量設(shè)置為適合于適配器的圖形驅(qū)動(dòng)程序的代碼,并把gmode所指的變量設(shè)置為適配器所能支持的最高分辨率。2.若系統(tǒng)無圖形適配器,則gdriver所指的變量為-2.(2)不知顯示器類型的圖形系統(tǒng)初始化。若在編寫程序過程中,不知道當(dāng)前系統(tǒng)屏幕硬件的類型或編寫的程序要用于不同的圖形顯示器,這就要求所編程序能知當(dāng)前圖形顯示器的代碼,TurboC供了一個(gè)對(duì)圖形顯示器硬件測(cè)試的函數(shù)detectgraph()。detectgraph()函數(shù)C語言圖形程序設(shè)計(jì)基礎(chǔ)第15頁/共96頁2023/1/1717例2、測(cè)試硬件顯示模式和繪制圖形#include"graphics.h"main(){intgdriver,gmode;detectgraph(&gdriver,&gmode);

/*測(cè)試結(jié)果存放于gdriver,gmode中*/if(gdriver<0){printf("thereisnotgraphicsdisplayer\n");exit(1);}/*無圖形顯示模式時(shí),顯示信息,停止程序*/

printf("detectgraphicsdriveris#%d,modeis#%d\n",gdriver,gmode);/*顯示硬件測(cè)試結(jié)果*/

getch();/*等待按一鍵結(jié)束*/C語言圖形程序設(shè)計(jì)基礎(chǔ)第16頁/共96頁2023/1/1718initgraph(&gdriver,&gmode,"c:\\tc");/*初始化圖形系統(tǒng)*/bar3d(10,20,50,80,10,1);getch();/*等待按一鍵結(jié)束*/closegraph();/*關(guān)閉圖形系統(tǒng),回到文本模式*/return(0);}C語言圖形程序設(shè)計(jì)基礎(chǔ)第17頁/共96頁2023/1/1719例3自動(dòng)搜索顯示類型和模式并初始化畫圖

#include"graphics.h"main(){(3)自動(dòng)初始化圖形系統(tǒng)。一般在程序設(shè)計(jì)中,可以把對(duì)圖形顯示器的檢測(cè)和初始化工作放在一起來自動(dòng)完成,規(guī)定Gdriver=DETECT,則initgraph()函數(shù)會(huì)自動(dòng)按照系統(tǒng)所配置的圖形顯示器來確定驅(qū)動(dòng)程序,并把圖形模式設(shè)置為檢測(cè)到的驅(qū)動(dòng)程序的最高分辨率,實(shí)現(xiàn)圖形系統(tǒng)的初始化.C語言圖形程序設(shè)計(jì)基礎(chǔ)第18頁/共96頁2023/1/1720

intgdriver=DETECT,gmode;

/*自動(dòng)搜索顯示器類型和顯示模式*/

initgraph(&gdriver,&gmode,“C:\\TC");

/*初始化圖形系統(tǒng)*/

bar3d(10,20,50,80,10,1);

/*畫一三維立體有頂矩形*/

getch();

/*等待按一鍵結(jié)束*/closegraph();

/*關(guān)閉圖形系統(tǒng),回到文本模式*/return(0);}C語言圖形程序設(shè)計(jì)基礎(chǔ)第19頁/共96頁2023/1/17212.圖形系統(tǒng)的關(guān)閉

在圖形編程中,我們均用函數(shù)initgraph()對(duì)圖形系統(tǒng)進(jìn)行初始化,即啟動(dòng)圖形系統(tǒng),進(jìn)入繪圖狀態(tài),在程序結(jié)束時(shí)都用函數(shù)closegraph()關(guān)閉圖形系統(tǒng)。closegraph()函數(shù)[格式]voidfarclosegraph();[功能]關(guān)閉圖形模式。[說明]函數(shù)closegraph()用來關(guān)閉圖形模式,釋放用于保存圖形驅(qū)動(dòng)程序和字體所占用的內(nèi)存空間。當(dāng)一個(gè)程序需要從圖形模式下退出,且回到文本模式下繼續(xù)運(yùn)行時(shí)可調(diào)用該函數(shù)。注:所有有關(guān)圖形顯示的程序一定是在initgraph()和closegraph()之間。C語言圖形程序設(shè)計(jì)基礎(chǔ)第20頁/共96頁2023/1/17223.圖形模式的控制

為了對(duì)圖形模式進(jìn)行控制,即

1.從圖形模式轉(zhuǎn)換成文本模式,或從文本模式轉(zhuǎn)換成圖形模式;

2.設(shè)置驅(qū)動(dòng)器有效模式或讀取當(dāng)前圖形模式和范圍。

TurboC都提供了相關(guān)的函數(shù)來實(shí)現(xiàn)其控制。1.getgraphmode()函數(shù)[格式]voidfargetgraphmode(void);[功能]返回當(dāng)前圖形模式值,其返回值如前表所示。C語言圖形程序設(shè)計(jì)基礎(chǔ)第21頁/共96頁2023/1/1723[功能]恢復(fù)屏幕在圖形初始化前的模式。[說明]該函數(shù)使initgraph()函數(shù)所選定圖形模式關(guān)閉,返回到調(diào)用initgraph()前的狀態(tài)。注意它與closegraph()函數(shù)的區(qū)別。3.setgraphmode()函數(shù)[格式]voidfarsetgraphmode(intgmode);[功能]設(shè)置系統(tǒng)圖形模式并清屏幕。[說明]該函數(shù)把當(dāng)前的圖形模式設(shè)置為gmode所指定的模式。C語言圖形程序設(shè)計(jì)基礎(chǔ)2.restorecrtmode()函數(shù)[格式]voidfarrestorecrtmode(void);第22頁/共96頁2023/1/1724注:通過調(diào)用以上函數(shù),可實(shí)現(xiàn)使顯示器暫時(shí)離開圖形模式進(jìn)入文本模式,進(jìn)行文本輸出,然后不經(jīng)過initgraph()函數(shù)再返回圖形模式的功能.4.getmoderange()函數(shù)[格式]voidfargetmoderange(intdriver,int*lomode,int*himode);[功能]獲取圖形驅(qū)動(dòng)器可使用的模式范圍。[說明]該函數(shù)可以確定由driver所指定圖形驅(qū)動(dòng)器能夠支持的最低和最高模式,并將這些值放在由lomode和himode所指向的變量中.C語言圖形程序設(shè)計(jì)基礎(chǔ)第23頁/共96頁2023/1/1725例4圖形模式控制函數(shù)應(yīng)用程序#include"graphics.h"#include"stdio.h"#include"stdlib.h"main(){intgdriver,gmode,lo,hi;gdriver=CGA;/*設(shè)置顯示模式為CGA*/getmoderange(CGA,&lo,&hi);/*獲得CGA的圖形模式范圍*/printf("CGAsurpportingmodesrangefrom%dto%d.\n",lo,hi);/*顯示CGA的顯示模式范圍/initgraph(&gdriver,&lo,"c:\\tc");/*初始化CGAC0圖形系統(tǒng)*/bar3d(100,30,130,150,0,0);C語言圖形程序設(shè)計(jì)基礎(chǔ)第24頁/共96頁2023/1/1726getch();/*等待按一鍵結(jié)束*/

gmode=getgraphmode();/*獲得現(xiàn)行圖形模式*/restorecrtmode();/*返回圖形初始化前的現(xiàn)實(shí)模式*/printf("NOWintextmode,pressanykeybacktographicsmode.\n");getch();

setgraphmode(gmode);/*再回到圖形模式*/rectangle(50,30,100,130);/*畫一矩形*/getch();closegraph();/*關(guān)閉圖形系統(tǒng),回到文本模式*/return(0);}C語言圖形程序設(shè)計(jì)基礎(chǔ)第25頁/共96頁2023/1/1727我們?cè)诋媹D時(shí)需要運(yùn)用光標(biāo)定點(diǎn),即確定坐標(biāo)位置。當(dāng)屏幕處于文本狀態(tài)時(shí),左上角坐標(biāo)原點(diǎn)為(1,1);而在圖形模式下,以左上角為坐標(biāo)原點(diǎn)(0,0),水平方向向右為X軸,垂直方向向下為Y軸。由于圖形顯示器和顯示模式的不同,x、y坐標(biāo)的最大值也就不同,可利用TurboC提供的函數(shù)來設(shè)定坐標(biāo)(定點(diǎn)),讀取當(dāng)前光標(biāo)的位置以及x、y軸的最大值。3.1.4、圖形坐標(biāo)的設(shè)置moveto()函數(shù)[格式]voidfarmoveto(intx,inty);[功能]把當(dāng)前光標(biāo)移到所需的位置(x,y)。1.定點(diǎn)C語言圖形程序設(shè)計(jì)基礎(chǔ)第26頁/共96頁2023/1/1728[說明]該函數(shù)把當(dāng)前窗口中的當(dāng)前光標(biāo)位置(CP)移到所需的(x,y)位置。注:不是畫線。例如:moveto(100,100)表示把當(dāng)前光標(biāo)移到點(diǎn)(100,100)位置上。moverel()函數(shù)[格式]voidfarmoverel(intdeltax,intdeltay);[功能]以增量方式移動(dòng)當(dāng)前光標(biāo)。[說明]此函數(shù)把光標(biāo)從當(dāng)前位置(CP)開始,在x,y方向分別移動(dòng)deltax和deltay,即由(x,y)(x+deltax,y+deltay).例如:若當(dāng)前光標(biāo)在(10,10)位置,執(zhí)行moverel(10,20)后即移到(20,30)的位置上.C語言圖形程序設(shè)計(jì)基礎(chǔ)第27頁/共96頁2023/1/1729注:moveto(10,20)表示把當(dāng)前光標(biāo)移到點(diǎn)(10,20)位置上。moverel(10,20)后即移到(20,30)的位置上.MaxxMaxy(0,0)(10,10)(10,20)(20,30)當(dāng)前光標(biāo)movetomoverel圖形模式C語言圖形程序設(shè)計(jì)基礎(chǔ)第28頁/共96頁2023/1/1730例如:語句printf(“cp’sloc:%d%d”,getx(),gety());顯示光標(biāo)當(dāng)前位置的x值2.讀取當(dāng)前光標(biāo)位置getx()函數(shù)[格式]intfargetx(void);[功能]讀取當(dāng)前光標(biāo)在x軸的位置。gety()函數(shù)[格式]intfargety(void);[功能]讀取當(dāng)前光標(biāo)在y軸的位置。C語言圖形程序設(shè)計(jì)基礎(chǔ)第29頁/共96頁2023/1/1731例5、顯示系統(tǒng)中圖形硬件支持的最大的x,y值.程序:#include"stdio.h"

#include"conio.h"3.讀取x,y軸的最大值getmaxx()函數(shù)[格式]intfargetmaxx(void);[功能]讀取當(dāng)前光標(biāo)在x軸的最大值。getmaxy()函數(shù)[格式]intfargetmaxy(void);[功能]讀取當(dāng)前光標(biāo)在y軸的最大值。C語言圖形程序設(shè)計(jì)基礎(chǔ)第30頁/共96頁2023/1/1732#include"graphics.h"voidmain(){intgdriver,gmode;gdriver=CGA;gmode=CGAC0;initgraph(&gdriver,&gmode,"");printf("maxx,yis%d,%d",getmaxx(),getmaxy());getch();}輸出結(jié)果為;maxx,yis319,199為什么?C語言圖形程序設(shè)計(jì)基礎(chǔ)第31頁/共96頁2023/1/17333.2圖形顏色設(shè)置

在繪圖時(shí),往往要求配置一定的顏色加以渲染.在繪圖系統(tǒng)中顏色分為前景色和背景色。前景色是指構(gòu)成字符和圖形點(diǎn)的顏色,而背景色是指整個(gè)顯示屏幕的顏色。TurboC提供了多個(gè)顏色控制函數(shù)來設(shè)置前景色、背景色等。C語言圖形程序設(shè)計(jì)基礎(chǔ)第32頁/共96頁2023/1/17341.設(shè)置當(dāng)前背景色setbkcolor()函數(shù)[格式]voidfarsetbkcolor(intcolor);[功能]設(shè)置當(dāng)前背景顏色。[說明]

該函數(shù)將背景色設(shè)置成color所指定的顏色值。參數(shù)color可以用名字,也可以用數(shù)字,它們的對(duì)應(yīng)關(guān)系在graphics.h

中定義。如下表:符號(hào)常量數(shù)值含義BLACK0黑色BLUE1藍(lán)色GREEN2綠色Color取值可以由0到15C語言圖形程序設(shè)計(jì)基礎(chǔ)第33頁/共96頁2023/1/17352.設(shè)置當(dāng)前畫圖顏色setcolor()函數(shù)[格式]voidfarsetcolor(intcolor);[功能]設(shè)置當(dāng)前畫圖顏色。[說明]

該函數(shù)把當(dāng)前畫圖顏色設(shè)置成color所指定的顏色值,即畫筆的顏色。參數(shù)color可以用名字,也可以用數(shù)字,但當(dāng)缺省時(shí),默認(rèn)是白色。C語言圖形程序設(shè)計(jì)基礎(chǔ)第34頁/共96頁2023/1/17363獲取顏色信息getbkcolor()函數(shù)[格式]intfargetbkcolor(void);[功能]讀取當(dāng)前背景顏色。[說明]

該函數(shù)返回當(dāng)前背景顏色。getcolor()函數(shù)[格式]intfargetcolor(void);[功能]讀取當(dāng)前畫圖顏色。[說明]

該函數(shù)返回當(dāng)前畫筆顏色。C語言圖形程序設(shè)計(jì)基礎(chǔ)第35頁/共96頁2023/1/17373.3.畫點(diǎn),畫線putpixel()函數(shù)[格式]voidfarputpixel(intx,inty,intcolor);[功能]在點(diǎn)(x,y)處畫一規(guī)定顏色的點(diǎn)。[說明]

該函數(shù)把color所指定的顏色寫到(x,y)處的像素上。例如:語句putpixel(10,20,GREEN)使點(diǎn)(10,20)的像素成為綠色。getpixel()函數(shù)[格式]intfargetpixel(intx,inty);[功能]讀取點(diǎn)(x,y)的顏色。[說明]

該函數(shù)返回指定點(diǎn)(x,y)位置上的像素顏色值。C語言圖形程序設(shè)計(jì)基礎(chǔ)第36頁/共96頁2023/1/1738#include"graphics.h#include"conio.h"voidmain(){intgdriver=DETECT,gmode;intcolor,i,max;initgraph(&gdriver,&gmode,"");/*初始化圖形系統(tǒng)*/max=getmaxcolor();for(i=0;i<20;i++)putpixel(50+i*10,20,max);color=getpixel(50,20);putpixel(150,150,color);getch();closegraph();}例6、在不同位置畫點(diǎn)C語言圖形程序設(shè)計(jì)基礎(chǔ)第37頁/共96頁2023/1/1739

line()函數(shù)[格式]voidfarline(intx1,inty1,intx2,inty2);[功能]指定兩點(diǎn)間畫一直線。[說明]該函數(shù)用當(dāng)前顏色從點(diǎn)(x1,y1)到點(diǎn)(x2,y2)畫一條直線,當(dāng)前位置(CP)不變。

直線類函數(shù)lineto()函數(shù)[格式]voidfarlineto(intx,inty);[功能]從當(dāng)前位置到點(diǎn)(x,y)畫一條直線。[說明]并把當(dāng)前位置(CP)定位在點(diǎn)(x,y)處。

C語言圖形程序設(shè)計(jì)基礎(chǔ)第38頁/共96頁2023/1/1740

linerel()函數(shù)[格式]voidfarlinerel(intdeltax,intdeltay);[功能]從當(dāng)前位置相對(duì)CP位置在X方向增大deltax,在Y方向增大deltay處畫一直線。線的特性設(shè)定我們?cè)谟卯嬀€函數(shù)畫線時(shí),其默認(rèn)值均屬于一個(gè)像素點(diǎn)寬度的實(shí)線。但往往有時(shí)需要改變線型和線的寬度,TurboC提供了一些可以改變線型和線寬的函數(shù),具體如下:C語言圖形程序設(shè)計(jì)基礎(chǔ)第39頁/共96頁2023/1/1741setlinestyle()函數(shù)[格式]voidfarsetlinestyle(intlinestyle,unsignedpattern,intwidth);[功能]改變線型和線寬。[說明]

該函數(shù)所用的3個(gè)參數(shù)具體含義為:〈1〉linestyle為整型值,用來定義所畫直線類型,如下表所示:C語言圖形程序設(shè)計(jì)基礎(chǔ)第40頁/共96頁2023/1/1742代號(hào)名代號(hào)說明SOLID_LINE0實(shí)線DOTTEN_LINE1點(diǎn)線CENTER_LINE2中心線DASHED_LINE3虛線USERBIT_LINE4用戶定義的線型注:表中前4種為系統(tǒng)預(yù)定的類型,第5種為用戶自定義類型〈2〉pattern為無符號(hào)整型數(shù)。該參數(shù)在需要用戶自定義線型時(shí)才使用,若是使用前四種系統(tǒng)預(yù)定義的線型,則該參數(shù)可取0值。C語言圖形程序設(shè)計(jì)基礎(chǔ)第41頁/共96頁2023/1/1743〈3〉width為整型數(shù)。主要用來指定所畫直線的粗細(xì),以像素為單位,分兩種情況,如下表所示:符號(hào)常量值含義NORM_WIDTH11個(gè)像素寬(缺省)THICK_WIDTH33個(gè)像素寬注:通過上述3個(gè)參數(shù)的不同組合,可以根據(jù)需要畫出不同類型、不用粗細(xì)的直線。C語言圖形程序設(shè)計(jì)基礎(chǔ)第42頁/共96頁2023/1/1744例如:從點(diǎn)(10,20)到(150,70)畫一條紅色的點(diǎn)劃線可用下面的語句:

setcolor(RED);setlinestyle(DASHED_LINE,0,THICK_WIDTH);line(10,20,150,70);注意:當(dāng)函數(shù)setlinestyle的第一個(gè)參數(shù)為USERBIT_LINE(或4)時(shí),用戶可以自己定義直線類型。此時(shí)第三個(gè)參數(shù)意義不變而pattern才變得有意義,直線的類型由pattern來定義,該參數(shù)是一個(gè)16位二進(jìn)制碼,每一位(bit)表示一個(gè)像素。C語言圖形程序設(shè)計(jì)基礎(chǔ)第43頁/共96頁2023/1/1745若某一位置為1時(shí)表示直線上相應(yīng)位置以當(dāng)前顏色顯示;若某一位置為0時(shí),則其對(duì)應(yīng)像素不顯示或不改變?cè)瓉淼念伾?;例如?/p>

1.1111111111111111

表示16位全置1,因此可畫一條16個(gè)像素的點(diǎn)實(shí)線。2.1010101010101010

表示隔一位置1,因此可畫一條16個(gè)像素的點(diǎn)虛線。但:在實(shí)際編寫程序時(shí),一般要把16位二進(jìn)制數(shù)轉(zhuǎn)換為4位十六進(jìn)制數(shù),每4位二進(jìn)制數(shù)轉(zhuǎn)換為1位十六進(jìn)制數(shù)。例如1111111111111111FFFF。函數(shù)調(diào)用方法為:setlinestyle(4,0xFFFF,1);

可定義各種線型。C語言圖形程序設(shè)計(jì)基礎(chǔ)第44頁/共96頁2023/1/1746

在圖形模式下主要是繪制圖形,為了有效地對(duì)圖形進(jìn)行操作,TurboC提供了圖形屏幕、圖形窗口的處理功能,即在圖形模式下開設(shè)“窗口”(又稱為視圖區(qū)),并對(duì)屏幕和圖形進(jìn)行處理。屏幕窗口操作1.圖形屏幕處理cleardevice()函數(shù)[格式]voidfarcleardevice(void);[功能]清除整個(gè)圖形屏幕(但保留底色),并把當(dāng)前光標(biāo)位置(CP)重新設(shè)置為(0,0)。C語言圖形程序設(shè)計(jì)基礎(chǔ)第45頁/共96頁2023/1/1747setactivepage()函數(shù)[格式]voidfarsetactivepage(intpage);[功能]設(shè)置圖形輸出活動(dòng)頁。[說明]該函數(shù)確定接受圖形函數(shù)所輸出的活動(dòng)頁,缺省值為屏幕顯示0頁。保存顯示在屏幕上信息的RAM稱為頁(Page)。例如:語句setactivepage(1)表示設(shè)置第1頁為活動(dòng)頁。setvisualpage()函數(shù)[格式]voidfarsetvisualpage(intpage);[功能]該函數(shù)顯示Page所指定的可見圖形頁。例如:語句setvisualpage(1)表示選擇顯示第1頁。C語言圖形程序設(shè)計(jì)基礎(chǔ)第46頁/共96頁2023/1/1748#include"graphics.h"#include"conio.h"voidmain(){intgdriver,gmode;gdriver=VGA;/*設(shè)置VGA圖形設(shè)備器(驅(qū)動(dòng)程序)*/gmode=VGAHI;/*設(shè)置VGA圖形模式*/initgraph(&gdriver,&gmode,"");

/*初始化圖形系統(tǒng)*/cleardevice();

/*清屏*/例7圖形屏幕處理函數(shù)應(yīng)用程序

C語言圖形程序設(shè)計(jì)基礎(chǔ)第47頁/共96頁2023/1/1749setactivepage(1);/*設(shè)置圖形輸出活動(dòng)頁為1*/circle(150,130,80);/*畫一個(gè)圓*/setactivepage(0);/*設(shè)置圖形活動(dòng)頁為0*/rectangle(40,160,90,180);/*畫一個(gè)矩形*/getch();setvisualpage(1);/*設(shè)置可見圖形1頁*/getch();setvisualpage(0);

/*設(shè)置可見圖形0頁*/getch();closegraph();

/*關(guān)閉圖形系統(tǒng)*/}C語言圖形程序設(shè)計(jì)基礎(chǔ)第48頁/共96頁2023/1/1750TurboC提供了圖形窗口處理功能,并可以在屏幕某處設(shè)置一個(gè)圖形窗口,以后有關(guān)圖形的操作均相對(duì)于這個(gè)窗口的左上角為坐標(biāo)原點(diǎn)(0,0)??稍O(shè)置圖形窗口之外的區(qū)域是不可接觸的,這樣所有的圖形操作只在所指定圖形窗口中進(jìn)行,而不會(huì)出現(xiàn)在窗口之外。2.屏幕窗口操作clearviewport()函數(shù)[格式]voidfarclearviewport(void);[功能]清除當(dāng)前圖形窗口,并把當(dāng)前光標(biāo)位置(CP)重置為(0,0)。C語言圖形程序設(shè)計(jì)基礎(chǔ)第49頁/共96頁2023/1/1751若clipflag為1,則超出窗口的輸出部分自動(dòng)剪裁掉;若clipflag為0,則超出圖形窗口之外的部分不被剪裁掉;setviewport()函數(shù)[格式]voidfarsetviewport(intleft,inttop,intright,intbottom,intclipflag);[功能]設(shè)置圖形窗口。[說明]該函數(shù)建立一個(gè)新的圖形窗口,窗口大小用左上角坐標(biāo)(left,top)與右下角坐(right,bottom)來定義。C語言圖形程序設(shè)計(jì)基礎(chǔ)第50頁/共96頁2023/1/1752#include"graphics.h"#include"conio.h"voidmain(){

intgdriver=CGA,gmode=0;/*設(shè)置圖形模式*/initgraph(&gdriver,&gmode,"");

/*初始化圖形系統(tǒng)*/rectangle(30,25,80,80);

/*畫一矩形*/setviewport(30,25,80,80,0);

/*設(shè)置窗口,其大小與前面所畫圖形,窗口之外不剪裁*/line(0,0,100,150);

/*畫直線*/例8、窗口設(shè)置與清除作用

C語言圖形程序設(shè)計(jì)基礎(chǔ)第51頁/共96頁2023/1/1753getch();clearviewport();

/*清除窗口*/getch();cleardevice();

/*清屏*/getch();setviewport(20,15,80,80,1);/*重置窗口,窗口之外裁剪*/rectangle(0,0,60,65);

/*畫一矩形*/line(0,0,100,150);

/*畫直線*/getch();closegraph();/*關(guān)閉圖形系統(tǒng),回到文本模式*/}C語言圖形程序設(shè)計(jì)基礎(chǔ)第52頁/共96頁2023/1/1754為了能按照一定的要求對(duì)圖形進(jìn)行填充,通常應(yīng)規(guī)定填充的模式和顏色。圖形填充時(shí),使用的是當(dāng)前模式和顏色;若沒有設(shè)置填充模式和顏色,則填充時(shí)使用缺省值。缺省填充模式為SOLID_FILL,填充顏色為函數(shù)返回值(一般為白色)。填充1.填充模式和顏色設(shè)置setfillstyle()函數(shù)[格式]voidfarsetfillstyle(intpattern,intcolor);[功能]設(shè)置當(dāng)前填充模式和填充顏色。C語言圖形程序設(shè)計(jì)基礎(chǔ)第53頁/共96頁2023/1/1755[說明]

該函數(shù)用來設(shè)置當(dāng)前填充模式和填充顏色,以便用于填充一個(gè)指定的封閉區(qū)域。其中參數(shù)〈1〉pattern用于指定填充模式,取值有12中,如下表:符號(hào)值含義圖樣

(數(shù)字為值)EMPTY_FILL0用背景色填充SOLID_FILL1實(shí)填充1LINE_FILL2用線“—”填充2LTSLASH_FILL3用斜杠填充3SLASH_FILL4用粗斜杠填充4BKSLASH_FILL5用粗反斜杠填充5C語言圖形程序設(shè)計(jì)基礎(chǔ)第54頁/共96頁2023/1/1756LTBKSLASH_FILL6用反斜杠填充6HATCH_FILL7網(wǎng)絡(luò)線填充7XHATCH_FILL8斜網(wǎng)絡(luò)線填充8INTERLEAVE_FILL9隔點(diǎn)填充9WIDE_DOT_FILL10稀疏點(diǎn)填充10CLOSE_DOT_FILL11密集點(diǎn)填充11USER_FILL12用戶定義的模式〈2〉color是用于指定填充用的顏色,取值必須是當(dāng)前屏幕模式的有效值.C語言圖形程序設(shè)計(jì)基礎(chǔ)第55頁/共96頁2023/1/1757例9、畫一個(gè)二維和三維條形并填圖。

#include"graphics.h"#include"conio.h"voidmain(){inti,gdriver=DETECT,gmode;/*自動(dòng)搜索顯示器類型和顯示模式*/initgraph(&gdriver,&gmode,"D:\\TC");/*初始化圖形系統(tǒng)*/setfillstyle(SOLID_FILL,GREEN);bar(100,100,150,200);setfillstyle(SOLID_FILL,RED);bar3d(200,100,250,200,10,1);C語言圖形程序設(shè)計(jì)基礎(chǔ)第56頁/共96頁2023/1/1758setfillstyle(HATCH_FILL,RED);bar3d(300,100,350,200,10,1);setfillstyle(SLASH_FILL,GREEN);bar3d(400,100,450,200,10,1);setfillstyle(CLOSE_DOT_FILL,BLUE);bar3d(500,100,550,200,10,1);getch();closegraph();}C語言圖形程序設(shè)計(jì)基礎(chǔ)第57頁/共96頁2023/1/1759C語言圖形程序設(shè)計(jì)基礎(chǔ)第58頁/共96頁2023/1/1760setfillpattern()函數(shù)[格式]voidsetfillpattern(char*upattern,intcolor)[功能]設(shè)置用戶自定義填充模式。[說明]其中upattern指向用戶定義的著色模式數(shù)據(jù),即一指向8字節(jié)序列的指針。color代表用戶定義的添充顏色。例如:我們來看下面這個(gè)例子。

若填充模式為用戶定義USER_FILL,不能將setfillstyle的參數(shù)pattern的值取為12(USER_FILL),而用戶必須用8?jìng)€(gè)字節(jié)定義一個(gè)8X8點(diǎn)陣著色模式,再調(diào)用函數(shù)setfillpattern設(shè)置該模式.注:C語言圖形程序設(shè)計(jì)基礎(chǔ)第59頁/共96頁2023/1/1761例10設(shè)計(jì)如右圖所示的填充圖案。#include<graphics.h>main(){intgd=DETECT,gm;charp[8]={0x00,0x10,0x20,0x40,0x7e,0x40,0x20,0x10};initgraph(&gd,&gm,"D:\\TC");setbkcolor(15);

setfillpattern(p,2);bar(100,100,400,400);getch();closegraph();}0x000x100x200x400x7e0x400x200x10注:每個(gè)字節(jié)與該模式下的8個(gè)像素相對(duì)應(yīng)。一旦某模式字節(jié)中的一位被置為1,則對(duì)應(yīng)的像素被畫出來。C語言圖形程序設(shè)計(jì)基礎(chǔ)第60頁/共96頁2023/1/1762例11、演示預(yù)定義的12種著色模式。

#include<graphics.h>main(){intgd=DETECT,gm,h,w; initgraph(&gd,&gm,"D:\\TC");setbkcolor(15);for(h=0;h<3;h++)for(w=0;w<4;w++){setfillstyle(h*4+w,9);bar(10+150*w,50+150*h,110+150*w,150+150*h);}getch();closegraph();}C語言圖形程序設(shè)計(jì)基礎(chǔ)第61頁/共96頁2023/1/1763運(yùn)行結(jié)果—效果圖C語言圖形程序設(shè)計(jì)基礎(chǔ)第62頁/共96頁2023/1/17642.漫延填充floodfill()函數(shù)[格式]voidfarfloodfill(intx,inty,border);[功能]填充一塊有界的封閉區(qū)域。[說明]

該函數(shù)用來填充一塊有界的封閉區(qū)域,(x,y)是待填充的起點(diǎn),border指定填充區(qū)域邊界所使用顏色?!?〉若起點(diǎn)在封閉區(qū)域內(nèi),則區(qū)域內(nèi)部被填充;

〈2〉若起點(diǎn)在封閉區(qū)域外,則區(qū)域外部被填充;注:用floodfill填充時(shí),使用的是當(dāng)前填充模式的填充顏色,也可以通過setfillstyle來改變?cè)O(shè)置。C語言圖形程序設(shè)計(jì)基礎(chǔ)第63頁/共96頁2023/1/1765例如下面三種情況:.(x,y)填充情況(二).(x,y)setfillstyle(SOLID_FILL,4);circle(100,100,80);填充情況(三)circle(100,100,80);setfillstyle(SOLID_FILL,4);floodfill(100,100,0);circle(100,100,80);setfillstyle(SOLID_FILL,4);floodfill(20,20,0);填充情況(一)注意:上面三種填充程序的區(qū)別C語言圖形程序設(shè)計(jì)基礎(chǔ)第64頁/共96頁2023/1/1766例2.15填充一個(gè)封閉圓。#include"graphics.h"#include"conio.h"voidmain(){inti,gdriver=DETECT,gmode;/*自動(dòng)搜索顯示器類型和顯示模式*/initgraph(&gdriver,&gmode,"D:\\TC");/*初始化圖形系統(tǒng)*/setbkcolor(1);/*定背景色(藍(lán))*/setcolor(4);/*定畫筆色(紅)*/C語言圖形程序設(shè)計(jì)基礎(chǔ)第65頁/共96頁2023/1/1767circle(100,100,30); /*畫一個(gè)圓*/

setcolor(2);/*定畫筆色(綠)*/circle(200,200,80);/*畫一個(gè)圓*/setfillstyle(SLASH_FILL,14);/*定填充模式和填充色*/floodfill(100,100,4);/*填充一個(gè)封閉圓*/getch();closegraph();}執(zhí)行結(jié)果C語言圖形程序設(shè)計(jì)基礎(chǔ)第66頁/共96頁2023/1/1768為了在圖形模式下對(duì)文本進(jìn)行操作,TurboC提供了對(duì)圖形進(jìn)行字符串輸出,以及對(duì)輸出字符的字型大小和方位進(jìn)行控制等有關(guān)的文本輸出函數(shù)。

圖形模式下文本處理2.4.1文本輸出函數(shù)outtext()函數(shù)[格式]voidfarouttext(char*textstring);[功能]把一字符串輸出至屏幕當(dāng)前光標(biāo)位置。[說明]該函數(shù)在當(dāng)前位置上輸出一字符串。參數(shù)textstring是一個(gè)文本字符串。

注:若當(dāng)前方向是水平的,則光標(biāo)位置移動(dòng)量為該字符串的長(zhǎng)度,否則光標(biāo)位置不變。C語言圖形程序設(shè)計(jì)基礎(chǔ)第67頁/共96頁2023/1/1769例如:語句outtext(“thisisastring”);將在當(dāng)前位置輸出字符串。outtextxy()函數(shù)[格式]voidfarouttextxy(intx,inty,char*textstring);[功能]在屏幕指定位置上輸出一字符串。[說明]

該函數(shù)在指定位置(x,y)處輸出字符串textstring。例如:語句outtextxy(70,100,“thisisastring”);將在點(diǎn)(70,100)處輸出字符串thisisastring。

sprintf()函數(shù)[格式]sprintf(*str,*format,variable_list);C語言圖形程序設(shè)計(jì)基礎(chǔ)第68頁/共96頁2023/1/1770[功能]把要輸出信息寫入由str所指向的字符串中。[說明]由于前面兩個(gè)函數(shù)只能輸出字符串,若需要在圖形模式下輸出數(shù)值或其他類型數(shù)據(jù),利用sprintf()函數(shù)就可以解決這個(gè)問題。其中str是字符串,format是格式字符串,variable_list是變量列表.例如:charstr[80];sprintf(str,”%s%d%c”,”one”,2,3);執(zhí)行后,字符串的內(nèi)容為one23.

注:1.sprintf的原型在頭文件stdio中,因此它并不是一個(gè)圖形函數(shù),只是一個(gè)格式化輸出函數(shù),它的作用是產(chǎn)生含有多種類型數(shù)據(jù)的字符串。C語言圖形程序設(shè)計(jì)基礎(chǔ)第69頁/共96頁2023/1/17712.在圖形模式下并不直接使用該函數(shù),而是使用由它產(chǎn)生的結(jié)果,即字符串值,這個(gè)字符串中可以含有多種類型數(shù)據(jù),有了這樣的字符串,再用outtext和outtextxy輸出其內(nèi)容就能滿足各種需要.例2.16畫直線,并標(biāo)注起始點(diǎn)坐標(biāo)。#include"stdio.h"#include"graphics.h"#include"conio.h"voidmain(){charmsg[80],str[80];inti,gdriver=DETECT,gmode;

initgraph(&gdriver,&gmode,"D:\\TC");C語言圖形程序設(shè)計(jì)基礎(chǔ)第70頁/共96頁2023/1/1772moveto(20,30);sprintf(msg,"%d,%d",getx(),gety());outtextxy(20,30,msg);linerel(100,100);sprintf(msg,"%d,%d",getx(),gety());outtext(msg);sprintf(str,"%s%s%s%c%s","who","=","I",3,"you");outtextxy(200,200,str);getch();closegraph();}注:“%s%s%s%c%s”改為“%s,%s,%s,%c,%s”結(jié)果會(huì)如何?C語言圖形程序設(shè)計(jì)基礎(chǔ)第71頁/共96頁2023/1/17731.設(shè)置輸出文本字體、方向與字符大小在圖形模式下,提供了兩種向屏幕上寫字符的方法:〈1〉位映像字符,也稱點(diǎn)陣字符。位映像字符由8X8像素組成,每一位對(duì)應(yīng)一個(gè)像素,如果某一位為1,則相應(yīng)的像素將以當(dāng)前顏色顯示;若為0則相應(yīng)的像素被置為背景色.例如下圖為位映像字符A的展開圖。輸出文本的設(shè)置注:位映像字符是缺省方式,即在一般情況下,用C語言編寫的程序?qū)⒆詣?dòng)建立位映像字符。用C語言函數(shù)向屏幕輸出文本時(shí),都以位映像字符顯示。C語言圖形程序設(shè)計(jì)基礎(chǔ)第72頁/共96頁2023/1/1774〈2〉筆畫字符,也稱矢量字符。筆畫字符不是以位模式存儲(chǔ)的,每個(gè)字符被定義成一系列的線段或筆畫組合。筆畫字符可以靈活地改變其大小,而且不會(huì)降低其分辨率。C語言提供了4種不同筆畫字體,即小號(hào)字體、三倍字體、無襯線字體和黑體。每種筆畫字體都放在獨(dú)立字體文件中,如下表所示:文件名說明Goth.chr筆畫黑體Litt.chr筆畫小字體Sans.chr無襯線筆畫字體Trip.chr三倍筆畫字體注:使用筆畫字體,必須裝入字體文件,可通過settextstyle()函數(shù)來實(shí)現(xiàn)。C語言圖形程序設(shè)計(jì)基礎(chǔ)第73頁/共96頁2023/1/1775settextstyle()函數(shù)[格式]settextstyle(intfont,intdiretion,intcharsize);[功能]設(shè)置當(dāng)前輸出文本字體、顯示方向和字符大小。[說明]函數(shù)共有3個(gè)參數(shù),其含義如下:〈1〉:font是一個(gè)整型數(shù),用來指定所用的字體,取值如下表。符號(hào)常量值含義DEFAULT_FONT08X8點(diǎn)陣字符TRIPLEX_FONT1三倍筆畫字體SMALL_FONT2小號(hào)筆畫字體SAN_SERIF_FONT3無襯線筆畫字體GOTHIC_FONT4黑體筆畫字體C語言圖形程序設(shè)計(jì)基礎(chǔ)第74頁/共96頁2023/1/1776〈2〉direction是一個(gè)整型數(shù),用來指定文本輸出方向。其取值如下表:符號(hào)常量值含義HORIZ_DIR0從左到右輸出(缺?。¬ERT_DR1從上到下〈3〉charsize是一個(gè)整型數(shù),該參數(shù)實(shí)際上是一個(gè)因子,它表示8X8點(diǎn)陣字符的放大倍數(shù),即影響點(diǎn)陣字符,也影響筆畫字符(注:settextstyle()函數(shù)來規(guī)定字符大小,但對(duì)筆畫字符,字體只能在x,y方向上以相同倍數(shù)放大)。其取值如下表:C語言圖形程序設(shè)計(jì)基礎(chǔ)第75頁/共96頁2023/1/1777值或符號(hào)常量含義值或符號(hào)常量含義18X8點(diǎn)陣756X56點(diǎn)陣216X16點(diǎn)陣864X64點(diǎn)陣324X24點(diǎn)陣972X72點(diǎn)陣432X32點(diǎn)陣1080X80點(diǎn)陣540X40點(diǎn)陣USER_CHAR-SIZE(或O)用戶定義字符的大小648X48點(diǎn)陣參數(shù)charsize的取值C語言圖形程序設(shè)計(jì)基礎(chǔ)第76頁/共96頁2023/1/1778例2.17畫AAA,并放大。#include"graphics.h"#include"conio.h"voidmain(){charstr[80];inti,gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"D:\\TC");

setbkcolor(1);/*定背景色*/

setcolor(4);/*定畫筆色*/settextstyle(TRIPLEX_FONT,HORIZ_DIR,2);outtextxy(10,10,"AAAA");C語言圖形程序設(shè)計(jì)基礎(chǔ)第77頁/共96頁2023/1/1779settextstyle(TRIPLEX_FONT,HORIZ_DIR,7);setcolor(2);outtextxy(30,30,"AAAA");settextstyle(TRIPLEX_FONT,HORIZ_DIR,12);setcolor(3);outtextxy(120,120,"AAAA");

settextstyle(TRIPLEX_FONT,HORIZ_DIR,1);sprintf(str,"%s","-printf:AAAA-hugang^2004.4.8");outtextxy(300,300,str);getch();closegraph();}C語言圖形程序設(shè)計(jì)基礎(chǔ)第78頁/共96頁2023/1/17802.設(shè)置文本對(duì)齊方式settextjustify()函數(shù)[格式]voidfarsettextjustify(inthoriz,intvert);[功能]設(shè)置文本輸出在水平和垂直方向的輸出方式。[說明]參數(shù)horiz和vert是整型數(shù),其取值如下表:方向符號(hào)常量值功能當(dāng)前位置LEFT_TEXT0左對(duì)齊在左邊水平CENTER_TEXT1中間對(duì)齊在中部RIGHT_TEXT2右對(duì)齊在右邊BOTTOM_TEXT0下對(duì)齊在底部垂直CENTER_text1中間對(duì)齊在中部Top_text2上對(duì)齊在頂邊C語言圖形程序設(shè)計(jì)基礎(chǔ)第79頁/共96頁2023/1/1781注:其中參數(shù)horiz確定水平方向的對(duì)齊位置;參數(shù)vert確定垂直方向的對(duì)齊位置。例如:settextjustify(LEFT_TEXT,TOP_TEXT);所確定位置在文本字符串的左上角。在這以后,當(dāng)用函數(shù)outtextxy()輸出字符串時(shí),這個(gè)位置就對(duì)準(zhǔn)函數(shù)中的(x,y)位置,如下圖所示:

CENTER,CENTERCENTER,TOPRIGHT,TOPRIGHT,CENTERRIGHT,BOTTOMLEFT,BOTTOMLEFT,CENTERLEFT,TOPCENTER,BOTTOMC語言圖形程序設(shè)計(jì)基礎(chǔ)第80頁/共96頁2023/1/1782settextstyle()函數(shù)來規(guī)定字符大小,但對(duì)筆畫字體,字體只能在x,y方向上以相同倍數(shù)放大。TurboC提供了setusercharsize()函數(shù)對(duì)筆畫字體在x,y方向規(guī)定不同的放大系數(shù)。3.改變矢量字體寬度和高度setusercharsize()函數(shù)[格式]setusercharsize(intmultx,intdivx,int

multy,intdivy);[功能]設(shè)置用戶定義的筆畫字型放大系數(shù)。[說明]x,y方向的放大系數(shù)分別為multx/divx和multy/divy。調(diào)用該函數(shù)后,顯示在屏幕上的字型都以缺省值大小乘以multx/divx為字符寬,乘以multy/divy為其字符高。C語言圖形程序設(shè)計(jì)基礎(chǔ)第81頁/共96頁2023/1/1783注:這種方式只是在voidfarsettextstyle(intfont,intdiretion,intcharsize)函數(shù)中的charsize=0時(shí)才起作用.例2.18輸出Normal和Neuron。#include"graphics.h"#include"conio.h"voidmain(){charstr[80];intgdriver=DETECT,gmode;

initgraph(&gdriver,&gmode,"D:\\TC");

C語言圖形程序設(shè)計(jì)基礎(chǔ)第82頁/共96頁2023/1/1784setbkcolor(1);/*定背景色*/

setcolor(4);outtext("Normal");settextstyle(TRIPLEX_FONT,HORIZ_DIR,USER_CHAR_SIZE);setusercharsize(5,1,3,1);outtext("neuron");getch();restorecrtmode();closegraph();}說明:三倍筆畫字體、從左到右輸出、用戶自定義大小.C語言圖形程序設(shè)計(jì)基礎(chǔ)第83頁/共96頁2023/1/1785圖形存取處理在圖形模式下,圖形存取有著十分重要的作用,這是圖形動(dòng)畫的基礎(chǔ)。圖形存取的基本原理是:把屏幕上某個(gè)區(qū)域的信息存入一個(gè)緩沖區(qū),然后在另一個(gè)區(qū)域把它的內(nèi)容顯示出來。imagesize()函數(shù)[格式]unsignedfarimgaesize(intx1,inty1,intx2,inty2);[功能]檢測(cè)存儲(chǔ)某區(qū)域所需的內(nèi)存。[說明]1.該函數(shù)返回一個(gè)無符號(hào)整數(shù)值,它是存儲(chǔ)圖形所需要的字節(jié)數(shù)。2.5.1

檢測(cè)所需內(nèi)存C語言圖形程序設(shè)計(jì)基礎(chǔ)第84頁/共96頁2023/1/17862.參數(shù)x1,y1,x2,y2均為整數(shù),用來確定要存儲(chǔ)的屏幕區(qū)域。這個(gè)區(qū)域是一個(gè)矩形,左上角坐標(biāo)為(x1,y1),右下角坐標(biāo)為(x2,y2)。例如:執(zhí)行

unsignedsize;size=imagesize(10,10,100,100);則把存儲(chǔ)左上角為(10,10),右下角為(100,100)的矩形區(qū)域所需的內(nèi)存字節(jié)數(shù)存入變量size中。3.存儲(chǔ)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論