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

下載本文檔

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

文檔簡(jiǎn)介

1、第三章 C語(yǔ)言圖形程序設(shè)計(jì)基礎(chǔ) 屏幕設(shè)置屏幕設(shè)置 圖形顏色設(shè)置圖形顏色設(shè)置 線的特性設(shè)定和填充線的特性設(shè)定和填充 圖形模式下文本處理圖形模式下文本處理 圖形存取處理圖形存取處理 常用畫圖函數(shù)常用畫圖函數(shù) 繪圖程序?qū)嵗L圖程序?qū)嵗?在屏幕上進(jìn)行繪圖一般要執(zhí)行如下步驟在屏幕上進(jìn)行繪圖一般要執(zhí)行如下步驟: :(1 1)設(shè)置屏幕為圖形方式;)設(shè)置屏幕為圖形方式;(2 2)選擇背景與實(shí)體顏色;)選擇背景與實(shí)體顏色;(3 3)計(jì)算坐標(biāo);)計(jì)算坐標(biāo);(4 4)調(diào)用繪圖語(yǔ)句繪制實(shí)體。)調(diào)用繪圖語(yǔ)句繪制實(shí)體。 第一章第一章 C語(yǔ)言圖形設(shè)計(jì)基礎(chǔ)語(yǔ)言圖形設(shè)計(jì)基礎(chǔ)3.1 3.1 屏幕設(shè)置屏幕設(shè)置 3.2 3.2 圖形

2、顏色設(shè)置圖形顏色設(shè)置3.3 3.3 線的特性設(shè)定和填充線的特性設(shè)定和填充3.4 3.4 圖形模式下文本處理圖形模式下文本處理3.5 3.5 圖形存取處理圖形存取處理 3.6 3.6 常用畫圖函數(shù)簡(jiǎn)介常用畫圖函數(shù)簡(jiǎn)介3.7 3.7 繪圖程序?qū)嵗L圖程序?qū)嵗?第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ)3.1 屏幕設(shè)置屏幕設(shè)置一、屏幕顯示方式與坐標(biāo)系一、屏幕顯示方式與坐標(biāo)系 1. 1. 文本方式與字符坐標(biāo)系文本方式與字符坐標(biāo)系 在屏幕上只能顯示字符的方式稱為文本方式。在文本在屏幕上只能顯示字符的方式稱為文本方式。在文本方式下,屏幕上可以顯示的最小單位是字符。為了能在方式下,屏幕上可以顯示的最小單位是字

3、符。為了能在指定位置顯示每個(gè)字符,指定位置顯示每個(gè)字符,C語(yǔ)言提供了字符坐標(biāo)系。語(yǔ)言提供了字符坐標(biāo)系。左上角為坐左上角為坐標(biāo)原點(diǎn)(標(biāo)原點(diǎn)(1 1,1 1) 水平方向(水平方向(x x軸)分為軸)分為若干列若干列 垂直方向(垂直方向(y y軸)分為軸)分為若干行若干行 第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ)如如:(8(8,2020)表示)表示字符位于屏幕第字符位于屏幕第8 8行第行第2020列列Turbo CTurbo C支持以下支持以下6 6種不同的顯示方式:種不同的顯示方式: (l l)BW40 BW40 黑白黑白25254040(2525行,行,4040列)列)(2 2)C40 C40

4、彩色彩色25254040(3 3)BW80 BW80 黑白黑白25258080(4 4)C80 C80 彩色彩色25258080(5 5)MONO MONO 單色單色25258080(6 6)C4350C4350彩色彩色43438080(EGAEGA),),50508080(VGVG) 顯示方式不同,所顯示的字符的列數(shù)和行數(shù)也不一樣顯示方式不同,所顯示的字符的列數(shù)和行數(shù)也不一樣,顏色也有區(qū)別,顏色也有區(qū)別, ,屏幕上所顯示的字符數(shù)量也不一樣。屏幕上所顯示的字符數(shù)量也不一樣。 第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ)2.2.圖形方式與點(diǎn)坐標(biāo)圖形方式與點(diǎn)坐標(biāo) 在屏幕上顯示的圖形稱圖形方式。在屏幕上

5、顯示的圖形稱圖形方式。 屏幕是由像素點(diǎn)組成的,其像素點(diǎn)多少?zèng)Q定了屏幕的分辨率。屏幕是由像素點(diǎn)組成的,其像素點(diǎn)多少?zèng)Q定了屏幕的分辨率。分辨率越高,顯示圖形越細(xì)致,質(zhì)量越好。分辨率越高,顯示圖形越細(xì)致,質(zhì)量越好。 在圖形方式下,屏幕上每個(gè)像素的顯示位置用點(diǎn)坐標(biāo)來(lái)描述。在圖形方式下,屏幕上每個(gè)像素的顯示位置用點(diǎn)坐標(biāo)來(lái)描述。點(diǎn)坐標(biāo)系點(diǎn)坐標(biāo)系左上角為坐左上角為坐標(biāo)原點(diǎn)(標(biāo)原點(diǎn)(0 0,0 0) 垂直方向?yàn)榇怪狈较驗(yàn)閥 y軸,自上軸,自上向下向下 水平方向水平方向?yàn)闉閤 x軸,自軸,自左向右左向右 第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ) 分辨率不同,水平方向和垂直方向的點(diǎn)數(shù)也不一樣,即其分辨率不同,水平

