c語(yǔ)言屏幕控制與繪圖_第1頁(yè)
c語(yǔ)言屏幕控制與繪圖_第2頁(yè)
c語(yǔ)言屏幕控制與繪圖_第3頁(yè)
c語(yǔ)言屏幕控制與繪圖_第4頁(yè)
c語(yǔ)言屏幕控制與繪圖_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、本章要求:了解C語(yǔ)言的圖形化界面與文本界面的特點(diǎn); 掌握?qǐng)D形接口函數(shù)的使用,圖形方式屏幕的坐標(biāo)系; 掌握常用圖形函數(shù)的使用,并能設(shè)計(jì)簡(jiǎn)單的二維平圖形的應(yīng)用程序。 本章難點(diǎn): 使用常用圖形函數(shù)設(shè)計(jì)簡(jiǎn)單的圖形應(yīng)用程序本章重點(diǎn): 圖形接口函數(shù)的使用,圖形方式屏幕的坐標(biāo)系*第10章 屏幕控制與繪圖*第10章 屏幕控制與繪圖 隨著計(jì)算機(jī)的迅速發(fā)展,圖形和圖像已經(jīng)稱為其最具特色的特征之一。圖形、圖像由于是人們最易接受和最直觀的信息,不僅僅用于裝點(diǎn)計(jì)算機(jī)軟件的門面,而且在各個(gè)方面都被廣泛的應(yīng)用。因此,圖形處理在計(jì)算機(jī)的程序設(shè)計(jì)中也是一個(gè)重要的內(nèi)容。 本章僅對(duì)Turbo C環(huán)境下圖形處理功能做一個(gè)簡(jiǎn)單的介紹,

2、讀者如果需要深入了解C語(yǔ)言的圖形圖像處理功能,請(qǐng)參閱其它書籍資料。10.1 文本模式10.2 圖形模式10.3 圖形函數(shù)及其使用10.1 文本模式10.1.1 文本窗口(字符屏幕)的創(chuàng)建 1. Turbo C可以定義屏幕上的一個(gè)矩形域作為窗口,使用window()函數(shù)定義。窗口定義之后,用有關(guān)窗口的輸入輸出函數(shù)就可以只在此窗口內(nèi)進(jìn)行操作而不超出窗口的邊界。 2. window()函數(shù)的調(diào)用格式為: window(int left, int top, int right, int bottom); 該函數(shù)的原型在conio.h中。函數(shù)中形式參數(shù)(int left, int top)是窗口左上角的

3、坐標(biāo),(int right, int bottom)是窗口的右下角坐標(biāo),其中(left, top)和(right, bottom) 是相對(duì)于整個(gè)屏幕而言的。10.1 文本模式10.1.1 文本窗口(字符屏幕)的創(chuàng)建 3. Turbo C規(guī)定整個(gè)屏幕的左上角坐標(biāo)為(1, 1),右下角坐標(biāo)為(80, 25),并規(guī)定沿水平方向?yàn)閄軸,方向朝右;沿垂直方向?yàn)閅軸,方向朝下。4.若window()函數(shù)中的坐標(biāo)超過了屏幕坐標(biāo)的界限,則窗口的定義就失去了意義,也就是說定義將不起作用,但程序編譯鏈接時(shí)并不出錯(cuò)。例如,要定義一個(gè)窗口左上角在屏幕(10, 20)處,大小為30列15行的窗口可寫成: window(

4、10, 20, 40, 35);10.1 文本模式10.1.2 文本窗口屏幕處理函數(shù) 1設(shè)置背景顏色和字符顏色 在文本窗口中可以設(shè)置背景顏色和設(shè)置輸出字符的顏色,使用的函數(shù)為:設(shè)置背景顏色:void textbackground(int color)設(shè)置字符顏色:void textcolor(int color) 2在文本窗口內(nèi)的輸出函數(shù)輸出格式輸出函數(shù): int cprintf( char *format, va_list arglist.)格式輸入函數(shù): int cscanf(char *format, va_list arglist.)10.1 文本模式10.1.2 文本窗口屏幕處理函數(shù)

5、 2在文本窗口內(nèi)的輸出函數(shù)輸出字符輸入輸出函數(shù): 輸入字符串:char *cgets(char *str)輸出字符串:int cputs(char *str)輸入一個(gè)字符:int getche(void)輸出一個(gè)字符:int putch(int ch)10.1 文本模式10.1.2 文本窗口屏幕處理函數(shù) 3其它有關(guān)字符屏幕操作函數(shù) (1)void clrscr(void);清除當(dāng)前窗口文本內(nèi)容,并把光標(biāo)定位在窗口左上角(1, 1)處。 (2)void clreol(void)清除當(dāng)前窗口從光標(biāo)位置到行尾的所有字符,光標(biāo)位置不變。 (3)void gotoxy(x, y)定位光標(biāo)在當(dāng)前窗口中的位

