




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第三章 C語言圖形程序設(shè)計基礎(chǔ) 屏幕設(shè)置屏幕設(shè)置 圖形顏色設(shè)置圖形顏色設(shè)置 線的特性設(shè)定和填充線的特性設(shè)定和填充 圖形模式下文本處理圖形模式下文本處理 圖形存取處理圖形存取處理 常用畫圖函數(shù)常用畫圖函數(shù) 繪圖程序?qū)嵗L圖程序?qū)嵗?在屏幕上進(jìn)行繪圖一般要執(zhí)行如下步驟在屏幕上進(jìn)行繪圖一般要執(zhí)行如下步驟: :(1 1)設(shè)置屏幕為圖形方式;)設(shè)置屏幕為圖形方式;(2 2)選擇背景與實體顏色;)選擇背景與實體顏色;(3 3)計算坐標(biāo);)計算坐標(biāo);(4 4)調(diào)用繪圖語句繪制實體。)調(diào)用繪圖語句繪制實體。 第一章第一章 C語言圖形設(shè)計基礎(chǔ)語言圖形設(shè)計基礎(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ù)簡介常用畫圖函數(shù)簡介3.7 3.7 繪圖程序?qū)嵗L圖程序?qū)嵗?第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)3.1 屏幕設(shè)置屏幕設(shè)置一、屏幕顯示方式與坐標(biāo)系一、屏幕顯示方式與坐標(biāo)系 1. 1. 文本方式與字符坐標(biāo)系文本方式與字符坐標(biāo)系 在屏幕上只能顯示字符的方式稱為文本方式。在文本在屏幕上只能顯示字符的方式稱為文本方式。在文本方式下,屏幕上可以顯示的最小單位是字符。為了能在方式下,屏幕上可以顯示的最小單位是字
3、符。為了能在指定位置顯示每個字符,指定位置顯示每個字符,C語言提供了字符坐標(biāo)系。語言提供了字符坐標(biāo)系。左上角為坐左上角為坐標(biāo)原點(標(biāo)原點(1 1,1 1) 水平方向(水平方向(x x軸)分為軸)分為若干列若干列 垂直方向(垂直方向(y y軸)分為軸)分為若干行若干行 第三章 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
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語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)2.2.圖形方式與點坐標(biāo)圖形方式與點坐標(biāo) 在屏幕上顯示的圖形稱圖形方式。在屏幕上
5、顯示的圖形稱圖形方式。 屏幕是由像素點組成的,其像素點多少決定了屏幕的分辨率。屏幕是由像素點組成的,其像素點多少決定了屏幕的分辨率。分辨率越高,顯示圖形越細(xì)致,質(zhì)量越好。分辨率越高,顯示圖形越細(xì)致,質(zhì)量越好。 在圖形方式下,屏幕上每個像素的顯示位置用點坐標(biāo)來描述。在圖形方式下,屏幕上每個像素的顯示位置用點坐標(biāo)來描述。點坐標(biāo)系點坐標(biāo)系左上角為坐左上角為坐標(biāo)原點(標(biāo)原點(0 0,0 0) 垂直方向為垂直方向為y y軸,自上軸,自上向下向下 水平方向水平方向為為x x軸,自軸,自左向右左向右 第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ) 分辨率不同,水平方向和垂直方向的點數(shù)也不一樣,即其分辨率不同,水平
6、方向和垂直方向的點數(shù)也不一樣,即其maxxmaxx,maxymaxy數(shù)值也不同。數(shù)值也不同。 在在Turbo CTurbo C中,坐標(biāo)數(shù)據(jù)可以用兩種形式給出:一種是中,坐標(biāo)數(shù)據(jù)可以用兩種形式給出:一種是絕對坐標(biāo)絕對坐標(biāo); ;另另一種是一種是相對坐標(biāo)相對坐標(biāo)。絕對坐標(biāo)絕對坐標(biāo)的參考點是坐標(biāo)的原點(的參考點是坐標(biāo)的原點(0 0,0 0),),x x和和y y只能取規(guī)定范圍內(nèi)的只能取規(guī)定范圍內(nèi)的正整數(shù)。正整數(shù)。相對坐標(biāo)相對坐標(biāo)是相對是相對“當(dāng)前點當(dāng)前點”的坐標(biāo),所以其坐標(biāo)的參考點不是坐標(biāo)系的坐標(biāo),所以其坐標(biāo)的參考點不是坐標(biāo)系的原點,而是當(dāng)前點。在相對坐標(biāo)中,的原點,而是當(dāng)前點。在相對坐標(biāo)中,x x和
7、和y y的取值是相對于當(dāng)前點在的取值是相對于當(dāng)前點在x x方向和方向和y y方向上的增量,方向上的增量,x x和和y y可以是正整數(shù),也可以是負(fù)整數(shù)。可以是正整數(shù),也可以是負(fù)整數(shù)。點坐標(biāo)系坐標(biāo)值的范圍決定于所使用適配器顯示分辨率。點坐標(biāo)系坐標(biāo)值的范圍決定于所使用適配器顯示分辨率。第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)二、圖形驅(qū)動程序與圖形模式二、圖形驅(qū)動程序與圖形模式1. 1. 圖形驅(qū)動程序圖形驅(qū)動程序 支持不同圖形適配器的一組程序支持不同圖形適配器的一組程序 由于圖形顯示器的種類繁多,其控制方式也各有差異,所以要顯由于圖形顯示器的種類繁多,其控制方式也各有差異,所以要顯示圖形就需先裝入相應(yīng)
8、的圖形驅(qū)動程序。示圖形就需先裝入相應(yīng)的圖形驅(qū)動程序。 Turbo C Turbo C提供了幾種圖形驅(qū)動程序可支持的圖形適配器。下表列出提供了幾種圖形驅(qū)動程序可支持的圖形適配器。下表列出驅(qū)動程序其相應(yīng)的符號常量和規(guī)定值。驅(qū)動程序其相應(yīng)的符號常量和規(guī)定值。 符號常量符號常量 數(shù)數(shù) 值值 符號常量符號常量 數(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語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)2. 2. 圖形模式圖形模式 每種圖形顯示器有不同的圖形顯示模式每種圖形顯示器有不同的圖形顯示模式 由于每種圖形顯示器各有幾種不同的圖形顯示由于每種圖形顯示器各有幾種不同的圖形顯示模式,因此,要顯示圖形就必須確定所用的顯示模式,因此,要顯示圖形就必須確定所用的顯示模式,也就是說,要顯示圖形,不但要先裝入相模式,也就是說,要顯示圖形,不但要先裝入相應(yīng)驅(qū)動程序,而且還要決定所用的顯示模式。不應(yīng)驅(qū)動程序,而且還要決定所用的顯示模式。不同的圖形驅(qū)動程序有不同的圖形模式;即使在同同的圖形驅(qū)動程序有不同的圖形模式;即使在同一圖形
10、驅(qū)動程序下,也可能會有幾種圖形模式。一圖形驅(qū)動程序下,也可能會有幾種圖形模式。 圖形驅(qū)動程序及其相應(yīng)模式具體見書圖形驅(qū)動程序及其相應(yīng)模式具體見書P53P53表表3.23.2第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)驅(qū)動程序驅(qū)動程序( (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ū)動程序及其相應(yīng)模式(部分)圖形驅(qū)動程序及其相應(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語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)1. 1. 圖形系統(tǒng)初始化圖形系統(tǒng)初始化 (1).(1).問題的提出問題的提出 一般缺省情況下,屏幕為一般缺省情況下,屏幕為8080列列2525行的文本方行的文本方式。在文本方式下,所有的圖
13、形函數(shù)均不能操作式。在文本方式下,所有的圖形函數(shù)均不能操作,因此在使用圖形函數(shù)繪圖之前,必須將屏幕顯,因此在使用圖形函數(shù)繪圖之前,必須將屏幕顯示適配器設(shè)置為一種圖形模式,這就是圖形初始示適配器設(shè)置為一種圖形模式,這就是圖形初始化過程?;^程。 圖形系統(tǒng)初始化首先要調(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ù)initg
14、raph()initgraph()函數(shù)格式為:函數(shù)格式為:void far initgraph(int void far initgraph(int * *gdrivergdriver;int int * *gmode,char gmode,char * *path);path);gdrivergdriver:是一個整型值,用來指定要裝入的圖形是一個整型值,用來指定要裝入的圖形驅(qū)動程序,該值在頭文件驅(qū)動程序,該值在頭文件 graphics.hgraphics.h中定義,如中定義,如p51p51表表3.3.l l所示。所示。gmode:gmode:是一個整型值,用來設(shè)置圖形顯示模式。圖是一個整型
15、值,用來設(shè)置圖形顯示模式。圖形顯示模式?jīng)Q定了顯示的分辨率,可同時顯示的顏色形顯示模式?jīng)Q定了顯示的分辨率,可同時顯示的顏色的多少,調(diào)色板的設(shè)置方式等,幾種不同的圖形顯示的多少,調(diào)色板的設(shè)置方式等,幾種不同的圖形顯示模式如模式如p53p53表表3.23.2所示。所示。第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)path:path:是一個字符串,用來指明圖形驅(qū)動程序是一個字符串,用來指明圖形驅(qū)動程序所在路徑。如果驅(qū)動程序就在用戶當(dāng)前目錄下所在路徑。如果驅(qū)動程序就在用戶當(dāng)前目錄下,則該參數(shù)可以空字符串,否則應(yīng)給出具體路,則該參數(shù)可以空字符串,否則應(yīng)給出具體路徑名。一般情況下,徑名。一般情況下,Turbo
16、CTurbo C安裝在安裝在C C盤的盤的TCTC目目錄中,則該路徑為:錄中,則該路徑為:C:TCC:TC,如果寫在參數(shù)中則如果寫在參數(shù)中則為為“C:TCC:TC”。注意:前兩個參數(shù)實際上是整型指針,調(diào)用時注意:前兩個參數(shù)實際上是整型指針,調(diào)用時應(yīng)加上地址運算符應(yīng)加上地址運算符“”。 第三章 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這個
17、關(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)。幾個頭文件幾個頭文件graphics.hstdlib.hconio.hstdio.h第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(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ū)動程序為設(shè)置驅(qū)動程序為CGACGA* */ / 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); /* *畫一實心長方形畫一實心長方形* */ / getch(); getch(); / /* *等待按一鍵結(jié)束等待按一鍵結(jié)束* */ / closegraph(); closegraph();/ /* *關(guān)閉圖形系統(tǒng),回到文本方式關(guān)閉圖形系統(tǒng),回到文本方式* */ / 此處也可用整型常數(shù)此處也可用整型常數(shù)代替符號常量代替符號常量gdriver=1;gdriver=1; gmode=0;gmode=0;第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)不知顯示器類型的圖形初始化。不知顯示器類型的圖形初始化。 Turbo C Turbo C提供了一
20、個對圖形顯示器硬件測試提供了一個對圖形顯示器硬件測試的函數(shù)的函數(shù)detectgraphdetectgraph()。()。 它的格式為:它的格式為:void far detectgraph(int void far detectgraph(int * *gdriver,int gdriver,int * *gmode);gmode);該函數(shù)在計算機(jī)有圖形適配器的情況下,確定該函數(shù)在計算機(jī)有圖形適配器的情況下,確定圖形適配器的類型,若系統(tǒng)有圖形適配器,則圖形適配器的類型,若系統(tǒng)有圖形適配器,則返回適合于適配器的圖形驅(qū)動程序的代碼,用返回適合于適配器的圖形驅(qū)動程序的代碼,用gdrivergdrive
21、r指向的整型量表示,該函數(shù)把指向的整型量表示,該函數(shù)把gmodegmode所所指的變量設(shè)置為適配器所能支持的最高分辨率指的變量設(shè)置為適配器所能支持的最高分辨率。若系統(tǒng)無圖形適配器,則。若系統(tǒng)無圖形適配器,則gdrivergdriver所指變量為所指變量為-2-2。第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(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);/ /* *測試結(jié)果存放于測試結(jié)果存放于gdriver,gmodegdriver,gmode中中* */ /if(gdriver0)if(gdriver=3a=3,那么將顯,那么將顯示值最大的那種顏示值最大的那種顏色,例如色,例如CGAC0CGAC0,將顯示黃色將顯示黃色(2 2)高分辨率)高分辨率高分辨率方式顯示高分辨率方式顯示6406402002
23、00個像素點,只有兩種個像素點,只有兩種顏色。黑色背景和彩色前景。由于顏色。黑色背景和彩色前景。由于CGACGA本身原因本身原因,背景色就是硬件所認(rèn)為的背景色,可用,背景色就是硬件所認(rèn)為的背景色,可用setbkcolorsetbkcolor參照課本參照課本P60P60表表3.33.3設(shè)置,前景色(即設(shè)置,前景色(即畫筆顏色)始終是青色。畫筆顏色)始終是青色。第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(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í)行后,在青色屏幕上顯示兩個白色圓圖形程序執(zhí)行后,在青色屏幕上顯示兩個白色圓圖形。 第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)2 2、EGAEGA調(diào)色板調(diào)色板 對對EGAEGA來說,總共可以有來說,總共可以有6464種顏色種顏色, ,但只有但只有一個調(diào)色板,這個調(diào)色板只有一個調(diào)色板,這個調(diào)色板只有1616項,可同時顯項,可同時顯示示1616種顏色。默認(rèn)的這種顏色。默認(rèn)的這1616種顏色可參看種顏色可參看P60P60表表3.33.3。表。表3.53.5(見書(見書P63P63)的顏色不準(zhǔn)確,是隨機(jī)的顏色不準(zhǔn)確,是隨機(jī)選取的,
26、不作為參考。選取的,不作為參考。 第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(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). 對于對于CGACGA模式,模式, 只 有 背 景 色 能 改 變 , 而 背 景 色 總 是 取只 有 背 景
27、 色 能 改 變 , 而 背 景 色 總 是 取oldcolor=0oldcolor=0例如,下列語句可把背景色改成綠色:例如,下列語句可把背景色改成綠色: setpalette(0,GREEN); setpalette(0,GREEN);Turbo CTurbo C中好像不支持對該函中好像不支持對該函數(shù)的執(zhí)行數(shù)的執(zhí)行第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ) (2).(2).對于對于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語語言圖圖形程序設(shè)計設(shè)計基礎(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所示。所示。例如:例如:下列語句顯示當(dāng)前背景顏色:下列語句顯示當(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語語言圖圖形程序設(shè)計設(shè)計基礎(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,因為畫筆始終是青色。,因為畫筆始終是青色。4. 4. 在點(在點(x x,y y)處畫一規(guī)定顏色點
32、處畫一規(guī)定顏色點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讀取點(讀取點(x x,y y)的顏色的顏色int far getpixel(int x,int y);int far getpixel(int x,int y);此函數(shù)返回指定點此函數(shù)返回指定點x x,y y位置上的像素顏色。位置上的像素顏色。第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)例3.14 在不同位置畫點
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、點,在起點,在X X正方向正方向上每隔上每隔1010用當(dāng)前用當(dāng)前屏幕模式下最大屏幕模式下最大有效顏色畫點有效顏色畫點得到點(得到點(5050,2020)的像素顏色的像素顏色把把colorcolor所指定所指定的顏色寫到(的顏色寫到(150150,150150)處處的像素上。的像素上。3.3 線的特性設(shè)定和填充線的特性設(shè)定和填充 一、線的特性設(shè)定一、線的特性設(shè)定用畫線函數(shù)進(jìn)行畫線時,其默認(rèn)值均屬于一像素點寬度用畫線函數(shù)進(jìn)行畫線時,其默認(rèn)值均屬于一像素點寬度的實線。為了改變線形與線寬,的實線。為了改變線形與線寬,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語言圖形設(shè)計基礎(chǔ)語言圖形設(shè)計基礎(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ù)簡介常用畫圖函數(shù)簡介3.7 3.7 繪
36、圖程序?qū)嵗L圖程序?qū)嵗?第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)該函數(shù)所用三個參數(shù)含義如下:該函數(shù)所用三個參數(shù)含義如下:(1 1)linestyle:linestyle:為整型值,用來定義所畫直線類型為整型值,用來定義所畫直線類型 表中前四種為系統(tǒng)預(yù)定義的類型,第五個為用戶自表中前四種為系統(tǒng)預(yù)定義的類型,第五個為用戶自定義類型。定義類型。 代代 號號 名名 代代 碼碼 說說 明明 SOLID-LINESOLID-LINE 0 0 實線實線 DOTTED-LINEDOTTED-LINE 1 1 點線點線 CENTER-LINECENTER-LINE 2 2 中心線中心線 DASHED-LINED
37、ASHED-LINE 3 3 虛線虛線 USERBIT-LINEUSERBIT-LINE 4 4 用戶定義的線形用戶定義的線形線型的代線型的代號說明號說明第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ)(2 2)patternpattern:無符號整型數(shù)。該參數(shù)在需要用戶自定義線型時使用,如果無符號整型數(shù)。該參數(shù)在需要用戶自定義線型時使用,如果是使用前四種系統(tǒng)預(yù)定義的線型,則該參數(shù)可取是使用前四種系統(tǒng)預(yù)定義的線型,則該參數(shù)可取0 0值。值。 (3) (3) widthwidth:整型數(shù)。指定所畫直線的粗細(xì),以像素為單位整型數(shù)。指定所畫直線的粗細(xì),以像素為單位, ,分為兩種情況分為兩種情況通過上述幾個參
38、數(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,20,150,70);從從(10,20)(10,20)到到(150,70)(150,70)用一條紅色的用一條紅色的3 3個像素寬點劃線個像素寬點劃線符號常量符號常量值值含含 義義NORM_W
39、IDTHNORM_WIDTH1 1 1 1個像素寬個像素寬( (缺省缺省) ) THICK_WIDTHTHICK_WIDTH3 3 3 3個像素寬個像素寬第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ) 當(dāng)函數(shù)當(dāng)函數(shù)setlinestylesetlinestyle的第一個參數(shù)為的第一個參數(shù)為USERBIT-LINEUSERBIT-LINE(或或4 4)時,可以由用戶自己定義直線類型。此時,第三個參數(shù)意義時,可以由用戶自己定義直線類型。此時,第三個參數(shù)意義同前,直線類型在第二個參數(shù)中定義,該參數(shù)是一個同前,直線類型在第二個參數(shù)中定義,該參數(shù)是一個1616位二位二進(jìn)制碼,每一位(進(jìn)制碼,每一位(bitbi
40、t)表示一個像素。某一位置表示一個像素。某一位置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個像素的點實線(就是實線)。個像素的點實線(就是實線)。 1010 1010 1010 1010 1010 1010 1010 1010 則隔位置則隔位置1 1,因此畫一條,因此畫一條1616個像素的點虛
41、線(就是點線)。個像素的點虛線(就是點線)。 在實際編寫程序時,一般把在實際編寫程序時,一般把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,1);setlinestyle(4,0 xAAAA,1);用這種方法,可以根據(jù)需要定義各種線型。用這種方法,可以根據(jù)需要定義各種線型。第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(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語語言圖
44、圖形程序設(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,630,265);/ /* *畫公畫公路線路線* */ / getch();getch();/ /* *暫停暫停* */ /closegraph();closegraph();
45、 注:此處的顏色位置未必準(zhǔn)確注:此處的顏色位置未必準(zhǔn)確第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(chǔ)礎(chǔ) 3.6 常用畫圖函數(shù)簡介常用畫圖函數(shù)簡介 一、一、 直線類函數(shù)直線類函數(shù) 1 1指定兩點間畫一直線指定兩點間畫一直線 void far line(int x1,int y1, void far line(int x1,int y1, int x2,int y2); int x2,int y2); 用當(dāng)前顏色從點用當(dāng)前顏色從點( (x1,y1)x1,y1)到點(到點(x2x2,y2y2)畫一條直線,當(dāng)前位置畫一條直線,當(dāng)前位置( (CP)CP)不變。不變。2 2從當(dāng)前位置到(從當(dāng)前位置到(x x,y
46、y)點畫一條直線點畫一條直線 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)點畫一條直線,并把點畫一條直線,并把(CPCP)位置定位在(位置定位在(x x,y y)點。點。3 3從當(dāng)前坐標(biāo)以相對增量方式畫直線從當(dāng)前坐標(biāo)以相對增量方式畫直線 void far linerel(int deltax, int deltay) void far linerel(int deltax, int deltay) 從當(dāng)前位置到相對從當(dāng)前位置到相對CPCP位置
47、在位置在X X方向增大方向增大deltaxdeltax,在在Y Y方向增大方向增大deltaydeltay畫一直線。畫一直線。 第三章第三章 C語言圖形設(shè)計基礎(chǔ)語言圖形設(shè)計基礎(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ù)簡介常用畫圖函數(shù)簡介3.7 3.7 繪圖程序?qū)嵗L圖程序?qū)嵗?第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(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)前畫筆畫一多邊形,多邊形的頂點數(shù)為numpoints, *polypoints指向一個整型數(shù)組,共有numpoints*2個整數(shù)組成,每一對整數(shù)給出一個多邊形頂點(x,y)坐標(biāo)。第三章 C語語言圖圖形程序設(shè)計設(shè)計基礎(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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年護(hù)士應(yīng)聘筆試題庫及答案
- 2025年優(yōu)仕教育面試題及答案
- 2025年舞蹈幼兒測試題及答案
- 買按揭車合同范例
- DOM委托合同范例
- oem委托加工合同范例
- 旅游品牌包裝策略
- 個人加工木炭合同范例
- 倉儲加盟協(xié)議合同范例
- 買門合同范本
- 2023年四川綿陽中考滿分作文《被幸福照亮》
- 二年級數(shù)學(xué)100以內(nèi)加減法豎式計算題單元考核習(xí)題
- 2024-2030年中國粒子加速器行業(yè)發(fā)展現(xiàn)狀調(diào)研及市場趨勢洞察報告
- JBT 14543-2024 無刷穩(wěn)速直流電動機(jī)技術(shù)規(guī)范(正式版)
- 醫(yī)院實驗室生物安全風(fēng)險評估表
- 小精靈的秋天
- 四年級下冊英語-Unit-4-Free-time-粵人版
- 2024年赤峰職業(yè)技術(shù)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年真題摘選含答案解析
- 品質(zhì)組長晉升述職報告
- 2023年上海市中考語文備考之名著閱讀《駱駝祥子》練習(xí)題含答案
- 大數(shù)據(jù)在國家安全與防控中的作用
評論
0/150
提交評論