6、方向和垂直方向的點(diǎn)數(shù)也不一樣,即其maxxmaxx,maxymaxy數(shù)值也不同。數(shù)值也不同。 在在Turbo CTurbo C中,坐標(biāo)數(shù)據(jù)可以用兩種形式給出:一種是中,坐標(biāo)數(shù)據(jù)可以用兩種形式給出:一種是絕對(duì)坐標(biāo)絕對(duì)坐標(biāo); ;另另一種是一種是相對(duì)坐標(biāo)相對(duì)坐標(biāo)。絕對(duì)坐標(biāo)絕對(duì)坐標(biāo)的參考點(diǎn)是坐標(biāo)的原點(diǎn)(的參考點(diǎn)是坐標(biāo)的原點(diǎn)(0 0,0 0),),x x和和y y只能取規(guī)定范圍內(nèi)的只能取規(guī)定范圍內(nèi)的正整數(shù)。正整數(shù)。相對(duì)坐標(biāo)相對(duì)坐標(biāo)是相對(duì)是相對(duì)“當(dāng)前點(diǎn)當(dāng)前點(diǎn)”的坐標(biāo),所以其坐標(biāo)的參考點(diǎn)不是坐標(biāo)系的坐標(biāo),所以其坐標(biāo)的參考點(diǎn)不是坐標(biāo)系的原點(diǎn),而是當(dāng)前點(diǎn)。在相對(duì)坐標(biāo)中,的原點(diǎn),而是當(dāng)前點(diǎn)。在相對(duì)坐標(biāo)中,x x和

7、和y y的取值是相對(duì)于當(dāng)前點(diǎn)在的取值是相對(duì)于當(dāng)前點(diǎn)在x x方向和方向和y y方向上的增量,方向上的增量,x x和和y y可以是正整數(shù),也可以是負(fù)整數(shù)??梢允钦麛?shù),也可以是負(fù)整數(shù)。點(diǎn)坐標(biāo)系坐標(biāo)值的范圍決定于所使用適配器顯示分辨率。點(diǎn)坐標(biāo)系坐標(biāo)值的范圍決定于所使用適配器顯示分辨率。第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ)二、圖形驅(qū)動(dòng)程序與圖形模式二、圖形驅(qū)動(dòng)程序與圖形模式1. 1. 圖形驅(qū)動(dòng)程序圖形驅(qū)動(dòng)程序 支持不同圖形適配器的一組程序支持不同圖形適配器的一組程序 由于圖形顯示器的種類繁多,其控制方式也各有差異,所以要顯由于圖形顯示器的種類繁多,其控制方式也各有差異,所以要顯示圖形就需先裝入相應(yīng)

8、的圖形驅(qū)動(dòng)程序。示圖形就需先裝入相應(yīng)的圖形驅(qū)動(dòng)程序。 Turbo C Turbo C提供了幾種圖形驅(qū)動(dòng)程序可支持的圖形適配器。下表列出提供了幾種圖形驅(qū)動(dòng)程序可支持的圖形適配器。下表列出驅(qū)動(dòng)程序其相應(yīng)的符號(hào)常量和規(guī)定值。驅(qū)動(dòng)程序其相應(yīng)的符號(hào)常量和規(guī)定值。 符號(hào)常量符號(hào)常量 數(shù)數(shù) 值值 符號(hào)常量符號(hào)常量 數(shù)數(shù) 值值DETECTDETECTCGACGAMCGAMCGAEGAEGAEGA64EGA64EGAMONOEGAMONO 0 0 1 1 2 2 3 3 4 4 5 5 IBM8514IBM8514HERCMONOHERCMONOATT400ATT400VGAVGAPC3270PC3270 6

9、6 7 7 8 8 9 9 10 10第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ)2. 2. 圖形模式圖形模式 每種圖形顯示器有不同的圖形顯示模式每種圖形顯示器有不同的圖形顯示模式 由于每種圖形顯示器各有幾種不同的圖形顯示由于每種圖形顯示器各有幾種不同的圖形顯示模式,因此,要顯示圖形就必須確定所用的顯示模式,因此,要顯示圖形就必須確定所用的顯示模式,也就是說(shuō),要顯示圖形,不但要先裝入相模式,也就是說(shuō),要顯示圖形,不但要先裝入相應(yīng)驅(qū)動(dòng)程序,而且還要決定所用的顯示模式。不應(yīng)驅(qū)動(dòng)程序,而且還要決定所用的顯示模式。不同的圖形驅(qū)動(dòng)程序有不同的圖形模式;即使在同同的圖形驅(qū)動(dòng)程序有不同的圖形模式;即使在同一圖形

10、驅(qū)動(dòng)程序下,也可能會(huì)有幾種圖形模式。一圖形驅(qū)動(dòng)程序下,也可能會(huì)有幾種圖形模式。 圖形驅(qū)動(dòng)程序及其相應(yīng)模式具體見(jiàn)書圖形驅(qū)動(dòng)程序及其相應(yīng)模式具體見(jiàn)書P53P53表表3.23.2第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ)驅(qū)動(dòng)程序驅(qū)動(dòng)程序( (driver) driver) 圖形模式圖形模式gmodegmode值值分辨率分辨率調(diào)色板調(diào)色板 CGACGACGAC0CGAC0 0 0320320200200 C0C0CGAC1CGAC1 1 1320320200200 C1C1CGAC2CGAC2 2 2320320200200 C2C2CGAC3CGAC3 3 3320320200200 C3C3CGAH