6、置。10.1 文本模式10.1.2 文本窗口屏幕處理函數(shù) 3其它有關(guān)字符屏幕操作函數(shù)(4)int gettext(int xl, int yl, int x2, int y2, void *buffer)將屏幕上指定的矩形區(qū)域內(nèi)文本內(nèi)容存入buffer 指針指向的一個(gè)內(nèi)存空間。(5)int puttext(int x1,int y1,int x2,int y2,void *buffer)將gettext()函數(shù)存入內(nèi)存buffer中的文字內(nèi)容拷貝到屏幕上指定的位置。(6)int movetext(int x1,int x2,int y2,int x3,int y3)將屏幕左上角為(x1,y1)

7、,右下角為(x2,y2)的一矩形窗口內(nèi)的文本內(nèi)容拷貝到左上角為(x3,y3)的新位置。10.2 圖形模式10.2.1 設(shè)置圖形模式 在未設(shè)置圖形模式之前,系統(tǒng)默認(rèn)屏幕為文本模式(25,80列,字符模式)。所以要使用圖形功能,必須先根據(jù)顯示器的種類將顯示器設(shè)置成為某種圖形模式。 1設(shè)置屏幕為圖形模式設(shè)置屏幕為圖形模式,可用圖形初始化函數(shù)initgraph,其調(diào)用格式為: initgraph(int *gdriver,int *gmode,char *path); 其中,gdriver和gmode分別表示圖形驅(qū)動(dòng)器和模式,path是指圖形驅(qū)動(dòng)程序所在的路徑。有關(guān)圖形驅(qū)動(dòng)器、圖形模式的符號(hào)常數(shù)及對(duì)應(yīng)

8、的分辨率見教材P265表10-1。10.2 圖形模式10.2.1 設(shè)置圖形模式 2自動(dòng)檢測(cè)顯示器種類的函數(shù) 有時(shí)程序設(shè)計(jì)人員并不知道了解所使用的顯示器種類,或者編寫的程序?qū)⒂糜诓煌@示器,因此 Turbo C提供了一個(gè)自動(dòng)檢測(cè)顯示器種類的函數(shù),其調(diào)用格式為: detectgraph(int *gdriver,*gmode); 其中g(shù)driver和gmode的意義與上面介紹的initgraph函數(shù)中的參數(shù)相同。 10.2 圖形模式10.2.1 設(shè)置圖形模式 3退出圖形狀態(tài) Turbo C提供的退出圖形狀態(tài)的函數(shù)closegraph(),其調(diào)用格式為: closegraph(); 調(diào)用該函數(shù)后,系

9、統(tǒng)退出圖形模式而進(jìn)入文本模式,并釋放用于保存圖形驅(qū)動(dòng)程序和字體的系統(tǒng)內(nèi)存。 10.2 圖形模式10.2.1 設(shè)置圖形模式 例. 直接設(shè)置VGA高分辨率圖形模式。 #include void main() int gdriver,gmode; gdriver=VGA; gmode=VGAHI; initgraph(&gdriver,&gmode,f:tc20); setbkcolor(LIGHTGRAY); /* 設(shè)置背景顏色 */ setcolor(BLUE); /* 設(shè)置前景顏色 */ rectangle(100,100,300,250); /* 畫一個(gè)長(zhǎng)方形 */ getch(); /*

10、暫停*/ closegraph(); 10.2 圖形模式10.2.1 設(shè)置圖形模式 例.使用系統(tǒng)的自動(dòng)檢測(cè)顯示器種類的函數(shù)detectgraph()來(lái)進(jìn)行硬件測(cè)試后,按檢測(cè)結(jié)果自動(dòng)進(jìn)行圖形模式設(shè)置。#include void main() int gdriver,gmode; detectgraph(&gdriver,&gmode); /*自動(dòng)測(cè)試顯示器*/ initgraph(&gdriver,&gmode,f:tc20); setbkcolor(LIGHTGRAY); /* 設(shè)置背景顏色 */ setcolor(BLUE); /* 設(shè)置前景顏色 */ rectangle(100,100,3

