![C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)課件_第1頁(yè)](http://file4.renrendoc.com/view/2e8d30878b540b2e4c3af011fbf4dbe6/2e8d30878b540b2e4c3af011fbf4dbe61.gif)
![C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)課件_第2頁(yè)](http://file4.renrendoc.com/view/2e8d30878b540b2e4c3af011fbf4dbe6/2e8d30878b540b2e4c3af011fbf4dbe62.gif)
![C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)課件_第3頁(yè)](http://file4.renrendoc.com/view/2e8d30878b540b2e4c3af011fbf4dbe6/2e8d30878b540b2e4c3af011fbf4dbe63.gif)
![C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)課件_第4頁(yè)](http://file4.renrendoc.com/view/2e8d30878b540b2e4c3af011fbf4dbe6/2e8d30878b540b2e4c3af011fbf4dbe64.gif)
![C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)課件_第5頁(yè)](http://file4.renrendoc.com/view/2e8d30878b540b2e4c3af011fbf4dbe6/2e8d30878b540b2e4c3af011fbf4dbe65.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
計(jì)算機(jī)圖形學(xué)是一門(mén)實(shí)踐性很強(qiáng)的課程。通過(guò)程序設(shè)計(jì)來(lái)完成圖形的繪制,對(duì)深刻理解課程的內(nèi)容和相關(guān)概念非常重要。程序設(shè)計(jì)語(yǔ)言是進(jìn)行計(jì)算機(jī)繪圖的基礎(chǔ),現(xiàn)在大多數(shù)高級(jí)語(yǔ)言都具有基本繪圖功能。本章主要介紹用C語(yǔ)言進(jìn)行圖形程序設(shè)計(jì)的基本方法和C語(yǔ)言的圖形功能,使大家對(duì)C語(yǔ)言的圖形應(yīng)用有一個(gè)較深刻的理解。WIN-TC第三章C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/713.1、屏幕設(shè)置我們?cè)谄聊簧线M(jìn)行繪制圖形,一般要按以下幾個(gè)步驟執(zhí)行:(1)把屏幕設(shè)置為圖形模式;(2)選擇背景與顯示實(shí)體的顏色;(3)計(jì)算圖形顯示坐標(biāo);(4)調(diào)用繪圖語(yǔ)句繪制實(shí)體3.1.1、屏幕顯示模式與坐標(biāo)系1.文本模式與字符坐標(biāo)系
在屏幕上只能顯示字符的方式稱為文本模式。在文本模式下,屏幕上可以顯示的最小單位是字符。為了能在指定的位置顯示每個(gè)字符,C語(yǔ)言提供了字符坐標(biāo)系。
C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/72西安工程大學(xué)數(shù)學(xué)系字符坐標(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語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/73西安工程大學(xué)數(shù)學(xué)系在不同的顯示模式下,屏幕所顯示的字符數(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語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/75西安工程大學(xué)數(shù)學(xué)系2.圖形模式與點(diǎn)坐標(biāo)系
在屏幕上顯示圖形的方式稱為圖形模式。在圖形模式下,屏幕是由像素點(diǎn)組成的,像素點(diǎn)的多少?zèng)Q定了屏幕的分辨率。分辨率越高,顯示圖形越細(xì)致,質(zhì)量越好。
如右圖所示1.屏幕由許多像素點(diǎn)組成;2.圖形的顯示效果取決于分辨率的高低;C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/76西安工程大學(xué)數(shù)學(xué)系例如:CGA顯示器的分辨率為300X200,TVG顯示器的分辨率為1024X768,TVGA比CGA分率高。圖-2點(diǎn)坐標(biāo)系MaxxMaxy(0,0)注:點(diǎn)坐標(biāo)系坐標(biāo)值的范圍取決于所用的適配器/顯示分辨率C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)在圖形模式下,屏幕上每個(gè)像素的顯示位置用點(diǎn)坐標(biāo)來(lái)描述的。點(diǎn)坐標(biāo)系是以屏幕左上角為坐標(biāo)原點(diǎn)(0,0),水平方向?yàn)閄軸,自左向右;垂直方向?yàn)閅軸,自上向下。如下圖所示:2023/4/77西安工程大學(xué)數(shù)學(xué)系3.1.2、圖形驅(qū)動(dòng)程序與圖形模式1.圖形驅(qū)動(dòng)程序?qū)τ诓煌膱D形顯示器,其控制方式各有差異,因此要顯示圖形就需要先裝入相應(yīng)的圖形驅(qū)動(dòng)程序。C支持以下幾種圖形驅(qū)動(dòng)程序:
符號(hào)常量
數(shù)值符號(hào)常量
數(shù)值DETECT0IBM85146CGA1HERCMONO7MCGA2ATT4008EGA3VGA9EGA644PC327010EGAMONO5C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/79西安工程大學(xué)數(shù)學(xué)系2.圖形模式由于每種圖形顯示器都有幾種不同的圖形顯示模式,所以要顯示圖形,不但要先裝入相應(yīng)的驅(qū)動(dòng)程序,而且還要決定所用的顯示模式。C語(yǔ)言程序常采用的幾種圖形驅(qū)動(dòng)程序及相應(yīng)的模式驅(qū)動(dòng)程序(driver)圖形(gmode)等價(jià)值分辨(dpi)CGAC00320X200
CGACGAC11320X200CGAC22320X200CGAC33320X200CGAHI4640X200表2.2圖形驅(qū)動(dòng)程序及相應(yīng)的模式C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/710西安工程大學(xué)數(shù)學(xué)系驅(qū)動(dòng)程序(driver)圖形(gmode)等價(jià)值分辨(dpi)EGAEGAHI0640X200EGALO1640X350VGALO0640X200VGAVGAMED1640X350VGAHI2640X480注:1.不同的圖形驅(qū)動(dòng)程序有不同的圖形模式;2.同一圖形驅(qū)動(dòng)程序,也可能會(huì)有幾種圖形模式;C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/711西安工程大學(xué)數(shù)學(xué)系圖形系統(tǒng)初始化首先要調(diào)用initgraph()函數(shù),它通過(guò)從磁盤(pán)上裝入一個(gè)圖形驅(qū)動(dòng)程序來(lái)初始化圖形系統(tǒng),并將系統(tǒng)設(shè)置為圖形模式。
1.圖形系統(tǒng)的初始化圖形模式是有別于文本模式的一種計(jì)算機(jī)屏幕顯示模式。屏幕一般在默認(rèn)情況下為80列25行的文本模式,在文本模式下,所有的圖形函數(shù)均不能操作,因此在使用圖形函數(shù)繪圖之前,必須將屏幕顯示適配器設(shè)置為一種圖形模式,即為圖形初始化過(guò)程。C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/713西安工程大學(xué)數(shù)學(xué)系[功能]將圖形驅(qū)動(dòng)軟件裝入內(nèi)存,使屏幕顯示適配器設(shè)置為圖形模式,即圖形系統(tǒng)初始化;[說(shuō)明]1.gdriver是一個(gè)整型值,用來(lái)指定要裝入的圖形驅(qū)動(dòng)程序;該值在頭文件graphics.h中定義;2.gmode是一個(gè)整型值,用來(lái)設(shè)置圖形顯示模式。圖形顯示模式?jīng)Q定了顯示的分辨率和顯示的顏色的多少等;3.path是一個(gè)字符串,用來(lái)指明圖形驅(qū)動(dòng)程序所在的路徑.1.若驅(qū)動(dòng)程序就在用戶當(dāng)前目錄下,則path可為空字符串,否則應(yīng)給出具體路徑名。一般情況下,TurboC安裝在C盤(pán)的TC目錄中,則該路徑為:C:\TC,若寫(xiě)在參數(shù)中則為“C:\\TC”;2.前兩個(gè)參數(shù)實(shí)際上是整型指針,調(diào)用時(shí)應(yīng)加上地址運(yùn)算符“&”;注:initgraph()函數(shù)[格式]
voidfarinitgraph(int*gdriver,int*gmode,char*path);C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/714西安工程大學(xué)數(shù)學(xué)系(1)已知顯示器類型的圖形系統(tǒng)初始化。
如果已經(jīng)知道所用圖形顯示器的種類和要使用的圖形模式則圖形系統(tǒng)的初始化可用下面程序,例如:例1畫(huà)一實(shí)心矩形#include"graphics.h"main(){intgdriver,gmode;gdriver=CGA;/*設(shè)置顯示模式CGA*/gmode=CGAC0;/*選用CGA圖形模式*/initgraph(&gdriver,&gmode,“D:\\TC");/*初始化圖形系統(tǒng)*/C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/715西安工程大學(xué)數(shù)學(xué)系[格式]voidfardetectgraph(int*gdriver,int*gmode);[功能]在計(jì)算機(jī)有圖形適配器的情況下,確定圖形適配器的類型;[說(shuō)明]1.若系統(tǒng)有圖形適配器,則把gdriver指的變量設(shè)置為適合于適配器的圖形驅(qū)動(dòng)程序的代碼,并把gmode所指的變量設(shè)置為適配器所能支持的最高分辨率。2.若系統(tǒng)無(wú)圖形適配器,則gdriver所指的變量為-2.(2)不知顯示器類型的圖形系統(tǒng)初始化。若在編寫(xiě)程序過(guò)程中,不知道當(dāng)前系統(tǒng)屏幕硬件的類型或編寫(xiě)的程序要用于不同的圖形顯示器,這就要求所編程序能知當(dāng)前圖形顯示器的代碼,TurboC供了一個(gè)對(duì)圖形顯示器硬件測(cè)試的函數(shù)detectgraph()。detectgraph()函數(shù)C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/717西安工程大學(xué)數(shù)學(xué)系例2、測(cè)試硬件顯示模式和繪制圖形#include"graphics.h"main(){intgdriver,gmode;detectgraph(&gdriver,&gmode);
/*測(cè)試結(jié)果存放于gdriver,gmode中*/if(gdriver<0){printf("thereisnotgraphicsdisplayer\n");exit(1);}/*無(wú)圖形顯示模式時(shí),顯示信息,停止程序*/
printf("detectgraphicsdriveris#%d,modeis#%d\n",gdriver,gmode);/*顯示硬件測(cè)試結(jié)果*/
getch();/*等待按一鍵結(jié)束*/C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/718西安工程大學(xué)數(shù)學(xué)系initgraph(&gdriver,&gmode,"c:\\tc");/*初始化圖形系統(tǒng)*/bar3d(10,20,50,80,10,1);getch();/*等待按一鍵結(jié)束*/closegraph();/*關(guān)閉圖形系統(tǒng),回到文本模式*/return(0);}C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/719西安工程大學(xué)數(shù)學(xué)系
intgdriver=DETECT,gmode;
/*自動(dòng)搜索顯示器類型和顯示模式*/
initgraph(&gdriver,&gmode,“C:\\TC");
/*初始化圖形系統(tǒng)*/
bar3d(10,20,50,80,10,1);
/*畫(huà)一三維立體有頂矩形*/
getch();
/*等待按一鍵結(jié)束*/closegraph();
/*關(guān)閉圖形系統(tǒng),回到文本模式*/return(0);}C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/721西安工程大學(xué)數(shù)學(xué)系2.圖形系統(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)閉圖形模式。[說(shuō)明]函數(shù)closegraph()用來(lái)關(guān)閉圖形模式,釋放用于保存圖形驅(qū)動(dòng)程序和字體所占用的內(nèi)存空間。當(dāng)一個(gè)程序需要從圖形模式下退出,且回到文本模式下繼續(xù)運(yùn)行時(shí)可調(diào)用該函數(shù)。注:所有有關(guān)圖形顯示的程序一定是在initgraph()和closegraph()之間。C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/722西安工程大學(xué)數(shù)學(xué)系3.圖形模式的控制
為了對(duì)圖形模式進(jìn)行控制,即
1.從圖形模式轉(zhuǎn)換成文本模式,或從文本模式轉(zhuǎn)換成圖形模式;
2.設(shè)置驅(qū)動(dòng)器有效模式或讀取當(dāng)前圖形模式和范圍。
TurboC都提供了相關(guān)的函數(shù)來(lái)實(shí)現(xiàn)其控制。1.getgraphmode()函數(shù)[格式]voidfargetgraphmode(void);[功能]返回當(dāng)前圖形模式值,其返回值如前表所示。C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/723西安工程大學(xué)數(shù)學(xué)系注:通過(guò)調(diào)用以上函數(shù),可實(shí)現(xiàn)使顯示器暫時(shí)離開(kāi)圖形模式進(jìn)入文本模式,進(jìn)行文本輸出,然后不經(jīng)過(guò)initgraph()函數(shù)再返回圖形模式的功能.4.getmoderange()函數(shù)[格式]voidfargetmoderange(int
driver,int*lomode,int*himode);[功能]獲取圖形驅(qū)動(dòng)器可使用的模式范圍。[說(shuō)明]該函數(shù)可以確定由driver所指定圖形驅(qū)動(dòng)器能夠支持的最低和最高模式,并將這些值放在由lomode和himode所指向的變量中.C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/725西安工程大學(xué)數(shù)學(xué)系例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語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/726西安工程大學(xué)數(shù)學(xué)系[說(shuō)明]該函數(shù)把當(dāng)前窗口中的當(dāng)前光標(biāo)位置(CP)移到所需的(x,y)位置。注:不是畫(huà)線。例如:moveto(100,100)表示把當(dāng)前光標(biāo)移到點(diǎn)(100,100)位置上。moverel()函數(shù)[格式]voidfarmoverel(int
deltax,int
deltay);[功能]以增量方式移動(dòng)當(dāng)前光標(biāo)。[說(shuō)明]此函數(shù)把光標(biāo)從當(dāng)前位置(CP)開(kāi)始,在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語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/729西安工程大學(xué)數(shù)學(xué)系注: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語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/730西安工程大學(xué)數(shù)學(xué)系例如:語(yǔ)句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語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/731西安工程大學(xué)數(shù)學(xué)系例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語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/732西安工程大學(xué)數(shù)學(xué)系#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語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/733西安工程大學(xué)數(shù)學(xué)系3.2圖形顏色設(shè)置
在繪圖時(shí),往往要求配置一定的顏色加以渲染.在繪圖系統(tǒng)中顏色分為前景色和背景色。前景色是指構(gòu)成字符和圖形點(diǎn)的顏色,而背景色是指整個(gè)顯示屏幕的顏色。C語(yǔ)言提供了多個(gè)顏色控制函數(shù)來(lái)設(shè)置前景色、背景色等。C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/734西安工程大學(xué)數(shù)學(xué)系1.設(shè)置當(dāng)前背景色setbkcolor()函數(shù)[格式]voidfarsetbkcolor(intcolor);[功能]設(shè)置當(dāng)前背景顏色。[說(shuō)明]
該函數(shù)將背景色設(shè)置成color
所指定的顏色值。參數(shù)color可以用名字,也可以用數(shù)字,它們的對(duì)應(yīng)關(guān)系在graphics.h中定義。如下表:符號(hào)常量數(shù)值含義BLACK0黑色BLUE1藍(lán)色GREEN2綠色Color取值可以由0到15C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/735西安工程大學(xué)數(shù)學(xué)系2.設(shè)置當(dāng)前畫(huà)圖顏色setcolor()函數(shù)[格式]voidfarsetcolor(intcolor);[功能]設(shè)置當(dāng)前畫(huà)圖顏色。[說(shuō)明]
該函數(shù)把當(dāng)前畫(huà)圖顏色設(shè)置成color
所指定的顏色值,即畫(huà)筆的顏色。參數(shù)color可以用名字,也可以用數(shù)字,但當(dāng)缺省時(shí),默認(rèn)是白色。C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)3.獲取顏色信息getbkcolor()函數(shù)[格式]intfargetbkcolor(void);[功能]讀取當(dāng)前背景顏色。[說(shuō)明]
該函數(shù)返回當(dāng)前背景顏色。2023/4/736西安工程大學(xué)數(shù)學(xué)系3.獲取顏色信息getcolor()函數(shù)[格式]intfargetcolor(void);[功能]讀取當(dāng)前畫(huà)圖顏色。[說(shuō)明]
該函數(shù)返回當(dāng)前畫(huà)筆顏色。C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)3.3畫(huà)點(diǎn),畫(huà)線putpixel()函數(shù)[格式]voidfarputpixel(int
x,int
y,intcolor);[功能]在點(diǎn)(x,y)處畫(huà)一規(guī)定顏色的點(diǎn)。[說(shuō)明]
該函數(shù)把color
所指定的顏色寫(xiě)到(x,y)處的像素上。例如:語(yǔ)句putpixel(10,20,GREEN)使點(diǎn)(10,20)的像素成為綠色。2023/4/737西安工程大學(xué)數(shù)學(xué)系getpixel()函數(shù)[格式]intfargetpixel(int
x,inty);[功能]讀取點(diǎn)(x,y)的顏色。[說(shuō)明]
該函數(shù)返回指定點(diǎn)(x,y)位置上的像素顏色值。C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/738西安工程大學(xué)數(shù)學(xué)系#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、在不同位置畫(huà)點(diǎn)C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/739西安工程大學(xué)數(shù)學(xué)系
line()函數(shù)[格式]voidfarline(intx1,inty1,intx2,inty2);[功能]指定兩點(diǎn)間畫(huà)一直線。[說(shuō)明]該函數(shù)用當(dāng)前顏色從點(diǎn)(x1,y1)到點(diǎn)(x2,y2)畫(huà)一條直線,當(dāng)前位置(CP)不變。
直線類函數(shù)
lineto()函數(shù)[格式]voidfarlineto(int
x,inty);[功能]從當(dāng)前位置到點(diǎn)(x,y)畫(huà)一條直線。[說(shuō)明]并把當(dāng)前位置(CP)定位在點(diǎn)(x,y)處。
C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/740西安工程大學(xué)數(shù)學(xué)系
linerel()函數(shù)[格式]voidfarlinerel(int
deltax,int
deltay);[功能]從當(dāng)前位置相對(duì)CP位置在X方向增大deltax,在Y方向增大deltay處畫(huà)一直線。線的特性設(shè)定我們?cè)谟卯?huà)線函數(shù)畫(huà)線時(shí),其默認(rèn)值均屬于一個(gè)像素點(diǎn)寬度的實(shí)線。但往往有時(shí)需要改變線型和線的寬度,C語(yǔ)言提供了一些可以改變線型和線寬的函數(shù),具體如下:C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/741西安工程大學(xué)數(shù)學(xué)系setlinestyle()函數(shù)[格式]voidfarsetlinestyle(int
linestyle,unsigned
pattern,intwidth);[功能]改變線型和線寬。[說(shuō)明]
該函數(shù)所用的3個(gè)參數(shù)具體含義為:〈1〉linestyle為整型值,用來(lái)定義所畫(huà)直線類型,如下表所示:C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/742西安工程大學(xué)數(shù)學(xué)系代號(hào)名代號(hào)說(shuō)明SOLID_LINE0實(shí)線DOTTEN_LINE1點(diǎn)線CENTER_LINE2中心線DASHED_LINE3虛線USERBIT_LINE4用戶定義的線型注:表中前4種為系統(tǒng)預(yù)定的類型,第5種為用戶自定義類型〈2〉pattern為無(wú)符號(hào)整型數(shù)。該參數(shù)在需要用戶自定義線型時(shí)才使用,若是使用前四種系統(tǒng)預(yù)定義的線型,則該參數(shù)可取0值。C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/743西安工程大學(xué)數(shù)學(xué)系〈3〉width為整型數(shù)。主要用來(lái)指定所畫(huà)直線的粗細(xì),以像素為單位,分兩種情況,如下表所示:符號(hào)常量值含義NORM_WIDTH11個(gè)像素寬(缺?。㏕HICK_WIDTH33個(gè)像素寬注:通過(guò)上述3個(gè)參數(shù)的不同組合,可以根據(jù)需要畫(huà)出不同類型、不用粗細(xì)的直線。C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/744西安工程大學(xué)數(shù)學(xué)系例如:從點(diǎn)(10,20)到(150,70)畫(huà)一條紅色的點(diǎn)劃線可用下面的語(yǔ)句:
setcolor(RED);setlinestyle(DASHED_LINE,0,THICK_WIDTH);line(10,10,150,100);注意:當(dāng)函數(shù)setlinestyle的第一個(gè)參數(shù)為USERBIT_LINE(或4)時(shí),用戶可以自己定義直線類型。此時(shí)第三個(gè)參數(shù)意義不變而pattern才變得有意義,直線的類型由pattern來(lái)定義,該參數(shù)是一個(gè)16位二進(jìn)制碼,每一位(bit)表示一個(gè)像素。C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/745西安工程大學(xué)數(shù)學(xué)系若某一位置為1時(shí)表示直線上相應(yīng)位置以當(dāng)前顏色顯示;若某一位置為0時(shí),則其對(duì)應(yīng)像素不顯示或不改變?cè)瓉?lái)的顏色;例如:
1.1111111111111111
表示16位全置1,因此可畫(huà)一條16個(gè)像素的點(diǎn)實(shí)線。2.1010101010101010
表示隔一位置1,因此可畫(huà)一條16個(gè)像素的點(diǎn)虛線。但:在實(shí)際編寫(xiě)程序時(shí),一般要把16位二進(jìn)制數(shù)轉(zhuǎn)換為4位十六進(jìn)制數(shù),每4位二進(jìn)制數(shù)轉(zhuǎn)換為1位十六進(jìn)制數(shù)。例如1111111111111111
FFFF。函數(shù)調(diào)用方法為:setlinestyle(4,0xFFFF,1);
可定義各種線型。C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/746西安工程大學(xué)數(shù)學(xué)系
在圖形模式下主要是繪制圖形,為了有效地對(duì)圖形進(jìn)行操作,TurboC提供了圖形屏幕、圖形窗口的處理功能,即在圖形模式下開(kāi)設(shè)“窗口”(又稱為視圖區(qū)),并對(duì)屏幕和圖形進(jìn)行處理。3.4屏幕窗口操作1.圖形屏幕處理cleardevice()函數(shù)[格式]voidfarcleardevice(void);[功能]清除整個(gè)圖形屏幕(但保留底色),并把當(dāng)前光標(biāo)位置(CP)重新設(shè)置為(0,0)。C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/747西安工程大學(xué)數(shù)學(xué)系setactivepage()函數(shù)[格式]voidfarsetactivepage(intpage);[功能]設(shè)置圖形輸出活動(dòng)頁(yè)。[說(shuō)明]
該函數(shù)確定接受圖形函數(shù)所輸出的活動(dòng)頁(yè),缺省值為屏幕顯示0頁(yè)。保存顯示在屏幕上信息的RAM稱為頁(yè)(Page)。例如:語(yǔ)句setactivepage(1)表示設(shè)置第1頁(yè)為活動(dòng)頁(yè)。setvisualpage()函數(shù)[格式]voidfarsetvisualpage(intpage);[功能]該函數(shù)顯示Page所指定的可見(jiàn)圖形頁(yè)。例如:語(yǔ)句setvisualpage(1)表示選擇顯示第1頁(yè)。C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/748西安工程大學(xué)數(shù)學(xué)系#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語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/749西安工程大學(xué)數(shù)學(xué)系setactivepage(1);/*設(shè)置圖形輸出活動(dòng)頁(yè)為1*/circle(150,130,80);/*畫(huà)一個(gè)圓*/setactivepage(0);/*設(shè)置圖形活動(dòng)頁(yè)為0*/rectangle(40,160,90,180);/*畫(huà)一個(gè)矩形*/getch();setvisualpage(1);/*設(shè)置可見(jiàn)圖形1頁(yè)*/getch();setvisualpage(0);
/*設(shè)置可見(jiàn)圖形0頁(yè)*/getch();closegraph();
/*關(guān)閉圖形系統(tǒng)*/}C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/750西安工程大學(xué)數(shù)學(xué)系C語(yǔ)言提供了圖形窗口處理功能,并可以在屏幕某處設(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語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/751西安工程大學(xué)數(shù)學(xué)系若clipflag為1,則超出窗口的輸出部分自動(dòng)剪裁掉;若clipflag為0,則超出圖形窗口之外的部分不被剪裁掉;setviewport()函數(shù)[格式]voidfarsetviewport(int
left,int
top,intright,intbottom,int
clipflag);[功能]設(shè)置圖形窗口。[說(shuō)明]
該函數(shù)建立一個(gè)新的圖形窗口,窗口大小用左上角坐標(biāo)(left,top)與右下角坐(right,bottom)來(lái)定義。C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/752西安工程大學(xué)數(shù)學(xué)系#include"graphics.h"#include"conio.h"voidmain(){
intgdriver=CGA,gmode=0;/*設(shè)置圖形模式*/initgraph(&gdriver,&gmode,"");
/*初始化圖形系統(tǒng)*/rectangle(30,25,80,80);
/*畫(huà)一矩形*/setviewport(30,25,80,80,0);
/*設(shè)置窗口,其大小與前面所畫(huà)圖形,窗口之外不剪裁*/line(0,0,100,150);
/*畫(huà)直線*/例8、窗口設(shè)置與清除作用
C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/753西安工程大學(xué)數(shù)學(xué)系getch();clearviewport();
/*清除窗口*/getch();cleardevice();
/*清屏*/getch();setviewport(20,15,80,80,1);/*重置窗口,窗口之外裁剪*/rectangle(0,0,60,65);
/*畫(huà)一矩形*/line(0,0,100,150);
/*畫(huà)直線*/getch();closegraph();/*關(guān)閉圖形系統(tǒng),回到文本模式*/}C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/754西安工程大學(xué)數(shù)學(xué)系為了能按照一定的要求對(duì)圖形進(jìn)行填充,通常應(yīng)規(guī)定填充的模式和顏色。圖形填充時(shí),使用的是當(dāng)前模式和顏色;若沒(méi)有設(shè)置填充模式和顏色,則填充時(shí)使用缺省值。缺省填充模式為SOLID_FILL,填充顏色為函數(shù)返回值(一般為白色)。
3.5圖形填充1.填充模式和顏色設(shè)置setfillstyle()函數(shù)[格式]voidfarsetfillstyle(int
pattern,intcolor);[功能]設(shè)置當(dāng)前填充模式和填充顏色。C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/755西安工程大學(xué)數(shù)學(xué)系[說(shuō)明]
該函數(shù)用來(lái)設(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語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/756西安工程大學(xué)數(shù)學(xué)系LTBKSLASH_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語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/757西安工程大學(xué)數(shù)學(xué)系例9、畫(huà)一個(gè)二維和三維條形并填圖。
#include"graphics.h"#include"conio.h"voidmain(){int
i,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語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/758西安工程大學(xué)數(shù)學(xué)系setfillstyle(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語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/759西安工程大學(xué)數(shù)學(xué)系C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/760西安工程大學(xué)數(shù)學(xué)系setfillpattern()函數(shù)[格式]voidsetfillpattern(char*upattern,intcolor)[功能]設(shè)置用戶自定義填充模式。[說(shuō)明]其中upattern指向用戶定義的著色模式數(shù)據(jù),即一指向8字節(jié)序列的指針。color代表用戶定義的添充顏色。例如:我們來(lái)看下面這個(gè)例子。
若填充模式為用戶定義USER_FILL,不能將setfillstyle的參數(shù)pattern的值取為12(USER_FILL),而用戶必須用8?jìng)€(gè)字節(jié)定義一個(gè)8X8點(diǎn)陣著色模式,再調(diào)用函數(shù)setfillpattern設(shè)置該模式.注:C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/761西安工程大學(xué)數(shù)學(xué)系例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)的像素被畫(huà)出來(lái)。C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/762西安工程大學(xué)數(shù)學(xué)系例11、演示預(yù)定義的12種著色模式。
#include<graphics.h>main(){int
gd=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語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/763西安工程大學(xué)數(shù)學(xué)系運(yùn)行結(jié)果—效果圖C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/764西安工程大學(xué)數(shù)學(xué)系2.漫延填充floodfill()函數(shù)[格式]voidfarfloodfill(int
x,inty,border);[功能]填充一塊有界的封閉區(qū)域。[說(shuō)明]
該函數(shù)用來(lái)填充一塊有界的封閉區(qū)域,(x,y)是待填充的起點(diǎn),border指定填充區(qū)域邊界所使用顏色?!?〉若起點(diǎn)在封閉區(qū)域內(nèi),則區(qū)域內(nèi)部被填充;
〈2〉若起點(diǎn)在封閉區(qū)域外,則區(qū)域外部被填充;注:用floodfill填充時(shí),使用的是當(dāng)前填充模式的填充顏色,也可以通過(guò)setfillstyle來(lái)改變?cè)O(shè)置。C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/765西安工程大學(xué)數(shù)學(xué)系例如下面三種情況:.(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語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/766西安工程大學(xué)數(shù)學(xué)系例2.15填充一個(gè)封閉圓。#include"graphics.h"#include"conio.h"voidmain(){
int
i,gdriver=DETECT,gmode;/*自動(dòng)搜索顯示器類型和顯示模式*/
initgraph(&gdriver,&gmode,"D:\\TC");/*初始化圖形系統(tǒng)*/setbkcolor(1);/*定背景色(藍(lán))*/setcolor(4);/*定畫(huà)筆色(紅)*/C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/767西安工程大學(xué)數(shù)學(xué)系circle(100,100,30); /*畫(huà)一個(gè)圓*/
setcolor(2);/*定畫(huà)筆色(綠)*/circle(200,200,80);/*畫(huà)一個(gè)圓*/setfillstyle(SLASH_FILL,14);/*定填充模式和填充色*/floodfill(100,100,4);/*填充一個(gè)封閉圓*/getch();closegraph();}執(zhí)行結(jié)果C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/768西安工程大學(xué)數(shù)學(xué)系為了在圖形模式下對(duì)文本進(jìn)行操作,TurboC提供了對(duì)圖形進(jìn)行字符串輸出,以及對(duì)輸出字符的字型大小和方位進(jìn)行控制等有關(guān)的文本輸出函數(shù)。3.6圖形模式下文本處理1文本輸出函數(shù)outtext()函數(shù)[格式]voidfarouttext(char*textstring);[功能]把一字符串輸出至屏幕當(dāng)前光標(biāo)位置。[說(shuō)明]該函數(shù)在當(dāng)前位置上輸出一字符串。參數(shù)textstring
是一個(gè)文本字符串。
注:若當(dāng)前方向是水平的,則光標(biāo)位置移動(dòng)量為該字符串的長(zhǎng)度,否則光標(biāo)位置不變。C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/769西安工程大學(xué)數(shù)學(xué)系例如:語(yǔ)句outtext(“thisisastring”);將在當(dāng)前位置輸出字符串。outtextxy()函數(shù)[格式]voidfarouttextxy(int
x,inty,char*textstring);[功能]在屏幕指定位置上輸出一字符串。[說(shuō)明]
該函數(shù)在指定位置(x,y)處輸出字符串textstring
。例如:語(yǔ)句outtextxy(70,100,“thisisastring”);將在點(diǎn)(70,100)處輸出字符串thisisastring
。
sprintf()函數(shù)[格式]sprintf(*str,*format,variable_list);C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/770西安工程大學(xué)數(shù)學(xué)系[功能]把要輸出信息寫(xiě)入由str所指向的字符串中。[說(shuō)明]由于前面兩個(gè)函數(shù)只能輸出字符串,若需要在圖形模式下輸出數(shù)值或其他類型數(shù)據(jù),利用sprintf()函數(shù)就可以解決這個(gè)問(wèn)題。其中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語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/771西安工程大學(xué)數(shù)學(xué)系2.在圖形模式下并不直接使用該函數(shù),而是使用由它產(chǎn)生的結(jié)果,即字符串值,這個(gè)字符串中可以含有多種類型數(shù)據(jù),有了這樣的字符串,再用outtext和outtextxy輸出其內(nèi)容就能滿足各種需要.例2.16畫(huà)直線,并標(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語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/772西安工程大學(xué)數(shù)學(xué)系moveto(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語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/773西安工程大學(xué)數(shù)學(xué)系1.設(shè)置輸出文本字體、方向與字符大小在圖形模式下,提供了兩種向屏幕上寫(xiě)字符的方法:〈1〉位映像字符,也稱點(diǎn)陣字符。位映像字符由8X8像素組成,每一位對(duì)應(yīng)一個(gè)像素,如果某一位為1,則相應(yīng)的像素將以當(dāng)前顏色顯示;若為0則相應(yīng)的像素被置為背景色.例如下圖為位映像字符A的展開(kāi)圖。輸出文本的設(shè)置注:位映像字符是缺省方式,即在一般情況下,用C語(yǔ)言編寫(xiě)的程序?qū)⒆詣?dòng)建立位映像字符。用C語(yǔ)言函數(shù)向屏幕輸出文本時(shí),都以位映像字符顯示。C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/774西安工程大學(xué)數(shù)學(xué)系〈2〉筆畫(huà)字符,也稱矢量字符。筆畫(huà)字符不是以位模式存儲(chǔ)的,每個(gè)字符被定義成一系列的線段或筆畫(huà)組合。筆畫(huà)字符可以靈活地改變其大小,而且不會(huì)降低其分辨率。C語(yǔ)言提供了4種不同筆畫(huà)字體,即小號(hào)字體、三倍字體、無(wú)襯線字體和黑體。每種筆畫(huà)字體都放在獨(dú)立字體文件中,如下表所示:文件名說(shuō)明Goth.chr筆畫(huà)黑體Litt.chr筆畫(huà)小字體Sans.chr無(wú)襯線筆畫(huà)字體Trip.chr三倍筆畫(huà)字體注:使用筆畫(huà)字體,必須裝入字體文件,可通過(guò)settextstyle()函數(shù)來(lái)實(shí)現(xiàn)。C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/775西安工程大學(xué)數(shù)學(xué)系settextstyle()函數(shù)[格式]settextstyle(int
font,int
diretion,int
charsize);[功能]設(shè)置當(dāng)前輸出文本字體、顯示方向和字符大小。[說(shuō)明]函數(shù)共有3個(gè)參數(shù),其含義如下:〈1〉:font是一個(gè)整型數(shù),用來(lái)指定所用的字體,取值如下表。符號(hào)常量值含義DEFAULT_FONT08X8點(diǎn)陣字符TRIPLEX_FONT1三倍筆畫(huà)字體SMALL_FONT2小號(hào)筆畫(huà)字體SAN_SERIF_FONT3無(wú)襯線筆畫(huà)字體GOTHIC_FONT4黑體筆畫(huà)字體C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/776西安工程大學(xué)數(shù)學(xué)系〈2〉direction是一個(gè)整型數(shù),用來(lái)指定文本輸出方向。其取值如下表:符號(hào)常量值含義HORIZ_DIR0從左到右輸出(缺?。¬ERT_DR1從上到下〈3〉charsize是一個(gè)整型數(shù),該參數(shù)實(shí)際上是一個(gè)因子,它表示8X8點(diǎn)陣字符的放大倍數(shù),即影響點(diǎn)陣字符,也影響筆畫(huà)字符(注:settextstyle()函數(shù)來(lái)規(guī)定字符大小,但對(duì)筆畫(huà)字符,字體只能在x,y方向上以相同倍數(shù)放大)。其取值如下表:C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/777西安工程大學(xué)數(shù)學(xué)系值或符號(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語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/778西安工程大學(xué)數(shù)學(xué)系例2.17畫(huà)AAA,并放大。#include"graphics.h"#include"conio.h"voidmain(){charstr[80];inti,gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"D:\\TC");
setbkcolor(1);/*定背景色*/
setcolor(4);/*定畫(huà)筆色*/settextstyle(TRIPLEX_FONT,HORIZ_DIR,2);outtextxy(10,10,"AAAA");C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/779西安工程大學(xué)數(shù)學(xué)系settextstyle(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-2004.4.8");outtextxy(300,300,str);getch();closegraph();}C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/780西安工程大學(xué)數(shù)學(xué)系2.設(shè)置文本對(duì)齊方式settextjustify()函數(shù)[格式]voidfarsettextjustify(int
horiz,int
vert);[功能]設(shè)置文本輸出在水平和垂直方向的輸出方式。[說(shuō)明]
參數(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語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/781西安工程大學(xué)數(shù)學(xué)系注:其中參數(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語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/782西安工程大學(xué)數(shù)學(xué)系settextstyle()函數(shù)來(lái)規(guī)定字符大小,但對(duì)筆畫(huà)字體,字體只能在x,y方向上以相同倍數(shù)放大。TurboC提供了setusercharsize()函數(shù)對(duì)筆畫(huà)字體在x,y方向規(guī)定不同的放大系數(shù)。3.改變矢量字體寬度和高度setusercharsize()函數(shù)[格式]setusercharsize(int
multx,int
divx,int
multy,int
divy);[功能]設(shè)置用戶定義的筆畫(huà)字型放大系數(shù)。[說(shuō)明]x,y方向的放大系數(shù)分別為multx/divx和multy/divy。
調(diào)用該函數(shù)后,顯示在屏幕上的字型都以缺省值大小乘以multx/divx為字符寬,乘以multy/divy為其字符高。C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/783西安工程大學(xué)數(shù)學(xué)系注:這種方式只是在voidfarsettextstyle(int
font,int
diretion,int
charsize)函數(shù)中的charsize=0時(shí)才起作用.例2.18輸出Normal和Neuron
。#include"graphics.h"#include"conio.h"voidmain(){charstr[80];
int
gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"D:\\TC");
C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/784西安工程大學(xué)數(shù)學(xué)系setbkcolor(1);/*定背景色*/
setcolor(4);outtext("Normal");settextstyle(TRIPLEX_FONT,HORIZ_DIR,USER_CHAR_SIZE);setusercharsize(5,1,3,1);outtext("neuron");getch();restorecrtmode();closegraph();}說(shuō)明:三倍筆畫(huà)字體、從左到右輸出、用戶自定義大小.C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/785西安工程大學(xué)數(shù)學(xué)系3.7圖形存取處理在圖形模式下,圖形存取有著十分重要的作用,這是圖形動(dòng)畫(huà)的基礎(chǔ)。圖形存取的基本原理是:把屏幕上某個(gè)區(qū)域的信息存入一個(gè)緩沖區(qū),然后在另一個(gè)區(qū)域把它的內(nèi)容顯示出來(lái)。imagesize()函數(shù)[格式]unsignedfarimgaesize(intx1,inty1,intx2,inty2);[功能]檢測(cè)存儲(chǔ)某區(qū)域所需的內(nèi)存。[說(shuō)明]1.該函數(shù)返回一個(gè)無(wú)符號(hào)整數(shù)值,它是存儲(chǔ)圖形所需要的字節(jié)數(shù)。1
.檢測(cè)所需內(nèi)存C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/786西安工程大學(xué)數(shù)學(xué)系
[說(shuō)明]
2.參數(shù)x1,y1,x2,y2均為整數(shù),用來(lái)確定要存儲(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中。
[說(shuō)明]
3.存儲(chǔ)屏幕區(qū)域所需的字節(jié)數(shù)最多不能超過(guò)64KB個(gè)字節(jié),否則imagesize
返回的值為-1(0xFFFF),即圖形存取限制在64KB字節(jié)之內(nèi)。C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/787西安工程大學(xué)數(shù)學(xué)系getimage()函數(shù)[格式]voidfargetimgae(intx1,inty1,intx2,inty2,void*bitmap);[功能]將指定區(qū)域的圖形從屏幕拷貝到內(nèi)存區(qū)域。[說(shuō)明]1.要復(fù)制的屏幕區(qū)域應(yīng)該由左上角坐標(biāo)(x1,y1)和右下角坐標(biāo)(x2,y2)給出,它應(yīng)當(dāng)與imagesize函數(shù)中的參數(shù)相同。2.bitmap是一個(gè)void類型指針,需要復(fù)制的屏幕區(qū)域?qū)⒈4嬖谟伤赶虻臄?shù)組中。2.把圖形存入內(nèi)存C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/788西安工程大學(xué)數(shù)學(xué)系例如:void*w;unsignedsize;size=imagesize(10,10,100,100);w=malloc(size);getimage(10,10,100,100,w);注:Malloc()函數(shù)的作用是取得指向左上角(10,10),右下角(100,100)矩形區(qū)域的地址指針。3.bitmap指向位圖象在存儲(chǔ)區(qū)中存放的區(qū)域,該區(qū)域的頭兩個(gè)字節(jié)用于存放矩形的高和寬,其余部分存放圖形本身。C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/789西安工程大學(xué)數(shù)學(xué)系3.從內(nèi)存復(fù)制圖形到屏幕putimage()函數(shù)[格式]voidfarputimgae(int
x,inty,void*bitmap,intop);[功能]將getimage()函數(shù)保存的圖形重新送回屏幕。[說(shuō)明]1.參數(shù)(x,y)是恢復(fù)顯示圖形左上角的位置;2.bitmap是指向void類型的指針,它指向用
getimage()函數(shù)復(fù)制的數(shù)組;3.參數(shù)op是一個(gè)整型數(shù),指定圖形復(fù)制到屏幕上的顯示模式其取值如下表所示:
C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/790西安工程大學(xué)數(shù)學(xué)系符號(hào)常量值含義COPY_PUT0原樣拷貝到屏幕XOR_PUT1與屏幕像素異或后拷貝OR_PUT2與屏幕像素或后拷貝AND_PUT3與屏幕像素與后拷貝NOT_PUT4把原來(lái)的圖形的像素取反后拷貝注:如果使用XOR_PUT,則內(nèi)存中的像素與當(dāng)前屏幕上的像素進(jìn)行異或操作。即若兩個(gè)像素都為1,則相應(yīng)的位被置為0,從而使原來(lái)的圖形消失;若在復(fù)制一次,則會(huì)重新出現(xiàn)。這樣利用這一特性,可以實(shí)現(xiàn)動(dòng)畫(huà)操作。C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)參數(shù)OP的取值(表)2023/4/791西安工程大學(xué)數(shù)學(xué)系#include"stdlib.h"main(){intgdriver=DETECT,gmode,errorcode;intx,y,x1=12;intbuf1[3000],buf2[4000];initgraph(&gdriver,&gmode,"");errorcode=graphresult();if(errorcode!=grOk){printf("graphicserror:%s\n",grapherrormsg(errorcode));printf("pressanytohalt!");getch();return;}例2.19描述一個(gè)人在屏幕上由右向左跑過(guò)
。C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ)2023/4/792西安工程大學(xué)數(shù)學(xué)系x=getmaxx();y
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)代商業(yè)辦公空間設(shè)計(jì)藝術(shù)
- 《神奇的工具》(說(shuō)課稿)安徽大學(xué)版三年級(jí)下冊(cè)綜合實(shí)踐活動(dòng)
- 生態(tài)城市中的綠色建筑材料應(yīng)用
- 16《朱德的扁擔(dān)》說(shuō)課稿-2024-2025學(xué)年二年級(jí)上冊(cè)語(yǔ)文統(tǒng)編版
- 環(huán)保型辦公空間的設(shè)計(jì)與實(shí)現(xiàn)
- 七年級(jí)地理下冊(cè) 11《中國(guó)在世界中》說(shuō)課稿2 魯教版五四制
- 現(xiàn)代醫(yī)療辦公中的電子病歷標(biāo)準(zhǔn)化操作教程
- 現(xiàn)代綠色物流與環(huán)境保護(hù)的協(xié)同發(fā)展
- 現(xiàn)代醫(yī)療技術(shù)下的辦公樓規(guī)劃設(shè)計(jì)
- 現(xiàn)代建筑設(shè)計(jì)的創(chuàng)新點(diǎn)與實(shí)踐案例分享
- 醫(yī)院消防安全培訓(xùn)課件
- 質(zhì)保管理制度
- 《00541語(yǔ)言學(xué)概論》自考復(fù)習(xí)題庫(kù)(含答案)
- 2025年機(jī)關(guān)工會(huì)個(gè)人工作計(jì)劃
- 2024年全國(guó)卷新課標(biāo)1高考英語(yǔ)試題及答案
- 華為經(jīng)營(yíng)管理-華為激勵(lì)機(jī)制(6版)
- 城市旅行珠海景色介紹珠海旅游攻略PPT圖文課件
- 小學(xué) 三年級(jí) 科學(xué)《觀測(cè)風(fēng)》教學(xué)設(shè)計(jì)
- JJF1664-2017溫度顯示儀校準(zhǔn)規(guī)范-(高清現(xiàn)行)
- 第二講共振理論、有機(jī)酸堿理論
- 高考英語(yǔ)聽(tīng)力必備場(chǎng)景詞匯精選(必看)
評(píng)論
0/150
提交評(píng)論