11、I CGAHI 4 4640640200200 2 2色色 MCGAMCGAMCGAC0MCGAC0 0 0320320200200 C0C0MCGAC1MCGAC1 1 1320320200200 C1C1MCGAC2MCGAC2 2 2320320200200 C2C2MCGAC3MCGAC3 3 3320320200200 C3C3MCGAMEDMCGAMED 4 4640640200200 2 2色色MCGAHIMCGAHI 5 5640640480480 2 2色色圖形驅(qū)動(dòng)程序及其相應(yīng)模式(部分)圖形驅(qū)動(dòng)程序及其相應(yīng)模式(部分)三三 、圖形系統(tǒng)初始化和模式控制、圖形系統(tǒng)初始化和模式控

12、制 Turbo CTurbo C中圖形函數(shù)均在頭文件中圖形函數(shù)均在頭文件“graphics.hgraphics.h”中定義,所以,凡是在程序中要調(diào)用這些圖形函數(shù)中定義,所以,凡是在程序中要調(diào)用這些圖形函數(shù),都必須在程序文件的開頭寫上文件包含命令:,都必須在程序文件的開頭寫上文件包含命令: # # include include graphics.hgraphics.h第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ)1. 1. 圖形系統(tǒng)初始化圖形系統(tǒng)初始化 (1).(1).問(wèn)題的提出問(wèn)題的提出 一般缺省情況下,屏幕為一般缺省情況下,屏幕為8080列列2525行的文本方行的文本方式。在文本方式下,所有的圖

13、形函數(shù)均不能操作式。在文本方式下,所有的圖形函數(shù)均不能操作,因此在使用圖形函數(shù)繪圖之前,必須將屏幕顯,因此在使用圖形函數(shù)繪圖之前,必須將屏幕顯示適配器設(shè)置為一種圖形模式,這就是圖形初始示適配器設(shè)置為一種圖形模式,這就是圖形初始化過(guò)程?;^(guò)程。 圖形系統(tǒng)初始化首先要調(diào)用圖形系統(tǒng)初始化首先要調(diào)用initgraph()initgraph()函函數(shù),它通過(guò)從磁盤上裝入一個(gè)圖形驅(qū)動(dòng)程序,來(lái)數(shù),它通過(guò)從磁盤上裝入一個(gè)圖形驅(qū)動(dòng)程序,來(lái)初始化圖形化系統(tǒng),并將系統(tǒng)設(shè)置為圖形模式。初始化圖形化系統(tǒng),并將系統(tǒng)設(shè)置為圖形模式。 第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ) (2). (2).初始化函數(shù)初始化函數(shù)initg

14、raph()initgraph()函數(shù)格式為:函數(shù)格式為:void far initgraph(int void far initgraph(int * *gdrivergdriver;int int * *gmode,char gmode,char * *path);path);gdrivergdriver:是一個(gè)整型值,用來(lái)指定要裝入的圖形是一個(gè)整型值,用來(lái)指定要裝入的圖形驅(qū)動(dòng)程序,該值在頭文件驅(qū)動(dòng)程序,該值在頭文件 graphics.hgraphics.h中定義,如中定義,如p51p51表表3.3.l l所示。所示。gmode:gmode:是一個(gè)整型值,用來(lái)設(shè)置圖形顯示模式。圖是一個(gè)整型

15、值,用來(lái)設(shè)置圖形顯示模式。圖形顯示模式?jīng)Q定了顯示的分辨率,可同時(shí)顯示的顏色形顯示模式?jīng)Q定了顯示的分辨率,可同時(shí)顯示的顏色的多少,調(diào)色板的設(shè)置方式等,幾種不同的圖形顯示的多少,調(diào)色板的設(shè)置方式等,幾種不同的圖形顯示模式如模式如p53p53表表3.23.2所示。所示。第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ)path:path:是一個(gè)字符串,用來(lái)指明圖形驅(qū)動(dòng)程序是一個(gè)字符串,用來(lái)指明圖形驅(qū)動(dòng)程序所在路徑。如果驅(qū)動(dòng)程序就在用戶當(dāng)前目錄下所在路徑。如果驅(qū)動(dòng)程序就在用戶當(dāng)前目錄下,則該參數(shù)可以空字符串,否則應(yīng)給出具體路,則該參數(shù)可以空字符串,否則應(yīng)給出具體路徑名。一般情況下,徑名。一般情況下,Turbo