11、00,250); /* 畫一個(gè)長(zhǎng)方形 */ getch(); /* 暫停*/ closegraph(); 10.2 圖形模式10.2.1 設(shè)置圖形模式 例.采用Turbo C提供的一種更簡(jiǎn)單的方法,即用gdriver= DETECT 語(yǔ)句后再使用initgraph()函數(shù)。#include void main() int gdriver=DETECT,gmode; initgraph(&gdriver,&gmode,f:tc20); setbkcolor(LIGHTGRAY); /* 設(shè)置背景顏色 */ setcolor(BLUE); /* 設(shè)置前景顏色 */ rectangle(100,10

12、0,300,250); /*畫一個(gè)長(zhǎng)方形*/ getch(); /* 暫停*/ closegraph(); 10.2 圖形模式10.2.1 設(shè)置圖形模式 以上三例的運(yùn)行效果10.2 圖形模式10.2.2 圖形窗口 與文本模式下可以設(shè)定屏幕窗口一樣,圖形模式下也可以在屏幕上某一區(qū)域設(shè)定窗口,只是設(shè)定的為圖形窗口而已,其后的有關(guān)圖形操作都將以這個(gè)窗口的左上角(0,0)作為坐標(biāo)原點(diǎn),而且可通過設(shè)置使窗口之外的區(qū)域?yàn)椴豢山佑|。這樣,所有的圖形操作就被限定在窗口內(nèi)進(jìn)行。 10.2 圖形模式10.2.2 圖形窗口 1設(shè)置屏幕圖形窗口void setviewport(int xl,int yl,int x2

13、,int y2,int clipflag) 設(shè)定一個(gè)以(xl,yl)象元點(diǎn)為左上角,(x2,y2)象元為右下角的圖形窗口,其中x1,y1,x2,y2是相對(duì)于整個(gè)屏幕的坐標(biāo)。若clipflag為非0,則設(shè)定的圖形以外部分不可接觸,若clipflag為0,則圖形窗口以外可以接觸。10.2 圖形模式10.2.2 圖形窗口 2用于圖形窗口的輸入輸出函數(shù) 在圖形模式下,只能用標(biāo)準(zhǔn)輸出函數(shù),如printf(),puts(),putchar()函數(shù)輸出文本到屏幕。 除此之外,其它輸出函數(shù)(如窗口輸出函數(shù))不能使用,即是可以輸出的標(biāo)準(zhǔn)函數(shù),也只以前景色為白色,按80列,25行的文本方式輸出。 Turbo C也

14、提供了一些專門用于在圖形顯示模式下的文本輸出函數(shù): 10.2 圖形模式10.2.2 圖形窗口 (1)void outtext(char *textstring) 功能是:在當(dāng)前位置輸出字符串指針textstring所指的文本。(2)void outtextxy(int x,int y,char *textstring) 功能是:在指定的(x,y)位置輸出字符串指針textstring所指 的文本。其中x和y為象元坐標(biāo)。(3)void sprintf(char *buffer, char *format, va_list arglist); 功能是:將變量va_list arglist按form

15、at指定的格式輸出到指針buffer所指的字符串中。然后再使用outtext()函數(shù)或outtextxy()函數(shù)輸出。10.2 圖形模式10.2.2 圖形窗口 3清除圖形窗口內(nèi)容(1)void clearviewport(void)此函數(shù)用于清除視圖區(qū)內(nèi)顯示的內(nèi)容,并且把當(dāng)前點(diǎn)重新定位于視圖區(qū)的左上角。(2)void cleardevice(void)該函數(shù)是清除屏幕上的所有內(nèi)容,并且把當(dāng)前坐標(biāo)點(diǎn)重新定位于屏幕的左上角。在文本模式下的清屏函數(shù)是clrscr()。 10.3 圖形函數(shù)及其應(yīng)用10.3.1 顏色函數(shù) 1設(shè)置屏幕背景和前景顏色設(shè)置背景色: void setbkcolor( int c

16、olor);設(shè)置前景色: void setcolor(int color);2獲取屏幕背景和前景顏色函數(shù)獲取屏幕背景顏色函數(shù):int getbkcolor(void); 返回整型數(shù)值。獲取屏幕前景顏色函數(shù):int getcolor(void); 返回整型數(shù)值。3獲取指定點(diǎn)的圖形顏色函數(shù)獲得點(diǎn)(x,y)的顏色值的函數(shù):int getpixel(int x,int y); 返回整型數(shù)值。 10.3 圖形函數(shù)及其應(yīng)用10.3.1 顏色函數(shù) 符號(hào)常數(shù)數(shù)值含義符號(hào)常數(shù)數(shù)值含義BLACK0黑色DARKGRAY8深灰BLUE1蘭色LIGHTBLUE9深蘭GREEN2綠色LIGHTGREEN10淡綠CYAN3

