




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、授課教師:臧輝 聯(lián)系方式: 教材:計算機(jī)圖形學(xué)王汝傳等教材:計算機(jī)圖形學(xué)王汝傳等 編著編著 人民郵電出版社人民郵電出版社 3 3月月8 8日課程內(nèi)容日課程內(nèi)容1 1、復(fù)習(xí)、復(fù)習(xí)2.4-2.52.4-2.5內(nèi)容,并請同學(xué)回答內(nèi)容,并請同學(xué)回答問題問題; ;2 2、3.1-3.23.1-3.2節(jié)內(nèi)容節(jié)內(nèi)容復(fù)習(xí)內(nèi)容:復(fù)習(xí)內(nèi)容:2.4 2.4 圖形核心系統(tǒng)簡介圖形核心系統(tǒng)簡介2.5 2.5 通用圖形軟件簡介通用圖形軟件簡介問題:舉個自己平時使用的圖形軟件問題:舉個自己平時使用的圖形軟件的應(yīng)用。的應(yīng)用。本節(jié)課重點(diǎn):本節(jié)課重點(diǎn):1 1、圖形系統(tǒng)的初始化和模式控制、圖形系統(tǒng)的初始化和模式控制; ;2 2、屏
2、幕窗口操作、屏幕窗口操作; ;3 3、顏色的設(shè)置、顏色的設(shè)置; ;4 4、調(diào)色板的應(yīng)用、調(diào)色板的應(yīng)用; ;第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(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)計算坐標(biāo);)計算坐標(biāo);(4 4)調(diào)用繪圖語句繪制實(shí)體。)調(diào)用繪圖語
3、句繪制實(shí)體。第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)3.1 屏幕設(shè)置屏幕設(shè)置一、屏幕顯示方式與坐標(biāo)系一、屏幕顯示方式與坐標(biāo)系 1. 1. 文本方式與字符坐標(biāo)系文本方式與字符坐標(biāo)系 在屏幕上只能顯示字符的方式稱為文本方式在屏幕上只能顯示字符的方式稱為文本方式。在文本方式下,屏幕上可以顯示的最小單位。在文本方式下,屏幕上可以顯示的最小單位是字符。為了能在指定位置顯示每個字符,是字符。為了能在指定位置顯示每個字符,C C語語言提供了字符坐標(biāo)系。言提供了字符坐標(biāo)系。左上角為坐左上角為坐標(biāo)原點(diǎn)(標(biāo)原點(diǎn)(1 1,1 1) 水平方向(水平方向(x x軸)分為軸)分為若干列若干列 垂直方向(垂直方向(y y軸
4、)分為軸)分為若干行若干行 第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)如:如:(8(8,2020)表示字符位于屏幕第)表示字符位于屏幕第8 8行第行第2020列列Turbo CTurbo C支持以下支持以下6 6種不同的顯示方式:種不同的顯示方式: (l l)BW40 BW40 黑白黑白25254040(2525行,行,4040列)列)(2 2)C40 C40 彩色彩色25254040(3 3)BW80 BW80 黑白黑白25258080(4 4)C80 C80 彩色彩色25258080(5 5)MONO MONO 單色單色25258080(6 6)C4350C4350彩色彩色43438080(
5、EGAEGA),),50508080(VGVG) 顯示方式不同,所顯示的字符的列數(shù)和行數(shù)也不一樣顯示方式不同,所顯示的字符的列數(shù)和行數(shù)也不一樣,顏色也有區(qū)別,顏色也有區(qū)別, ,屏幕上所顯示的字符數(shù)量也不一樣。屏幕上所顯示的字符數(shù)量也不一樣。 第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)2.2.圖形方式與點(diǎn)坐標(biāo)圖形方式與點(diǎn)坐標(biāo) 在屏幕上顯示的圖形稱圖形方式。在屏幕上顯示的圖形稱圖形方式。 屏幕是由像素點(diǎn)組成的,其像素點(diǎn)多少決定了屏幕的分辨率。屏幕是由像素點(diǎn)組成的,其像素點(diǎn)多少決定了屏幕的分辨率。分辨率越高,顯示圖形越細(xì)致,質(zhì)量越好。分辨率越高,顯示圖形越細(xì)致,質(zhì)量越好。 在圖形方式下,屏幕上每個像素
6、的顯示位置用點(diǎn)坐標(biāo)來描述。在圖形方式下,屏幕上每個像素的顯示位置用點(diǎn)坐標(biāo)來描述。點(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語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ) 分辨率不同,水平方向和垂直方向的點(diǎn)數(shù)也不一樣,即分辨率不同,水平方向和垂直方向的點(diǎn)數(shù)也不一樣,即其其maxxmaxx,maxymaxy數(shù)值也不同。數(shù)值也不同。 在在Turbo CTurbo C中,坐標(biāo)數(shù)據(jù)可以用兩種形式給出:一種是中,坐標(biāo)數(shù)據(jù)可以用兩種形式給出:一種是絕對坐標(biāo)絕對坐標(biāo); ;另一種是相對坐
7、標(biāo)。另一種是相對坐標(biāo)。絕對坐標(biāo)的參考點(diǎn)是坐標(biāo)的原點(diǎn)(絕對坐標(biāo)的參考點(diǎn)是坐標(biāo)的原點(diǎn)(0 0,0 0),),x x和和y y只能取規(guī)只能取規(guī)定范圍內(nèi)的正整數(shù)。定范圍內(nèi)的正整數(shù)。相對坐標(biāo)是相對相對坐標(biāo)是相對“當(dāng)前點(diǎn)當(dāng)前點(diǎn)”的坐標(biāo),所以其坐標(biāo)的參考點(diǎn)的坐標(biāo),所以其坐標(biāo)的參考點(diǎn)不是坐標(biāo)系的原點(diǎn),而是當(dāng)前點(diǎn)。在相對坐標(biāo)中,不是坐標(biāo)系的原點(diǎn),而是當(dāng)前點(diǎn)。在相對坐標(biāo)中,x x和和y y的的取值是相對于當(dāng)前點(diǎn)在取值是相對于當(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)系
8、坐標(biāo)值的范圍決定于所使用適配器顯示分辨率。第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)二、圖形驅(qū)動程序與圖形模式二、圖形驅(qū)動程序與圖形模式1. 1. 圖形驅(qū)動程序圖形驅(qū)動程序 支持不同圖形適配器的一組程序支持不同圖形適配器的一組程序 由于圖形顯示器的種類繁多,其控制方式也各有差異,所以要顯由于圖形顯示器的種類繁多,其控制方式也各有差異,所以要顯示圖形就需先裝入相應(yīng)的圖形驅(qū)動程序。示圖形就需先裝入相應(yīng)的圖形驅(qū)動程序。 Turbo C Turbo C提供了幾種圖形驅(qū)動程序可支持的圖形適配器。下表列出提供了幾種圖形驅(qū)動程序可支持的圖形適配器。下表列出驅(qū)動程序其相應(yīng)的符號常量和規(guī)定值。驅(qū)動程序其相應(yīng)的符號
9、常量和規(guī)定值。 符號常量 數(shù) 值 符號常量符號常量 數(shù)數(shù) 值值DETECTDETECTCGACGAMCGAMCGAEGAEGAEGA64EGA64EGAMONOEGAMONO 0 1 2 3 4 5 IBM8514IBM8514HERCMONOHERCMONOATT400ATT400VGAVGAPC3270PC3270 6 6 7 7 8 8 9 9 10 10第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)2. 2. 圖形模式圖形模式 每種圖形顯示器有不同的圖形顯示模式每種圖形顯示器有不同的圖形顯示模式 由于每種圖形顯示器各有幾種不同的圖形顯示由于每種圖形顯示器各有幾種不同的圖形顯示模式,因此,要顯
10、示圖形就必須確定所用的顯示模式,因此,要顯示圖形就必須確定所用的顯示模式,也就是說,要顯示圖形,不但要先裝入相模式,也就是說,要顯示圖形,不但要先裝入相應(yīng)驅(qū)動程序,而且還要決定所用的顯示模式。不應(yīng)驅(qū)動程序,而且還要決定所用的顯示模式。不同的圖形驅(qū)動程序有不同的圖形模式;即使在同同的圖形驅(qū)動程序有不同的圖形模式;即使在同一圖形驅(qū)動程序下,也可能會有幾種圖形模式。一圖形驅(qū)動程序下,也可能會有幾種圖形模式。 圖形驅(qū)動程序及其相應(yīng)模式具體見書圖形驅(qū)動程序及其相應(yīng)模式具體見書P53P53表表3.23.2第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)驅(qū)動程序驅(qū)動程序(driver) (driver) 圖形模式圖
11、形模式gmodegmode值值分辨率分辨率調(diào)色板調(diào)色板 CGACGAC0CGAC0 0 0320320200200 C0 C0CGAC1CGAC1 1 1320320200200 C1 C1CGAC2CGAC2 2 2320320200200 C2 C2CGAC3CGAC3 3 3320320200200 C3 C3CGAHI CGAHI 4 4640640200200 2 2色色 MCGAMCGAMCGAC0MCGAC0 0 0320320200200 C0 C0MCGAC1MCGAC1 1 1320320200200 C1 C1MCGAC2MCGAC2 2 2320320200200 C2
12、 C2MCGAC3MCGAC3 3 3320320200200 C3 C3MCGAMEDMCGAMED 4 4640640200200 2 2色色MCGAHIMCGAHI 5 5640640480480 2 2色色圖形驅(qū)動程序及其相應(yīng)模式(部分)圖形驅(qū)動程序及其相應(yīng)模式(部分)三三 、圖形系統(tǒng)初始化和模式控制、圖形系統(tǒng)初始化和模式控制 Turbo C Turbo C中圖形函數(shù)均在頭文件中圖形函數(shù)均在頭文件“graphics.h”“graphics.h”中定義,所以,凡是在程序中要調(diào)用這些圖形函數(shù)中定義,所以,凡是在程序中要調(diào)用這些圖形函數(shù),都必須在程序文件的開頭寫上文件包含命令:,都必須在程序
13、文件的開頭寫上文件包含命令: # include # include graphics.hgraphics.h第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)1. 1. 圖形系統(tǒng)初始化圖形系統(tǒng)初始化 (1).(1).問題的提出問題的提出 一般缺省情況下,屏幕為一般缺省情況下,屏幕為8080列列2525行的文本方行的文本方式。在文本方式下,所有的圖形函數(shù)均不能操作式。在文本方式下,所有的圖形函數(shù)均不能操作,因此在使用圖形函數(shù)繪圖之前,必須將屏幕顯,因此在使用圖形函數(shù)繪圖之前,必須將屏幕顯示適配器設(shè)置為一種圖形模式,這就是圖形初始示適配器設(shè)置為一種圖形模式,這就是圖形初始化過程?;^程。 圖形系統(tǒng)初始化首
14、先要調(diào)用圖形系統(tǒng)初始化首先要調(diào)用initgraph()initgraph()函函數(shù),它通過從磁盤上裝入一個圖形驅(qū)動程序,來數(shù),它通過從磁盤上裝入一個圖形驅(qū)動程序,來初始化圖形化系統(tǒng),并將系統(tǒng)設(shè)置為圖形模式。初始化圖形化系統(tǒng),并將系統(tǒng)設(shè)置為圖形模式。 第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ) (2). (2).初始化函數(shù)初始化函數(shù)initgraph()initgraph()函數(shù)格式為:函數(shù)格式為:void far initgraph(int void far initgraph(int * *gdrivergdriver;int int * *gmode,char gmode,char * *p
15、ath);path);gdrivergdriver:是一個整型值,用來指定要裝入的圖形:是一個整型值,用來指定要裝入的圖形驅(qū)動程序,該值在頭文件驅(qū)動程序,該值在頭文件 graphics.h graphics.h中定義,如中定義,如p51p51表表3.l3.l所示。所示。gmode:gmode:是一個整型值,用來設(shè)置圖形顯示模式。圖是一個整型值,用來設(shè)置圖形顯示模式。圖形顯示模式?jīng)Q定了顯示的分辨率,可同時顯示的顏色形顯示模式?jīng)Q定了顯示的分辨率,可同時顯示的顏色的多少,調(diào)色板的設(shè)置方式等,幾種不同的圖形顯示的多少,調(diào)色板的設(shè)置方式等,幾種不同的圖形顯示模式如模式如p53p53表表3.23.2所示。
16、所示。第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)path:path:是一個字符串,用來指明圖形驅(qū)動程序是一個字符串,用來指明圖形驅(qū)動程序所在路徑。如果驅(qū)動程序就在用戶當(dāng)前目錄下所在路徑。如果驅(qū)動程序就在用戶當(dāng)前目錄下,則該參數(shù)可以空字符串,否則應(yīng)給出具體路,則該參數(shù)可以空字符串,否則應(yīng)給出具體路徑名。一般情況下,徑名。一般情況下,Turbo CTurbo C安裝在安裝在C C盤的盤的TCTC目目錄中,則該路徑為:錄中,則該路徑為:C:TCC:TC,如果寫在參數(shù)中則,如果寫在參數(shù)中則為為“C:TC”“C:TC”。注意:前兩個參數(shù)實(shí)際上是整型指針,調(diào)用時注意:前兩個參數(shù)實(shí)際上是整型指針,調(diào)用時應(yīng)加上
17、地址運(yùn)算符應(yīng)加上地址運(yùn)算符“”。 第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)對對farfar關(guān)鍵字的解釋:關(guān)鍵字的解釋:farfar并非并非C C語言的標(biāo)準(zhǔn)關(guān)鍵字,語言的標(biāo)準(zhǔn)關(guān)鍵字,主要是遠(yuǎn)程鏈接的作用,可以將其視為遠(yuǎn)指針函數(shù),以主要是遠(yuǎn)程鏈接的作用,可以將其視為遠(yuǎn)指針函數(shù),以內(nèi)存管理是段式管理為例,沒有內(nèi)存管理是段式管理為例,沒有farfar這個關(guān)鍵字時,內(nèi)這個關(guān)鍵字時,內(nèi)存地址僅是段內(nèi)跳轉(zhuǎn),有存地址僅是段內(nèi)跳轉(zhuǎn),有farfar這個關(guān)鍵字時內(nèi)存地址是這個關(guān)鍵字時內(nèi)存地址是段間跳轉(zhuǎn)。段間跳轉(zhuǎn)。int far int far 或者或者 void far void far 表示要編譯器給聲表示要編譯
18、器給聲明的這些量分配在明的這些量分配在 遠(yuǎn)處的存儲器遠(yuǎn)處的存儲器(RAM)(RAM)中,即分配到中,即分配到 64K 64K 以外的以外的 存儲地址中。存儲地址中。 64K 64K 作為一個作為一個“段段”(Segment),”(Segment),是是 PC PC 機(jī)機(jī) 80 x86 80 x86 時期的老概念。超過時期的老概念。超過64K 64K 就是就是 “ “遠(yuǎn)遠(yuǎn)”, FAR FAR 就是就是 “ “遠(yuǎn)遠(yuǎn)”的英文。的英文。 幾個頭幾個頭文件文件graphics.hstdlib.hconio.hstdio.h第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)(3)(3)初始化方式初始化方式已知顯示器
19、類型的圖形系統(tǒng)初始化已知顯示器類型的圖形系統(tǒng)初始化 已知所用圖形顯示器的種類和要使用的圖形模式,初已知所用圖形顯示器的種類和要使用的圖形模式,初始化圖形系統(tǒng)可如下面程序所示:始化圖形系統(tǒng)可如下面程序所示:例例3.13.1#include graphics.h#include graphics.h main() main()int gdriver,gmode;int gdriver,gmode; gdriver=CGA; gdriver=CGA;/ /* *設(shè)置驅(qū)動程序?yàn)樵O(shè)置驅(qū)動程序?yàn)镃GACGA* */ / gmode=CGAC0; gmode=CGAC0;/ /* *選用選用CGACGA圖形
20、模式圖形模式* */ / initgraph(&gdriver,&gmode,c:TC); initgraph(&gdriver,&gmode,c:TC);/ /* *初始化圖形系統(tǒng)初始化圖形系統(tǒng)* */ / bar3d(10,20,50,80,0,0); / bar3d(10,20,50,80,0,0); /* *畫一實(shí)心長方形畫一實(shí)心長方形* */ / getch(); getch(); / /* *等待按一鍵結(jié)束等待按一鍵結(jié)束* */ / closegraph(); closegraph();/ /* *關(guān)閉圖形系統(tǒng),回到文本方式關(guān)閉圖形系統(tǒng),回到文本方式
21、* */ / 此處也可用整型常數(shù)此處也可用整型常數(shù)代替符號常量代替符號常量gdriver=1; gmode=0;gdriver=1; gmode=0;第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)不知顯示器類型的圖形初始化。不知顯示器類型的圖形初始化。 Turbo C Turbo C提供了一個對圖形顯示器硬件測試提供了一個對圖形顯示器硬件測試的函數(shù)的函數(shù)detectgraphdetectgraph()。()。 它的格式為:它的格式為:void far detectgraph(int void far detectgraph(int * *gdriver,int gdriver,int * *gmod
22、e);gmode);該函數(shù)在計算機(jī)有圖形適配器的情況下,確定該函數(shù)在計算機(jī)有圖形適配器的情況下,確定圖形適配器的類型,若系統(tǒng)有圖形適配器,則圖形適配器的類型,若系統(tǒng)有圖形適配器,則返回適合于適配器的圖形驅(qū)動程序的代碼,用返回適合于適配器的圖形驅(qū)動程序的代碼,用gdrivergdriver指向的整型量表示,該函數(shù)把指向的整型量表示,該函數(shù)把gmodegmode所所指的變量設(shè)置為適配器所能支持的最高分辨率指的變量設(shè)置為適配器所能支持的最高分辨率。若系統(tǒng)無圖形適配器,則。若系統(tǒng)無圖形適配器,則gdrivergdriver所指變量為所指變量為-2-2。第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)例例3.2
23、3.2#include stdio.h#include stdio.h#include “conio.h”#include “conio.h”#include “stdlib.h”#include “stdlib.h”#include graphics.h#include graphics.hmain()main() int gdriver,gmode;int gdriver,gmode;detectgraph(&gdriver,&gmode);detectgraph(&gdriver,&gmode);/ /* *測試結(jié)果存放于測試結(jié)果存放于gdriver,gm
24、odegdriver,gmode中中* */ /if(gdriver0)if(gdriver=3a=3,那么將顯,那么將顯示值最大的那種顏示值最大的那種顏色,例如色,例如CGAC0CGAC0,將顯示黃色將顯示黃色(2 2)高分辨率)高分辨率高分辨率方式顯示高分辨率方式顯示640640200200個像素點(diǎn),只有兩種個像素點(diǎn),只有兩種顏色。黑色背景和彩色前景。由于顏色。黑色背景和彩色前景。由于CGACGA本身原因本身原因,背景色就是硬件所認(rèn)為的背景色,可用,背景色就是硬件所認(rèn)為的背景色,可用setbkcolorsetbkcolor參照課本參照課本P60P60表表3.33.3設(shè)置,前景色(即設(shè)置,前
25、景色(即畫筆顏色)始終是青色。畫筆顏色)始終是青色。第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ) 例例3.123.12在高分辨率下畫一青色圓。在高分辨率下畫一青色圓。# include graphics.h# include graphics.h#include conio.h#include conio.hvoid main()void main() int gdriver=CGA,gmode=CGAHI;int gdriver=CGA,gmode=CGAHI;initgraph(&gdriver,&gmode, );initgraph(&gdriver,&gmo
26、de, );cleardevice();cleardevice();setbkcolor(3);setbkcolor(3);circle(160,100,50);circle(160,100,50);circle(160,100,25);circle(160,100,25);getch();getch();closegraph();closegraph(); 程序執(zhí)行后,在青色屏幕上顯示兩個白色圓圖形。程序執(zhí)行后,在青色屏幕上顯示兩個白色圓圖形。 第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)2 2、EGAEGA調(diào)色板調(diào)色板 對對EGAEGA來說,總共可以有來說,總共可以有6464種顏色種顏色, ,
27、但只有但只有一個調(diào)色板,這個調(diào)色板只有一個調(diào)色板,這個調(diào)色板只有1616項(xiàng),可同時顯項(xiàng),可同時顯示示1616種顏色。默認(rèn)的這種顏色。默認(rèn)的這1616種顏色可參看種顏色可參看P60P60表表3.33.3。表。表3.53.5(見書(見書P63P63)的顏色不準(zhǔn)確,是隨機(jī))的顏色不準(zhǔn)確,是隨機(jī)選取的,不作為參考。選取的,不作為參考。 第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)3 3、改變調(diào)色板的一種顏色、改變調(diào)色板的一種顏色 void far setpalettevoid far setpalette(int oldcolor,int int oldcolor,int newcolor); newco
28、lor); 此函數(shù)改變屏幕系統(tǒng)所顯示顏色。它把此函數(shù)改變屏幕系統(tǒng)所顯示顏色。它把調(diào)色板調(diào)色板oldcoloroldcolor變?yōu)樽優(yōu)閚ewcolornewcolor。(1). (1). 對于對于CGACGA模式,模式, 只有背景色能改變,而背景色總是取只有背景色能改變,而背景色總是取oldcolor=0oldcolor=0例如,下列語句可把背景色改成綠色:例如,下列語句可把背景色改成綠色: setpalette(0,GREEN); setpalette(0,GREEN);Turbo CTurbo C中好像不支持對該函中好像不支持對該函數(shù)的執(zhí)行數(shù)的執(zhí)行第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ) (
29、2). (2).對于對于EGAEGA模式模式可以用可以用setpalette( )setpalette( )函數(shù)將某一種顏色設(shè)置函數(shù)將某一種顏色設(shè)置為為16 16 種不同顏色中的一種。種不同顏色中的一種。oldcoloroldcolor是是表表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)色(BLUEB
30、LUE)均變?yōu)榫G色()均變?yōu)榫G色(EGA-GREENEGA-GREEN)第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)三、獲取顏色信息三、獲取顏色信息1. 1. 讀取當(dāng)前背景顏色讀取當(dāng)前背景顏色int far getbkcolor(void);int far getbkcolor(void);該函數(shù)返回當(dāng)前背景顏色該函數(shù)返回當(dāng)前背景顏色, ,其背景顏色值如表其背景顏色值如表3.33.3所示。所示。例如:下列語句顯示當(dāng)前背景顏色:例如:下列語句顯示當(dāng)前背景顏色:printf(background color is printf(background color is %d,getbkcolor();%
31、d,getbkcolor();2. 2. 讀取當(dāng)前畫圖顏色讀取當(dāng)前畫圖顏色int far getcolor(void);int far getcolor(void);該函數(shù)返回當(dāng)前畫筆顏色。該函數(shù)返回當(dāng)前畫筆顏色。例如,在例如,在CGAC2CGAC2圖形模式下,調(diào)色板包含四種顏色圖形模式下,調(diào)色板包含四種顏色:0 0為背景色,為背景色,1 1為綠色,為綠色,2 2為紅色,為紅色,3 3為棕色。如為棕色。如果果 getcolor( ) getcolor( )函數(shù)的返回值為函數(shù)的返回值為 1 1,則當(dāng)前畫筆,則當(dāng)前畫筆色為綠色。色為綠色。第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)3.3.讀取最高可用
32、顏色數(shù)讀取最高可用顏色數(shù)int far getmaxcolor(void);int far getmaxcolor(void); 該函數(shù)返回當(dāng)前屏幕模式下最大有效顏色值。在該函數(shù)返回當(dāng)前屏幕模式下最大有效顏色值。在EGAEGA模式下模式下,getmaxcolor()getmaxcolor()函數(shù)返回最大值為函數(shù)返回最大值為1515,這表明用,這表明用setcolor()setcolor()函函數(shù)值在數(shù)值在0 01515有效;在有效;在CGACGA低分辨率模式中低分辨率模式中,getmaxcolor(),getmaxcolor()函數(shù)函數(shù)返回最大值為返回最大值為3 3,這表明用,這表明用setc
33、olor()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))處畫一規(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 getpi
34、xel(int x,int y);int far getpixel(int x,int y);此函數(shù)返回指定點(diǎn)此函數(shù)返回指定點(diǎn)x x,y y位置上的像素顏色。位置上的像素顏色。第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)例例3.14 3.14 在不同位置畫點(diǎn)在不同位置畫點(diǎn) #include graphics.h#include graphics.h#include conio.h#include conio.hvoid main()void main()int gdriver=DETECT,gmode;int gdriver=DETECT,gmode;int color,i,max;int col
35、or,i,max;initgraph(&gdriver,&gmode, );initgraph(&gdriver,&gmode, );max=getmaxcolor();max=getmaxcolor();for(i=0;i20;i+)for(i=0;i20;i+)putpixel(50+iputpixel(50+i* *10,20,max);10,20,max);color=getpixel(50,20);color=getpixel(50,20);putpixel(150,150,color);putpixel(150,150,color);getch();
36、getch();closegraph();closegraph(); 得到當(dāng)前屏幕得到當(dāng)前屏幕模式下最大有模式下最大有效顏色值效顏色值以(以(5050,2020)為)為起點(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)行畫線時,其默認(rèn)值均屬于用畫線函數(shù)進(jìn)行畫線時,其默認(rèn)值
37、均屬于一像素點(diǎn)寬度的實(shí)線。為了改變線形與線一像素點(diǎn)寬度的實(shí)線。為了改變線形與線寬,寬,Turbo C提供了可以改變線型和線寬提供了可以改變線型和線寬的函數(shù)。的函數(shù)。void far setlinestyle(int linestyle, unsigned pattern,int width); 第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)該函數(shù)所用三個參數(shù)含義如下:該函數(shù)所用三個參數(shù)含義如下:(1 1)linestyle:linestyle:為整型值,用來定義所畫直線類型為整型值,用來定義所畫直線類型 表中前四種為系統(tǒng)預(yù)定義的類型,第五個為用戶自表中前四種為系統(tǒng)預(yù)定義的類型,第五個為用戶自定義類型
38、。定義類型。 代 號 名 代代 碼碼 說說 明明 SOLID-LINE 0 0 實(shí)線實(shí)線 DOTTED-LINE 1 1 點(diǎn)線點(diǎn)線 CENTER-LINE 2 2 中心線中心線 DASHED-LINE 3 3 虛線虛線 USERBIT-LINE USERBIT-LINE 4 4 用戶定義的線形用戶定義的線形線型的代線型的代號說明號說明第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)(2 2)patternpattern:無符號整型數(shù)。該參數(shù)在需要用戶自定義線型時使用,如果:無符號整型數(shù)。該參數(shù)在需要用戶自定義線型時使用,如果是使用前四種系統(tǒng)預(yù)定義的線型,則該參數(shù)可取是使用前四種系統(tǒng)預(yù)定義的線型,則該參
39、數(shù)可取0 0值。值。 (3) width (3) width:整型數(shù)。指定所畫直線的粗細(xì),以像素為單位:整型數(shù)。指定所畫直線的粗細(xì),以像素為單位, ,分為兩種情況分為兩種情況通過上述幾個參數(shù)的不同組合,就可以根據(jù)需要畫出不同類型、不同粗細(xì)的通過上述幾個參數(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,
40、20,150,70);從從(10,20)(10,20)到到(150,70)(150,70)用一條紅色的用一條紅色的3 3個像素寬點(diǎn)劃線個像素寬點(diǎn)劃線符號常量符號常量值值含含 義義NORM_WIDTHNORM_WIDTH1 1 1個像素寬(缺省) THICK_WIDTH THICK_WIDTH3 3 3 3個像素寬個像素寬第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ) 當(dāng)函數(shù)當(dāng)函數(shù)setlinestylesetlinestyle的第一個參數(shù)為的第一個參數(shù)為USERBIT-LINEUSERBIT-LINE(或(或4 4)時,可以由用戶自己定義直線類型。此時,第三個參數(shù)意義時,可以由用戶自己定義直線類型。
41、此時,第三個參數(shù)意義同前,直線類型在第二個參數(shù)中定義,該參數(shù)是一個同前,直線類型在第二個參數(shù)中定義,該參數(shù)是一個1616位二位二進(jìn)制碼,每一位(進(jìn)制碼,每一位(bitbit)表示一個像素。某一位置)表示一個像素。某一位置1 1時表示直時表示直線上相應(yīng)位置以當(dāng)前顏色顯示;如果某位為線上相應(yīng)位置以當(dāng)前顏色顯示;如果某位為0 0,則其對應(yīng)像素,則其對應(yīng)像素不顯示或不改變(仍用原來顏色)。不顯示或不改變(仍用原來顏色)。 例如:例如:1111 1111 1111 11111111 1111 1111 1111 16 16位全置位全置1 1,因此畫一條,因此畫一條1616個像素的點(diǎn)實(shí)線(就是實(shí)線)。個像
42、素的點(diǎn)實(shí)線(就是實(shí)線)。 1010 1010 1010 1010 1010 1010 1010 1010 則隔位置則隔位置1 1,因此畫一條,因此畫一條1616個像素的點(diǎn)虛線(就是點(diǎn)線)。個像素的點(diǎn)虛線(就是點(diǎn)線)。 在實(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ù),故上面兩個例位十六進(jìn)制數(shù),故上面兩個例子轉(zhuǎn)換為十六進(jìn)制數(shù)為:子轉(zhuǎn)換為十六進(jìn)制數(shù)為:FFFFFFFF和和AAAAAAAA 函數(shù)調(diào)用方法為:函數(shù)調(diào)用方法為:setlinestyle(4,0 xAAAA,
43、1);setlinestyle(4,0 xAAAA,1);用這種方法,可以根據(jù)需要定義各種線型。用這種方法,可以根據(jù)需要定義各種線型。第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(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;
44、int gdriver=DETECT,gmode;printf(input color number.n);printf(input color number.n);scanf(“%d”,&c); /scanf(“%d”,&c); /* *輸入所選擇的顏色輸入所選擇的顏色* */ / initgraph(&gdriver,&gmode, c:tc)initgraph(&gdriver,&gmode, c:tc)cleardevice();cleardevice();setbkcolor(11); /setbkcolor(11); /* *設(shè)置背景
45、色為淺青色設(shè)置背景色為淺青色* */ /setcolor(c); /setcolor(c); /* *設(shè)置前景色為輸入顏色設(shè)置前景色為輸入顏色* */ / 第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(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,
46、630,265);/ /* *畫公路線畫公路線* */ / getch();getch();/ /* *暫停暫停* */ /closegraph();closegraph(); 注:此處的顏色位置未必準(zhǔn)確注:此處的顏色位置未必準(zhǔn)確第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ) 3.6 常用畫圖函數(shù)簡介常用畫圖函數(shù)簡介 一、一、 直線類函數(shù)直線類函數(shù) 1指定兩點(diǎn)間畫一直線指定兩點(diǎn)間畫一直線 void far line(int x1,int y1, int x2,int y2); 用當(dāng)前顏色從點(diǎn)用當(dāng)前顏色從點(diǎn)(x1,y1)到點(diǎn)(到點(diǎn)(x2,y2)畫一條直)畫一條直線,當(dāng)前位置線,當(dāng)前位置(CP)不變。不
47、變。2從當(dāng)前位置到(從當(dāng)前位置到(x,y)點(diǎn)畫一條直線)點(diǎn)畫一條直線 void far lineto(int x,int y); 用當(dāng)前顏色從當(dāng)前位置(用當(dāng)前顏色從當(dāng)前位置(CP)到()到(x,y)點(diǎn)畫)點(diǎn)畫一條直線,并把(一條直線,并把(CP)位置定位在()位置定位在(x,y)點(diǎn)。)點(diǎn)。3從當(dāng)前坐標(biāo)以相對增量方式畫直線從當(dāng)前坐標(biāo)以相對增量方式畫直線 void far linerel(int deltax, int deltay) 從當(dāng)前位置到相對從當(dāng)前位置到相對CP位置在位置在X方向增大方向增大deltax,在在Y方向增大方向增大deltay畫一直線。畫一直線。第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)二、 多邊形類函數(shù)1、畫矩形void far rectangle(int 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指向一個整型數(shù)組,共有n
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第五單元 同步測試卷-七年級語文下學(xué)期模擬金卷(部編版)(解析版)
- 成人高考數(shù)學(xué)(理)全真模擬試卷(2025年湖北省高升專版基礎(chǔ)題型強(qiáng)化)
- 2025餐飲合伙合同樣本
- 學(xué)校奶茶店項(xiàng)目計劃書
- 游戲策劃筆試題目及答案
- 社區(qū)大數(shù)據(jù)與社區(qū)信息化創(chuàng)新驅(qū)動發(fā)展戰(zhàn)略基礎(chǔ)知識點(diǎn)歸納
- 2025版企業(yè)貸款合同模板
- 一年級道德與法治下冊第二單元學(xué)校生活真快樂4我進(jìn)步我高興教案蘇教版
- 商業(yè)空間能耗分析基礎(chǔ)知識點(diǎn)歸納
- 2025合同范本貨物采購合同模板
- 石材養(yǎng)護(hù)報價表范本
- 呈閱件(清流縣城市管理辦法)
- 公務(wù)員職務(wù)與及職級并行規(guī)定課件
- 紅河縣年產(chǎn)50噸珍珠棉建設(shè)項(xiàng)目環(huán)評報告
- 術(shù)中大出血的搶救及護(hù)理配合
- 商務(wù)英語聽說-對外經(jīng)濟(jì)貿(mào)易大學(xué)中國大學(xué)mooc課后章節(jié)答案期末考試題庫2023年
- 第十二講 建設(shè)社會主義生態(tài)文明PPT習(xí)概論2023優(yōu)化版教學(xué)課件
- 國家濕地公園總體規(guī)劃導(dǎo)則
- 閬中張飛牛肉名稱的來歷
- 2021上半年江津區(qū)社區(qū)專職工作者《綜合基礎(chǔ)知識》試題
- 2023上海虹口區(qū)初三語文一模作文寫作指導(dǎo)及范文:這也是我的舞臺
評論
0/150
提交評論