16、CTurbo C安裝在安裝在C C盤的盤的TCTC目目錄中,則該路徑為:錄中,則該路徑為:C:TCC:TC,如果寫在參數(shù)中則如果寫在參數(shù)中則為為“C:TCC:TC”。注意:前兩個(gè)參數(shù)實(shí)際上是整型指針,調(diào)用時(shí)注意:前兩個(gè)參數(shù)實(shí)際上是整型指針,調(diào)用時(shí)應(yīng)加上地址運(yùn)算符應(yīng)加上地址運(yùn)算符“”。 第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ)對(duì)對(duì)farfar關(guān)鍵字的解釋:關(guān)鍵字的解釋:farfar并非并非C C語(yǔ)言的標(biāo)準(zhǔn)關(guān)鍵字,語(yǔ)言的標(biāo)準(zhǔn)關(guān)鍵字,主要是遠(yuǎn)程鏈接的作用,可以將其視為遠(yuǎn)指針函數(shù),以主要是遠(yuǎn)程鏈接的作用,可以將其視為遠(yuǎn)指針函數(shù),以內(nèi)存管理是段式管理為例,沒(méi)有內(nèi)存管理是段式管理為例,沒(méi)有farfar這個(gè)

17、關(guān)鍵字時(shí),內(nèi)這個(gè)關(guān)鍵字時(shí),內(nèi)存地址僅是段內(nèi)跳轉(zhuǎn),有存地址僅是段內(nèi)跳轉(zhuǎn),有farfar這個(gè)關(guān)鍵字時(shí)內(nèi)存地址是這個(gè)關(guān)鍵字時(shí)內(nèi)存地址是段間跳轉(zhuǎn)。段間跳轉(zhuǎn)。幾個(gè)頭文件幾個(gè)頭文件graphics.hstdlib.hconio.hstdio.h第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ)(3)(3)初始化方式初始化方式已知顯示器類型的圖形系統(tǒng)初始化已知顯示器類型的圖形系統(tǒng)初始化 已知所用圖形顯示器的種類和要使用的圖形模式,初已知所用圖形顯示器的種類和要使用的圖形模式,初始化圖形系統(tǒng)可如下面程序所示:始化圖形系統(tǒng)可如下面程序所示:例例3.13.1# #include graphics.hinclude grap

18、hics.h main() main()int gdriver,gmode;int gdriver,gmode; gdriver=CGA; gdriver=CGA;/ /* *設(shè)置驅(qū)動(dòng)程序?yàn)樵O(shè)置驅(qū)動(dòng)程序?yàn)镃GACGA* */ / gmode=CGAC0; gmode=CGAC0;/ /* *選用選用CGACGA圖形模式圖形模式* */ / initgraph(&gdriver,&gmode,c:TC); initgraph(&gdriver,&gmode,c:TC);/ /* *初始化圖形系統(tǒng)初始化圖形系統(tǒng)* */ / bar3d(10,20,50,80,0,0

19、); / bar3d(10,20,50,80,0,0); /* *畫一實(shí)心長(zhǎng)方形畫一實(shí)心長(zhǎng)方形* */ / getch(); getch(); / /* *等待按一鍵結(jié)束等待按一鍵結(jié)束* */ / closegraph(); closegraph();/ /* *關(guān)閉圖形系統(tǒng),回到文本方式關(guān)閉圖形系統(tǒng),回到文本方式* */ / 此處也可用整型常數(shù)此處也可用整型常數(shù)代替符號(hào)常量代替符號(hào)常量gdriver=1;gdriver=1; gmode=0;gmode=0;第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ)不知顯示器類型的圖形初始化。不知顯示器類型的圖形初始化。 Turbo C Turbo C提供了一

20、個(gè)對(duì)圖形顯示器硬件測(cè)試提供了一個(gè)對(duì)圖形顯示器硬件測(cè)試的函數(shù)的函數(shù)detectgraphdetectgraph()。()。 它的格式為:它的格式為:void far detectgraph(int void far detectgraph(int * *gdriver,int gdriver,int * *gmode);gmode);該函數(shù)在計(jì)算機(jī)有圖形適配器的情況下,確定該函數(shù)在計(jì)算機(jī)有圖形適配器的情況下,確定圖形適配器的類型,若系統(tǒng)有圖形適配器,則圖形適配器的類型,若系統(tǒng)有圖形適配器,則返回適合于適配器的圖形驅(qū)動(dòng)程序的代碼,用返回適合于適配器的圖形驅(qū)動(dòng)程序的代碼,用gdrivergdrive

21、r指向的整型量表示,該函數(shù)把指向的整型量表示,該函數(shù)把gmodegmode所所指的變量設(shè)置為適配器所能支持的最高分辨率指的變量設(shè)置為適配器所能支持的最高分辨率。若系統(tǒng)無(wú)圖形適配器,則。若系統(tǒng)無(wú)圖形適配器,則gdrivergdriver所指變量為所指變量為-2-2。第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ)例例3.23.2# #include stdio.hinclude stdio.h#include #include “conio.hconio.h”#include #include “stdlib.hstdlib.h”#include graphics.h#include graphics.

22、hmain()main() int gdriver,gmode;int gdriver,gmode;detectgraph(&gdriver,&gmode);detectgraph(&gdriver,&gmode);/ /* *測(cè)試結(jié)果存放于測(cè)試結(jié)果存放于gdriver,gmodegdriver,gmode中中* */ /if(gdriver0)if(gdriver=3a=3,那么將顯,那么將顯示值最大的那種顏示值最大的那種顏色,例如色,例如CGAC0CGAC0,將顯示黃色將顯示黃色(2 2)高分辨率)高分辨率高分辨率方式顯示高分辨率方式顯示6406402002