17、青色LIGHTCYAN11淡青RED4紅色LIGHTRED12淡紅MAGENTA5洋紅LIGHTMAGENTA13淡洋紅BROWN6棕色YELLOW14黃色LIGHTGRAY7淡灰WHITE15白色有關(guān)屏幕顏色的符號(hào)常數(shù)表 10.3 圖形函數(shù)及其應(yīng)用10.3.2 屏幕坐標(biāo)位置的函數(shù)(1)int getmaxx(void); 該函數(shù)返回x軸的最大值。(2)int getmaxy(void); 該函數(shù)返回y軸的最大值。(3)int getx(void); 該函數(shù)返回游標(biāo)在x軸的位置。(4)void gety(void); 該函數(shù)返回游標(biāo)有y軸的位置。(5)void moveto(int x, in

18、t y); 該函數(shù)移動(dòng)游標(biāo)到(x,y)點(diǎn)。(6)void moverel(int dx, int dy); 該函數(shù)移動(dòng)游標(biāo)從當(dāng)前位置(x,y)移動(dòng)到(x+dx,y+dy位置。10.3 圖形函數(shù)及其應(yīng)用10.3.3 基本圖形函數(shù)1畫點(diǎn)函數(shù) void putpixel(int x,int y,int color); 該函數(shù)表示在指定象元上畫一個(gè)按color所確定顏色的點(diǎn),而x,y是指該圖形象元的坐標(biāo)值。 在圖形模式下,是按象元來(lái)定義坐標(biāo)的。對(duì)VGA適配器,它的最高分辨率為640 x480,其中640為整個(gè)屏幕從左到右所有象元的個(gè)數(shù),480為整個(gè)屏幕從上到下所有象元的個(gè)數(shù)。 屏幕的左上角坐標(biāo)為(0,

19、0),右下角坐標(biāo)為(639,479),水平方向從左到右為x軸正向,垂直方向從上到下為y軸正向。Turbo C的圖形函數(shù)都是相對(duì)于圖形屏幕坐標(biāo),即象元來(lái)說的。 10.3 圖形函數(shù)及其應(yīng)用10.3.3 基本圖形函數(shù)2畫直線函數(shù)(1)void line(int x0,int y0,int x1,int y1); 畫一條從點(diǎn)(x0,y0)到(x1,y1)的直線。(2)void lineto(int x,int y); 畫一條從當(dāng)前點(diǎn)位置到點(diǎn)(x,y)的直線。(3)void linerel(int dx,int dy); 畫一條從當(dāng)前點(diǎn)位置(x,y)到按相對(duì)增量確定的點(diǎn)(x+dx,y+dy)的直線。10

20、.3 圖形函數(shù)及其應(yīng)用10.3.3 基本圖形函數(shù)3畫圓、圓弧及橢圓函數(shù)(1)void circle(int x,int y,int radius); 畫一個(gè)以(x,y)為圓心,radius為半徑的圓。(2)void arc(int x,int y,int stangle,int endangle,int radius); 畫一段以(x,y)為圓心,radius為半徑,從stangle開始到endangle結(jié)束(用度表示)的圓弧線。在Turbo C中規(guī)定x軸正向?yàn)?度,逆時(shí)針方向角度遞增。(3)void ellipse(int x,int y,int stangle,int endangle,i

21、nt xradius,int yradius); 以(x,y)為中心,xradius,yradius為x軸和y軸半徑,從度角stangle開始到endangle結(jié)束畫一段橢圓線,當(dāng)stangle=0,endangle=360時(shí),則畫出一個(gè)完整的橢圓。10.3 圖形函數(shù)及其應(yīng)用10.3.3 基本圖形函數(shù)4畫矩形框和多邊形函數(shù)(1)畫矩形框:void rectangle(int x1,int y1,int x2,inty2); 以點(diǎn)(x1,y1)為左上角,點(diǎn)(x2,y2)為右下角畫一個(gè)矩形框。(2)畫多邊形:void drawpoly(int numpoints,int *polypoints);

22、 畫一個(gè)頂點(diǎn)數(shù)為numpoints,各頂點(diǎn)坐標(biāo)由polypoints 給出的多邊形。polypoints整型數(shù)組必須至少有2倍頂點(diǎn)數(shù)個(gè)元素。每一個(gè)頂點(diǎn)的坐標(biāo)都定義為x,y,并且x在前。值得注意的是當(dāng)畫一個(gè)封閉的多邊形時(shí),numpoints 的值取實(shí)際多邊形的頂點(diǎn)數(shù)加一,并且數(shù)組polypoints中第一個(gè)和最后一個(gè)點(diǎn)的坐標(biāo)相同。10.3 圖形函數(shù)及其應(yīng)用10.3.3 基本圖形函數(shù)5設(shè)定線型函數(shù) 在沒有對(duì)線的特性進(jìn)行設(shè)定之前,Turbo C用其默認(rèn)的一點(diǎn)寬的實(shí)線,但Turbo C也提供了可以改變線型的函數(shù)。線型包括:寬度和形狀。其中寬度只有兩種選擇: 一點(diǎn)寬和三點(diǎn)寬。而線的形狀則有五種。(1)設(shè)