23、00個(gè)像素點(diǎn),只有兩種個(gè)像素點(diǎn),只有兩種顏色。黑色背景和彩色前景。由于顏色。黑色背景和彩色前景。由于CGACGA本身原因本身原因,背景色就是硬件所認(rèn)為的背景色,可用,背景色就是硬件所認(rèn)為的背景色,可用setbkcolorsetbkcolor參照課本參照課本P60P60表表3.33.3設(shè)置,前景色(即設(shè)置,前景色(即畫筆顏色)始終是青色。畫筆顏色)始終是青色。第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ) 例例3.123.12在高分辨率下畫一青色圓。在高分辨率下畫一青色圓。# # include graphics.hinclude graphics.h#include conio.h#include

24、conio.hvoid main()void main() int gdriver=CGA,gmode=CGAHI;int gdriver=CGA,gmode=CGAHI;initgraph(&gdriver,&gmode, );initgraph(&gdriver,&gmode, );cleardevice();cleardevice();setbkcolor(3);setbkcolor(3);circle(160,100,50);circle(160,100,50);circle(160,100,25);circle(160,100,25);getch();

25、getch();closegraph();closegraph(); 程序執(zhí)行后,在青色屏幕上顯示兩個(gè)白色圓圖形程序執(zhí)行后,在青色屏幕上顯示兩個(gè)白色圓圖形。 第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ)2 2、EGAEGA調(diào)色板調(diào)色板 對(duì)對(duì)EGAEGA來(lái)說(shuō),總共可以有來(lái)說(shuō),總共可以有6464種顏色種顏色, ,但只有但只有一個(gè)調(diào)色板,這個(gè)調(diào)色板只有一個(gè)調(diào)色板,這個(gè)調(diào)色板只有1616項(xiàng),可同時(shí)顯項(xiàng),可同時(shí)顯示示1616種顏色。默認(rèn)的這種顏色。默認(rèn)的這1616種顏色可參看種顏色可參看P60P60表表3.33.3。表。表3.53.5(見(jiàn)書(見(jiàn)書P63P63)的顏色不準(zhǔn)確,是隨機(jī)的顏色不準(zhǔn)確,是隨機(jī)選取的,

26、不作為參考。選取的,不作為參考。 第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ)3 3、改變調(diào)色板的一種顏色、改變調(diào)色板的一種顏色 void far setpalettevoid far setpalette(int oldcolor,int int oldcolor,int newcolor); newcolor); 此函數(shù)改變屏幕系統(tǒng)所顯示顏色。它把調(diào)色板此函數(shù)改變屏幕系統(tǒng)所顯示顏色。它把調(diào)色板oldcoloroldcolor變?yōu)樽優(yōu)閚ewcolornewcolor。(1). (1). 對(duì)于對(duì)于CGACGA模式,模式, 只 有 背 景 色 能 改 變 , 而 背 景 色 總 是 取只 有 背 景

27、 色 能 改 變 , 而 背 景 色 總 是 取oldcolor=0oldcolor=0例如,下列語(yǔ)句可把背景色改成綠色:例如,下列語(yǔ)句可把背景色改成綠色: setpalette(0,GREEN); setpalette(0,GREEN);Turbo CTurbo C中好像不支持對(duì)該函中好像不支持對(duì)該函數(shù)的執(zhí)行數(shù)的執(zhí)行第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ) (2).(2).對(duì)于對(duì)于EGAEGA模式模式可以用可以用setpalette( )setpalette( )函數(shù)將某一種顏色設(shè)置為函數(shù)將某一種顏色設(shè)置為16 16 種不同顏色中的一種。種不同顏色中的一種。oldcoloroldcolor是

28、表是表3.33.3中任一中任一 顏色,而顏色,而newcolornewcolor是表是表3.53.5中前中前7 7種顏色。種顏色。例如:例如:setpalette(BLUE,EGA-GREEN);setpalette(BLUE,EGA-GREEN); 或或setpalette(1,2);setpalette(1,2);將屏幕上的藍(lán)色(將屏幕上的藍(lán)色(BLUEBLUE)均變?yōu)榫G色(均變?yōu)榫G色(EGA-GREENEGA-GREEN)第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ)三、獲取顏色信息三、獲取顏色信息1. 1. 讀取當(dāng)前背景顏色讀取當(dāng)前背景顏色int far getbkcolor(void);i