23、置線形狀:void setlinestyle(int linestyle,unsigned upattern,int thickness); 該函數(shù)用來(lái)設(shè)置線的有關(guān)信息,其中l(wèi)inestyle是線形狀的規(guī)定,thickness是線的寬度,見下表。 10.3 圖形函數(shù)及其應(yīng)用符號(hào)常數(shù)數(shù)值含義SOLID_LINE0實(shí)線DOTTED_LINE1點(diǎn)線CENTER_LINE2中心線DASHED_LINE3點(diǎn)劃線USERBIT_LINE4用戶定義線 有關(guān)線的形狀(linestyle) 符號(hào)常數(shù)數(shù)值含義NORM_WIDTH1一點(diǎn)寬THIC_WIDTH3三點(diǎn)寬有關(guān)線寬(thickness) 10.3 圖形函數(shù)

24、及其應(yīng)用10.3.3 基本圖形函數(shù)(2)設(shè)置畫線方式函數(shù) void setwritemode(int mode); 參數(shù)mode=0,則表示畫線時(shí)將所畫位置的原來(lái)信息覆蓋了(這是Turbo C的默認(rèn)方式)。 如果mode=1,則表示畫線時(shí)用現(xiàn)在特性的線與所畫之處原有的線進(jìn)行異或(XOR)操作,實(shí)際上畫出的線是原有線與現(xiàn)在規(guī)定的線進(jìn)行異或后的結(jié)果。 因此,當(dāng)線的特性不變,進(jìn)行兩次畫線操作相當(dāng)于沒有畫線。 10.3 圖形函數(shù)及其應(yīng)用10.3.3 基本圖形函數(shù)6封閉圖形的填充填充就是用規(guī)定的顏色和模式填滿一個(gè)封閉圖形。 (1)設(shè)定填充方式設(shè)置填充方式的函數(shù): void setfillstyle(in

25、t pattern,int color); color的值是當(dāng)前屏幕圖形模式時(shí)顏色的有效值。pattern的值及與其等價(jià)的符號(hào)常數(shù)如下表所示。 其中除USER_FILL(用戶定義填充式樣)外,其它填充式樣均可由setfillstyle()函數(shù)設(shè)置。當(dāng)選用USER_FILL時(shí),該函數(shù)對(duì)填充圖模和顏色不作任何改變。之所以定義USER_FILL主要因?yàn)樵讷@得有關(guān)填充信息時(shí)用到此項(xiàng)。 10.3 圖形函數(shù)及其應(yīng)用符號(hào)常數(shù)數(shù)值含義EMPTY_FILL0以背景顏色填充SOLID_FILL1以實(shí)填充LINE_FILL2以直線填充LTSLASH_FILL3以斜線填充(陰影線)SLASH_FILL4以粗斜線填充(

26、粗陰影線)BKSLASH_FILL5以粗反斜線填充(粗陰影線)LTBKSLASH_FILL6以反斜線填充(陰影線)HATCH_FILL7以直方網(wǎng)格填充XHATCH_FILL8以斜網(wǎng)格填充INTTERLEAVE_FILL9以間隔點(diǎn)填充WIDE_DOT_FILL10以稀疏點(diǎn)填充CLOSE_DOS_FILL11以密集點(diǎn)填充USER_FILL12以用戶定義式樣填充 關(guān)于填充式樣pattern的規(guī)定 10.3 圖形函數(shù)及其應(yīng)用10.3.3 基本圖形函數(shù)(2)任意封閉圖形的填充 void floodfill(int x,int y,int border);其中:x,y為封閉圖形內(nèi)的任意一點(diǎn)。border為邊界的顏色,也就是封閉圖形輪廓的顏色。調(diào)用了該函數(shù)后,將用規(guī)定的顏色和圖模填滿整個(gè)封閉圖形。其他說明:如果x或y取在邊界上,則不進(jìn)行填充。如果不是封閉圖形則填充會(huì)從沒有封閉的地方溢出去,填滿其它地方。如果x或y在圖形外面,則填充封閉圖形外的屏幕區(qū)域。

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論