29、nt far getbkcolor(void);該函數(shù)返回當(dāng)前背景顏色該函數(shù)返回當(dāng)前背景顏色, ,其背景顏色值如表其背景顏色值如表3.33.3所示。所示。例如:例如:下列語(yǔ)句顯示當(dāng)前背景顏色:下列語(yǔ)句顯示當(dāng)前背景顏色:printf(background printf(background color is %d,getbkcolor();color is %d,getbkcolor();2. 2. 讀取當(dāng)前畫圖顏色讀取當(dāng)前畫圖顏色int far getcolor(void);int far getcolor(void);該函數(shù)返回當(dāng)前畫筆顏色。該函數(shù)返回當(dāng)前畫筆顏色。例如,例如,在在CGAC2

30、CGAC2圖形模式下,調(diào)色板包含四種顏色:圖形模式下,調(diào)色板包含四種顏色:0 0為背為背景色,景色,1 1為綠色,為綠色,2 2為紅色,為紅色,3 3為棕色。如果為棕色。如果 getcolor( )getcolor( )函數(shù)的返回值為函數(shù)的返回值為 1 1,則當(dāng)前畫筆色為綠色。,則當(dāng)前畫筆色為綠色。第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ)3.3.讀取最高可用顏色數(shù)讀取最高可用顏色數(shù)int far getmaxcolor(void);int far getmaxcolor(void); 該函數(shù)返回當(dāng)前屏幕模式下最大有效顏色值。在該函數(shù)返回當(dāng)前屏幕模式下最大有效顏色值。在EGAEGA模式下模式下,

31、getmaxcolor()getmaxcolor()函數(shù)返回最大值為函數(shù)返回最大值為1515,這表明用,這表明用setcolor()setcolor()函函數(shù)值在數(shù)值在0 01515有效;在有效;在CGACGA低分辨率模式中低分辨率模式中, ,getmaxcolor()getmaxcolor()函數(shù)函數(shù)返回最大值為返回最大值為3 3,這表明用,這表明用setcolor()setcolor()函數(shù)值在函數(shù)值在0 03 3有效;而在有效;而在CGAHICGAHI模式中,返回值為模式中,返回值為1 1,因?yàn)楫嫻P始終是青色。,因?yàn)楫嫻P始終是青色。4. 4. 在點(diǎn)(在點(diǎn)(x x,y y)處畫一規(guī)定顏色點(diǎn)

32、處畫一規(guī)定顏色點(diǎn)void far putpixel(int x,int y,int color);void far putpixel(int x,int y,int color);把把colorcolor所指定的顏色寫到(所指定的顏色寫到(x x,y y)處的像素上。處的像素上。5 5讀取點(diǎn)(讀取點(diǎn)(x x,y y)的顏色的顏色int far getpixel(int x,int y);int far getpixel(int x,int y);此函數(shù)返回指定點(diǎn)此函數(shù)返回指定點(diǎn)x x,y y位置上的像素顏色。位置上的像素顏色。第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ)例3.14 在不同位置畫點(diǎn)

33、#include graphics.h#include conio.hvoid main()int gdriver=DETECT,gmode;int color,i,max;initgraph(&gdriver,&gmode, );max=getmaxcolor();for(i=0;i20;i+)putpixel(50+i*10,20,max);color=getpixel(50,20);putpixel(150,150,color);getch();closegraph(); 得到當(dāng)前屏幕得到當(dāng)前屏幕模式下最大有模式下最大有效顏色值效顏色值以(以(5050,2020)為)為起

34、點(diǎn),在起點(diǎn),在X X正方向正方向上每隔上每隔1010用當(dāng)前用當(dāng)前屏幕模式下最大屏幕模式下最大有效顏色畫點(diǎn)有效顏色畫點(diǎn)得到點(diǎn)(得到點(diǎn)(5050,2020)的像素顏色的像素顏色把把colorcolor所指定所指定的顏色寫到(的顏色寫到(150150,150150)處處的像素上。的像素上。3.3 線的特性設(shè)定和填充線的特性設(shè)定和填充 一、線的特性設(shè)定一、線的特性設(shè)定用畫線函數(shù)進(jìn)行畫線時(shí),其默認(rèn)值均屬于一像素點(diǎn)寬度用畫線函數(shù)進(jìn)行畫線時(shí),其默認(rèn)值均屬于一像素點(diǎn)寬度的實(shí)線。為了改變線形與線寬,的實(shí)線。為了改變線形與線寬,Turbo CTurbo C提供了可以改提供了可以改變線型和線寬的函數(shù)。變線型和線寬的

35、函數(shù)。void far setlinestyle(int linestyle,void far setlinestyle(int linestyle, unsigned pattern,int width); unsigned pattern,int width); 第三章第三章 C語(yǔ)言圖形設(shè)計(jì)基礎(chǔ)語(yǔ)言圖形設(shè)計(jì)基礎(chǔ)3.1 3.1 屏幕設(shè)置屏幕設(shè)置3.2 3.2 圖形顏色設(shè)置圖形顏色設(shè)置3.3 3.3 線的特性設(shè)定和填充線的特性設(shè)定和填充3.4 3.4 圖形模式下文本處理圖形模式下文本處理3.5 3.5 圖形存取處理圖形存取處理 3.6 3.6 常用畫圖函數(shù)簡(jiǎn)介常用畫圖函數(shù)簡(jiǎn)介3.7 3.7 繪

36、圖程序?qū)嵗L圖程序?qū)嵗?第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ)該函數(shù)所用三個(gè)參數(shù)含義如下:該函數(shù)所用三個(gè)參數(shù)含義如下:(1 1)linestyle:linestyle:為整型值,用來(lái)定義所畫直線類型為整型值,用來(lái)定義所畫直線類型 表中前四種為系統(tǒng)預(yù)定義的類型,第五個(gè)為用戶自表中前四種為系統(tǒng)預(yù)定義的類型,第五個(gè)為用戶自定義類型。定義類型。 代代 號(hào)號(hào) 名名 代代 碼碼 說(shuō)說(shuō) 明明 SOLID-LINESOLID-LINE 0 0 實(shí)線實(shí)線 DOTTED-LINEDOTTED-LINE 1 1 點(diǎn)線點(diǎn)線 CENTER-LINECENTER-LINE 2 2 中心線中心線 DASHED-LINED

37、ASHED-LINE 3 3 虛線虛線 USERBIT-LINEUSERBIT-LINE 4 4 用戶定義的線形用戶定義的線形線型的代線型的代號(hào)說(shuō)明號(hào)說(shuō)明第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ)(2 2)patternpattern:無(wú)符號(hào)整型數(shù)。該參數(shù)在需要用戶自定義線型時(shí)使用,如果無(wú)符號(hào)整型數(shù)。該參數(shù)在需要用戶自定義線型時(shí)使用,如果是使用前四種系統(tǒng)預(yù)定義的線型,則該參數(shù)可取是使用前四種系統(tǒng)預(yù)定義的線型,則該參數(shù)可取0 0值。值。 (3) (3) widthwidth:整型數(shù)。指定所畫直線的粗細(xì),以像素為單位整型數(shù)。指定所畫直線的粗細(xì),以像素為單位, ,分為兩種情況分為兩種情況通過(guò)上述幾個(gè)參

38、數(shù)的不同組合,就可以根據(jù)需要畫出不同類型、不同粗細(xì)的通過(guò)上述幾個(gè)參數(shù)的不同組合,就可以根據(jù)需要畫出不同類型、不同粗細(xì)的直線。直線。例如例如:setcolor(RED);setcolor(RED);Setlinestyle(DASHED-LINE,0,THICK-WIDTH);Setlinestyle(DASHED-LINE,0,THICK-WIDTH);line(10,20,150,70);line(10,20,150,70);從從(10,20)(10,20)到到(150,70)(150,70)用一條紅色的用一條紅色的3 3個(gè)像素寬點(diǎn)劃線個(gè)像素寬點(diǎn)劃線符號(hào)常量符號(hào)常量值值含含 義義NORM_W

39、IDTHNORM_WIDTH1 1 1 1個(gè)像素寬個(gè)像素寬( (缺省缺省) ) THICK_WIDTHTHICK_WIDTH3 3 3 3個(gè)像素寬個(gè)像素寬第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ) 當(dāng)函數(shù)當(dāng)函數(shù)setlinestylesetlinestyle的第一個(gè)參數(shù)為的第一個(gè)參數(shù)為USERBIT-LINEUSERBIT-LINE(或或4 4)時(shí),可以由用戶自己定義直線類型。此時(shí),第三個(gè)參數(shù)意義時(shí),可以由用戶自己定義直線類型。此時(shí),第三個(gè)參數(shù)意義同前,直線類型在第二個(gè)參數(shù)中定義,該參數(shù)是一個(gè)同前,直線類型在第二個(gè)參數(shù)中定義,該參數(shù)是一個(gè)1616位二位二進(jìn)制碼,每一位(進(jìn)制碼,每一位(bitbi

40、t)表示一個(gè)像素。某一位置表示一個(gè)像素。某一位置1 1時(shí)表示直時(shí)表示直線上相應(yīng)位置以當(dāng)前顏色顯示;如果某位為線上相應(yīng)位置以當(dāng)前顏色顯示;如果某位為0 0,則其對(duì)應(yīng)像素,則其對(duì)應(yīng)像素不顯示或不改變(仍用原來(lái)顏色)。不顯示或不改變(仍用原來(lái)顏色)。 例如:例如:1111 1111 1111 11111111 1111 1111 1111 16 16位全置位全置1 1,因此畫一條,因此畫一條1616個(gè)像素的點(diǎn)實(shí)線(就是實(shí)線)。個(gè)像素的點(diǎn)實(shí)線(就是實(shí)線)。 1010 1010 1010 1010 1010 1010 1010 1010 則隔位置則隔位置1 1,因此畫一條,因此畫一條1616個(gè)像素的點(diǎn)虛

41、線(就是點(diǎn)線)。個(gè)像素的點(diǎn)虛線(就是點(diǎn)線)。 在實(shí)際編寫程序時(shí),一般把在實(shí)際編寫程序時(shí),一般把1616位二進(jìn)制數(shù)轉(zhuǎn)換為位二進(jìn)制數(shù)轉(zhuǎn)換為4 4位十六進(jìn)位十六進(jìn)制數(shù),每制數(shù),每4 4位二進(jìn)制數(shù)轉(zhuǎn)換為位二進(jìn)制數(shù)轉(zhuǎn)換為1 1位十六進(jìn)制數(shù),故上面兩個(gè)例位十六進(jìn)制數(shù),故上面兩個(gè)例子轉(zhuǎn)換為十六進(jìn)制數(shù)為:子轉(zhuǎn)換為十六進(jìn)制數(shù)為:FFFFFFFF和和AAAAAAAA 函數(shù)調(diào)用方法為:函數(shù)調(diào)用方法為:setlinestyle(4,0 xAAAA,1);setlinestyle(4,0 xAAAA,1);用這種方法,可以根據(jù)需要定義各種線型。用這種方法,可以根據(jù)需要定義各種線型。第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)

42、礎(chǔ) 例例3.153.15演示系統(tǒng)預(yù)定義的四種線型演示系統(tǒng)預(yù)定義的四種線型# #include include #include conio.h#include conio.h#include stdio.h#include stdio.hvoid main()void main() int i,j,c,x=50,y=50,k=1;int i,j,c,x=50,y=50,k=1;int gdriver=DETECT,gmode;int gdriver=DETECT,gmode;printf(input color number.n);printf(input color number.n);sc

43、anf(scanf(“%d%d”,&c); /,&c); /* *輸入所選擇的顏色輸入所選擇的顏色* */ / initgraph(&gdriver,&gmode, c:tc)initgraph(&gdriver,&gmode, c:tc)cleardevice();cleardevice();setbkcolor(11); /setbkcolor(11); /* *設(shè)置背景色為淺青色設(shè)置背景色為淺青色* */ /setcolor(c); /setcolor(c); /* *設(shè)置前景色為輸入顏色設(shè)置前景色為輸入顏色* */ / 第三章 C語(yǔ)語(yǔ)言圖

44、圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ) for(j=1;j=2;j+)for(j=1;j=2;j+) for(i=0;i4;i+) for(i=0;i0;i-)for(i=520;i0;i-)putimage(i-1,216,w,COPY_PUT);putimage(i-1,216,w,COPY_PUT);/ /* *在不同下在不同下x x位置位置顯示顯示圖像圖像* */ /line(2,265,630,265);line(2,265,630,265);/ /* *畫公畫公路線路線* */ / getch();getch();/ /* *暫停暫停* */ /closegraph();closegraph();

45、 注:此處的顏色位置未必準(zhǔn)確注:此處的顏色位置未必準(zhǔn)確第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ) 3.6 常用畫圖函數(shù)簡(jiǎn)介常用畫圖函數(shù)簡(jiǎn)介 一、一、 直線類函數(shù)直線類函數(shù) 1 1指定兩點(diǎn)間畫一直線指定兩點(diǎn)間畫一直線 void far line(int x1,int y1, void far line(int x1,int y1, int x2,int y2); int x2,int y2); 用當(dāng)前顏色從點(diǎn)用當(dāng)前顏色從點(diǎn)( (x1,y1)x1,y1)到點(diǎn)(到點(diǎn)(x2x2,y2y2)畫一條直線,當(dāng)前位置畫一條直線,當(dāng)前位置( (CP)CP)不變。不變。2 2從當(dāng)前位置到(從當(dāng)前位置到(x x,y

46、y)點(diǎn)畫一條直線點(diǎn)畫一條直線 void far lineto(int x,int y); void far lineto(int x,int y); 用當(dāng)前顏色從當(dāng)前位置(用當(dāng)前顏色從當(dāng)前位置(CPCP)到(到(x x,y y)點(diǎn)畫一條直線,并把點(diǎn)畫一條直線,并把(CPCP)位置定位在(位置定位在(x x,y y)點(diǎn)。點(diǎn)。3 3從當(dāng)前坐標(biāo)以相對(duì)增量方式畫直線從當(dāng)前坐標(biāo)以相對(duì)增量方式畫直線 void far linerel(int deltax, int deltay) void far linerel(int deltax, int deltay) 從當(dāng)前位置到相對(duì)從當(dāng)前位置到相對(duì)CPCP位置

47、在位置在X X方向增大方向增大deltaxdeltax,在在Y Y方向增大方向增大deltaydeltay畫一直線。畫一直線。 第三章第三章 C語(yǔ)言圖形設(shè)計(jì)基礎(chǔ)語(yǔ)言圖形設(shè)計(jì)基礎(chǔ)3.1 3.1 屏幕設(shè)置屏幕設(shè)置 3.2 3.2 圖形顏色設(shè)置圖形顏色設(shè)置3.3 3.3 線的特性設(shè)定和填充線的特性設(shè)定和填充3.4 3.4 圖形模式下文本處理圖形模式下文本處理3.5 3.5 圖形存取處理圖形存取處理 3.6 3.6 常用畫圖函數(shù)簡(jiǎn)介常用畫圖函數(shù)簡(jiǎn)介3.7 3.7 繪圖程序?qū)嵗L圖程序?qū)嵗?第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ)二、 多邊形類函數(shù)1、畫矩形void far rectangle(int

48、left,int top, int right,int bottom);用當(dāng)前畫筆畫出由坐標(biāo)(left,top)及(right ,bottom)所定義的矩形。 2畫多邊形void far drawpoly(int numpoints, int *polypoints); 用當(dāng)前畫筆畫一多邊形,多邊形的頂點(diǎn)數(shù)為numpoints, *polypoints指向一個(gè)整型數(shù)組,共有numpoints*2個(gè)整數(shù)組成,每一對(duì)整數(shù)給出一個(gè)多邊形頂點(diǎn)(x,y)坐標(biāo)。第三章 C語(yǔ)語(yǔ)言圖圖形程序設(shè)計(jì)設(shè)計(jì)基礎(chǔ)礎(chǔ)三、 圓弧類函數(shù)1、畫一圓弧void far arc(int x,int y,int startangle, int endangle,int radius);以(x,y)為圓心,radius為半徑,從起角startangle到終角endangle,以當(dāng)前顏色畫一圓弧。2. 畫一橢圓弧void far ellipse(int x, int y, int

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論