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

下載本文檔

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

文檔簡介

1、2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)1 v 計(jì)算機(jī)圖形學(xué)是一門實(shí)踐性很強(qiáng)的課程。通過計(jì)算機(jī)圖形學(xué)是一門實(shí)踐性很強(qiáng)的課程。通過 程序設(shè)計(jì)來完成圖形的繪制,對深刻理解課程的程序設(shè)計(jì)來完成圖形的繪制,對深刻理解課程的 內(nèi)容和相關(guān)概念非常重要。內(nèi)容和相關(guān)概念非常重要。 v 程序設(shè)計(jì)語言是進(jìn)行計(jì)算機(jī)繪圖的基礎(chǔ),現(xiàn)在程序設(shè)計(jì)語言是進(jìn)行計(jì)算機(jī)繪圖的基礎(chǔ),現(xiàn)在 大多數(shù)高級語言都具有基本繪圖功能。大多數(shù)高級語言都具有基本繪圖功能。 v 本章主要介紹本章主要介紹用用C語言進(jìn)行圖形程序設(shè)計(jì)的基語言進(jìn)行圖形程序設(shè)計(jì)的基 本方法本方法和和C語言的圖形功能語言的圖形功能,使大家對,使大家對C語言的圖語言的圖 形應(yīng)用有一

2、個較深刻的理解。形應(yīng)用有一個較深刻的理解。WINTC 第三章第三章 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)2 3.1、屏幕設(shè)置、屏幕設(shè)置 v我們在屏幕上進(jìn)行繪制圖形,一般要按以下幾個步驟我們在屏幕上進(jìn)行繪制圖形,一般要按以下幾個步驟 執(zhí)行:執(zhí)行: (1)把屏幕設(shè)置為圖形模式;)把屏幕設(shè)置為圖形模式; (2)選擇背景與顯示實(shí)體的顏色;)選擇背景與顯示實(shí)體的顏色; (3)計(jì)算圖形顯示坐標(biāo);)計(jì)算圖形顯示坐標(biāo); (4)調(diào)用繪圖語句繪制實(shí)體)調(diào)用繪圖語句繪制實(shí)體 3.1.1 、屏幕顯示模式與坐標(biāo)系、屏幕顯示模式與坐標(biāo)系 在屏幕上只能顯示字符的方式稱為文本模式

3、在屏幕上只能顯示字符的方式稱為文本模式。在文本模。在文本模 式下,屏幕上可以顯示的最小單位是字符。為了能在指定式下,屏幕上可以顯示的最小單位是字符。為了能在指定 的位置顯示每個字符,的位置顯示每個字符,C語言提供了語言提供了字符坐標(biāo)系字符坐標(biāo)系。 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)3 v字符坐標(biāo)系字符坐標(biāo)系是以屏幕的左上角為坐標(biāo)原點(diǎn),水平方向?yàn)槭且云聊坏淖笊辖菫樽鴺?biāo)原點(diǎn),水平方向?yàn)?X軸,垂直方向?yàn)檩S,垂直方向?yàn)閅軸,如下圖軸,如下圖-1所示:所示: 圖圖-1 字符坐標(biāo)系字符坐標(biāo)系 Max x Max y (1,1) 注:字符坐標(biāo)系的原點(diǎn)為(注:

4、字符坐標(biāo)系的原點(diǎn)為(1,1),水平方向(),水平方向(X軸)分為若干列,垂直方向軸)分為若干列,垂直方向 (Y軸)分為若干行,用一對坐標(biāo)可以指定屏幕上一個位置。軸)分為若干行,用一對坐標(biāo)可以指定屏幕上一個位置。 (8,20) 表示字符表示字符 位于屏幕位于屏幕 的第的第8行行 第第20列列 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)4 (1)BW40:黑白:黑白40列方式。顯示列方式。顯示25行文本,其中每行行文本,其中每行40個個 字符,以黑白兩色顯示。字符,以黑白兩色顯示。 (2)C40:彩色:彩色40列方式??娠@示列方式??娠@示40列列25行彩色字

5、符。行彩色字符。 (3)BW80:黑白:黑白80列方式??娠@示列方式??娠@示80列列25行字符。行字符。 (4)C80:彩色:彩色80列列25行顯示方式。行顯示方式。 (5)MONO:單色:單色80列列25行顯示方式。行顯示方式。 (6)C4350:一種特殊的彩色文本方式,適和:一種特殊的彩色文本方式,適和EGA和和VGA兩兩 種適配器。種適配器。若用若用EGA適配器,顯示適配器,顯示80列列43行;若用行;若用VGA適適 配器,則顯示配器,則顯示80列列50行行。 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 由于由于顯示模式顯示模式的不同的不同,所顯示的字符的列數(shù)和行數(shù)以及顏色也不所顯示的字

6、符的列數(shù)和行數(shù)以及顏色也不 相同。相同。C支持以下支持以下6種不同的顯示方式。種不同的顯示方式。 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)5 在不同的顯示模式下,屏幕所顯示的字符數(shù)量也不一樣。在不同的顯示模式下,屏幕所顯示的字符數(shù)量也不一樣。 X方向一般為方向一般為40列或列或80列,列,Y方向一般為方向一般為25行,但行,但EGA和和 VGA適配器可達(dá)適配器可達(dá)43行或行或50行。行。 在文本模式下,屏幕最多可顯示在文本模式下,屏幕最多可顯示80X50=4000個字符,至個字符,至 少可顯示少可顯示40X25=1000個字符。顯示字符越多,每個字符個字符。顯示字符越多,每個字符 尺寸越小,反之

7、越大尺寸越小,反之越大 。 顯示模式不同,屏幕坐標(biāo)的構(gòu)成也不相同。比如:顯示模式不同,屏幕坐標(biāo)的構(gòu)成也不相同。比如: (1)在)在BW40方式下,最大坐標(biāo)位置為(方式下,最大坐標(biāo)位置為(25,40);); (2)在)在C4350方式下,最大坐標(biāo)位置為(方式下,最大坐標(biāo)位置為(50,80);); 注:注: C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)6 在屏幕上顯示圖形的方式稱為圖形模式在屏幕上顯示圖形的方式稱為圖形模式。在圖形。在圖形 模式下模式下,屏幕是由像素點(diǎn)組成的屏幕是由像素點(diǎn)組成的,像素點(diǎn)的多少決定像素點(diǎn)的多少決定 了屏幕的分辨率。分辨率越高了屏幕

8、的分辨率。分辨率越高,顯示圖形越細(xì)致顯示圖形越細(xì)致,質(zhì)質(zhì) 量越好。量越好。 v如右圖所示 1.屏幕由許多像素點(diǎn)屏幕由許多像素點(diǎn) 組成;組成; 2.圖形的顯示效果取圖形的顯示效果取 決于分辨率的高低;決于分辨率的高低; C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)7 v例如:例如:CGA顯示器的分辨率為顯示器的分辨率為300X200,TVG顯顯 示器的分辨率為示器的分辨率為1024X768, TVGA比比CGA分率高。分率高。 圖圖-2 點(diǎn)坐標(biāo)系點(diǎn)坐標(biāo)系 Max x Max y (0,0) 注:點(diǎn)坐標(biāo)系坐標(biāo)值的注:點(diǎn)坐標(biāo)系坐標(biāo)值的 范圍取決于所用的范圍取決于

9、所用的適配適配 器器/顯示分辨率顯示分辨率 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) v 在圖形模式下,屏幕上每個像素的顯示位置用點(diǎn)在圖形模式下,屏幕上每個像素的顯示位置用點(diǎn) 坐標(biāo)來描述的。點(diǎn)坐標(biāo)系坐標(biāo)來描述的。點(diǎn)坐標(biāo)系是以屏幕左上角為坐標(biāo)原點(diǎn)是以屏幕左上角為坐標(biāo)原點(diǎn) (0,0),水平方向?yàn)椋?,水平方向?yàn)閄軸,自左向右;垂直方向?yàn)檩S,自左向右;垂直方向?yàn)?Y軸,自上向下軸,自上向下。如下圖所示:。如下圖所示: 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)8 v由于屏幕的分辨率不同,水平方向和垂直方向的點(diǎn)數(shù)也由于屏幕的分辨率不同,水平方向和垂直方向的點(diǎn)數(shù)也 不一樣,從而不一樣,從而點(diǎn)坐標(biāo)系的點(diǎn)坐標(biāo)系

10、的Max x 、 Max y 數(shù)值數(shù)值也不也不 同。同。 v在在TurboC中,坐標(biāo)數(shù)據(jù)可以用兩種形式給出:中,坐標(biāo)數(shù)據(jù)可以用兩種形式給出:一種是絕一種是絕 對坐標(biāo),另一種是相對坐標(biāo)。對坐標(biāo),另一種是相對坐標(biāo)。 (1)絕對坐標(biāo)絕對坐標(biāo)的參考點(diǎn)是坐標(biāo)的原點(diǎn)(的參考點(diǎn)是坐標(biāo)的原點(diǎn)(0,0),),x和和y只只 能取規(guī)定范圍(能取規(guī)定范圍(0, Max x )和()和(0, Max y )內(nèi)的正整)內(nèi)的正整 數(shù);數(shù); (2)相對坐標(biāo)相對坐標(biāo)是相對是相對“當(dāng)前點(diǎn)當(dāng)前點(diǎn)”的坐標(biāo),其坐標(biāo)的參考的坐標(biāo),其坐標(biāo)的參考 點(diǎn)是當(dāng)前點(diǎn)。在相對坐標(biāo)中,點(diǎn)是當(dāng)前點(diǎn)。在相對坐標(biāo)中, x和和y的取值是相對當(dāng)前點(diǎn)的取值是相對當(dāng)

11、前點(diǎn) 在在x方向和方向和y方向上的增量,故方向上的增量,故x和和y可以為正整數(shù),也可可以為正整數(shù),也可 以為負(fù)整數(shù)。以為負(fù)整數(shù)。 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)9 3.1.2、圖形驅(qū)動程序與圖形模式、圖形驅(qū)動程序與圖形模式 對于不同的圖形顯示器,其控制方式各有差異,對于不同的圖形顯示器,其控制方式各有差異,因此要因此要 顯示圖形就需要先裝入相應(yīng)的圖形驅(qū)動程序顯示圖形就需要先裝入相應(yīng)的圖形驅(qū)動程序。TurboC 支支 持以下幾種圖形驅(qū)動程序:持以下幾種圖形驅(qū)動程序: 符號常量符號常量 數(shù)值數(shù)值 符號常量符號常量 數(shù)值數(shù)值 DETECT0IBM8

12、5146 CGA1HERCMONO7 MCGA2ATT4008 EGA3VGA9 EGA644PC327010 EGAMONO5 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)10 由于每種圖形顯示器都有幾種不同的圖形顯示模式,所由于每種圖形顯示器都有幾種不同的圖形顯示模式,所 以要顯示圖形,不但要先以要顯示圖形,不但要先裝入相應(yīng)的驅(qū)動程序裝入相應(yīng)的驅(qū)動程序,而且還要,而且還要 決定所用的顯示模式?jīng)Q定所用的顯示模式。 TurboC 常采用的幾種圖形驅(qū)動程常采用的幾種圖形驅(qū)動程 序及相應(yīng)的模式序及相應(yīng)的模式 驅(qū)動程序驅(qū)動程序 (driver)圖形(圖形(gmo

13、de)等價值等價值分辨(分辨(dpi) CGAC0 0320X200 CGAC1 1320X200 CGAC2 2320X200 CGAC3 3320X200 CGAHI4640X200 表表2.2 圖形驅(qū)動程序及相應(yīng)的模式圖形驅(qū)動程序及相應(yīng)的模式 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)11 驅(qū)動程序驅(qū)動程序 (driver) 圖形(圖形(gmode)等價值等價值分辨(分辨(dpi) EGAEGAHI0640X200 EGALO1640X350 VGALO0640X200 VGAVGAMED1640X350 VGAHI2640X480 v注注:1.

14、不同的圖形驅(qū)動程序有不同的圖形模式不同的圖形驅(qū)動程序有不同的圖形模式; 2. 同一圖形驅(qū)動程序同一圖形驅(qū)動程序,也可能會有幾種圖形也可能會有幾種圖形 模式模式; C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)12 vTurboC提供了十分豐富的圖形庫函數(shù),共有提供了十分豐富的圖形庫函數(shù),共有70多個,多個, 所有圖形函數(shù)的原型均在頭文件所有圖形函數(shù)的原型均在頭文件“graphics.h”中定義。中定義。 所以,在任何使用圖形函數(shù)的程序中,都要求其頭部所以,在任何使用圖形函數(shù)的程序中,都要求其頭部 包含文件包含文件graphics.h,即在程序文件的開頭寫上文

15、件,即在程序文件的開頭寫上文件 包含命令:包含命令: #include 同時將集成開發(fā)環(huán)境同時將集成開發(fā)環(huán)境option/Linker中的中的graphics.lib 選項(xiàng)設(shè)置為選項(xiàng)設(shè)置為”on”。 下面我們介紹:下面我們介紹:圖形系統(tǒng)的初始化圖形系統(tǒng)的初始化、圖形系統(tǒng)的關(guān)閉圖形系統(tǒng)的關(guān)閉、 圖形模式控制。圖形模式控制。 3.1.3、圖形系統(tǒng)初始化和模式控制、圖形系統(tǒng)初始化和模式控制 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)13 v圖形系統(tǒng)初始化首先要調(diào)用圖形系統(tǒng)初始化首先要調(diào)用initgraph()函數(shù)函數(shù),它通過它通過 從磁盤上裝入一個圖形驅(qū)動程序

16、來初始化圖形系統(tǒng)從磁盤上裝入一個圖形驅(qū)動程序來初始化圖形系統(tǒng), 并將系統(tǒng)設(shè)置為并將系統(tǒng)設(shè)置為圖圖。 圖形系統(tǒng)的初始化圖形系統(tǒng)的初始化 圖形模式是有別于文本模式的一種計(jì)算機(jī)屏幕顯示模圖形模式是有別于文本模式的一種計(jì)算機(jī)屏幕顯示模 式。屏幕一般在默認(rèn)情況下為式。屏幕一般在默認(rèn)情況下為80列列25行的文本模式,行的文本模式, 在文本模式下,所有的圖形函數(shù)均不能操作,在文本模式下,所有的圖形函數(shù)均不能操作,因此在使因此在使 用圖形函數(shù)繪圖之前,必須將屏幕顯示適配器設(shè)置為一用圖形函數(shù)繪圖之前,必須將屏幕顯示適配器設(shè)置為一 種圖形模式,即為種圖形模式,即為圖形初始化過程。圖形初始化過程。 C語言圖形程序設(shè)

17、計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)14 功能功能 將圖形驅(qū)動軟件裝入內(nèi)存,使屏幕顯示適配器設(shè)置為 圖形模式,即圖形系統(tǒng)初始化; 說明說明 1. gdriver是一個整型值,用來指定要裝入的圖形驅(qū)動程 序;該值在頭文件graphics.h中定義;中定義; 2. gmode是一個整型值,用來設(shè)置圖形顯示模式。圖形 顯示模式?jīng)Q定了顯示的分辨率和顯示的顏色的多少等; 3. path是一個字符串,用來指明圖形驅(qū)動程序所在的 路徑. 1.若驅(qū)動程序就在用戶當(dāng)前目錄下,則若驅(qū)動程序就在用戶當(dāng)前目錄下,則path可為空字符串,否則應(yīng)可為空字符串,否則應(yīng) 給出具體路徑名給出具體路

18、徑名。一般情況下一般情況下,TurboC安裝在安裝在C盤的盤的TC目錄中,則該目錄中,則該 路徑為:路徑為:C:TC,若寫在參數(shù)中則為若寫在參數(shù)中則為“C:TC”; 2.前兩個參數(shù)實(shí)際上是整型指針,調(diào)用時應(yīng)加上地址運(yùn)算符前兩個參數(shù)實(shí)際上是整型指針,調(diào)用時應(yīng)加上地址運(yùn)算符“ 注:注: initgraph()函數(shù)函數(shù) 格式格式 void far initgraph(int *gdriver,int *gmode,char *path); C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)15 (1)已知顯示器類型的圖形系統(tǒng)初始化)已知顯示器類型的圖形系統(tǒng)初始化。 如

19、果已經(jīng)知道所用圖形顯示器的種類和要使用的圖形模式如果已經(jīng)知道所用圖形顯示器的種類和要使用的圖形模式 則圖形系統(tǒng)的初始化可用下面程序,例如:則圖形系統(tǒng)的初始化可用下面程序,例如: 例例1 畫一實(shí)心矩形畫一實(shí)心矩形 #includegraphics.h main() int gdriver,gmode; v gdriver=CGA; /*設(shè)置顯示模式設(shè)置顯示模式CGA*/ v gmode=CGAC0; /*選用選用CGA圖形模式圖形模式*/ v initgraph( v /*初始化圖形系統(tǒng)初始化圖形系統(tǒng)*/ C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)16 v

20、 bar3d(10,20,50,80,0,0); /*畫一條形圖畫一條形圖*/ v getch(); /*等待按一鍵結(jié)束等待按一鍵結(jié)束*/ v closegraph(); /*關(guān)閉圖形系統(tǒng),回到文本模式關(guān)閉圖形系統(tǒng),回到文本模式*/ bar3d()函數(shù)函數(shù) 格式格式: void bar3d(int x1,int y1,int x2,int y2, int x1,int y1,int x2,int y2, int depth,int topflag int depth,int topflag); 功能功能: 畫一填充的畫一填充的三維條形圖三維條形圖; ; 說明說明: depth: depth為條

21、形的深度為條形的深度; topflag=0; topflag=0則不加頂則不加頂, ,否否 則在條形圖上加一個頂。則在條形圖上加一個頂。 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)17 格式格式 void far detectgraph(int *gdriver,int *gmode ); 功能功能 在計(jì)算機(jī)有圖形適配器的情況下,確定圖形適配器在計(jì)算機(jī)有圖形適配器的情況下,確定圖形適配器 的類型;的類型; 說明說明 1.若系統(tǒng)有圖形適配器,則把若系統(tǒng)有圖形適配器,則把gdriver指的變量設(shè)置指的變量設(shè)置 為適合于適配器的為適合于適配器的圖形驅(qū)動程序的代

22、碼圖形驅(qū)動程序的代碼,并把,并把gmode所所 指的變量設(shè)置為適配器所能支持的指的變量設(shè)置為適配器所能支持的最高分辨率最高分辨率。2.若系統(tǒng)若系統(tǒng) 無圖形適配器無圖形適配器,則則gdriver所指的變量為所指的變量為-2. (2)不知顯示器類型的圖形系統(tǒng)初始化。)不知顯示器類型的圖形系統(tǒng)初始化。 若在編寫程序過程中,不知道當(dāng)前系統(tǒng)屏幕硬件的若在編寫程序過程中,不知道當(dāng)前系統(tǒng)屏幕硬件的 類型或編寫的程序要用于不同的圖形顯示器,這就要類型或編寫的程序要用于不同的圖形顯示器,這就要 求所編程序能知當(dāng)前圖形顯示器的代碼,求所編程序能知當(dāng)前圖形顯示器的代碼,Turbo C供供 了一個對圖形顯示器硬件測試

23、的函數(shù)了一個對圖形顯示器硬件測試的函數(shù)detectgraph()。 detectgraph()函數(shù)函數(shù) C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)18 v例例2、 測試硬件顯示模式和繪制圖形測試硬件顯示模式和繪制圖形 #include graphics.h main() int gdriver,gmode; detectgraph( /*測試結(jié)果存放于測試結(jié)果存放于 gdriver,gmode中中*/ if(gdriver0) printf(there is not graphics displayern); exit(1); /*無圖形顯示模式時,顯示

24、信息,停止程序無圖形顯示模式時,顯示信息,停止程序*/ printf(detect graphics driver is # %d,mode is # %d n,gdriver,gmode); /*顯示硬件測試結(jié)果顯示硬件測試結(jié)果*/ getch(); /*等待按一鍵結(jié)束等待按一鍵結(jié)束*/ C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)19 initgraph( /*初始化圖形系統(tǒng)初始化圖形系統(tǒng)*/ bar3d(10,20,50,80,10,1); getch(); /*等待按一鍵結(jié)束等待按一鍵結(jié)束*/ closegraph(); /*關(guān)閉圖形系統(tǒng),回到文本

25、模式關(guān)閉圖形系統(tǒng),回到文本模式*/ return(0); C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)20 v例例3自動搜索顯示類型和模式并初始化畫圖自動搜索顯示類型和模式并初始化畫圖 #includegraphics.h main() (3)自動初始化圖形系統(tǒng)。)自動初始化圖形系統(tǒng)。 一般在程序設(shè)計(jì)中一般在程序設(shè)計(jì)中,可以把對圖形顯示器的檢測可以把對圖形顯示器的檢測 和和 初始化工作放在一起來自動完成初始化工作放在一起來自動完成,規(guī)定規(guī)定Gdriver= DETECT,則則initgraph()函數(shù)會自動按照系統(tǒng)所配置函數(shù)會自動按照系統(tǒng)所配置 的圖形顯示

26、器來確定驅(qū)動程序的圖形顯示器來確定驅(qū)動程序,并把圖形模式設(shè)置為并把圖形模式設(shè)置為 檢測到的驅(qū)動程序的最高分辨率檢測到的驅(qū)動程序的最高分辨率,實(shí)現(xiàn)圖形系統(tǒng)的初實(shí)現(xiàn)圖形系統(tǒng)的初 始化始化. C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)21 int gdriver=DETECT,gmode; /*自動搜索顯示器類型和顯示模式自動搜索顯示器類型和顯示模式*/ initgraph( /*初始化圖形系統(tǒng)初始化圖形系統(tǒng)*/ bar3d(10,20,50,80,10,1); /*畫一三維立體有頂矩形畫一三維立體有頂矩形*/ getch(); /*等待按一鍵結(jié)束等待按一鍵結(jié)

27、束*/ closegraph(); /*關(guān)閉圖形系統(tǒng),回到文本模式關(guān)閉圖形系統(tǒng),回到文本模式*/ return(0); C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)22 圖形系統(tǒng)的關(guān)閉圖形系統(tǒng)的關(guān)閉 在圖形編程中,我們均用函數(shù)在圖形編程中,我們均用函數(shù)initgraph()對圖形系統(tǒng)對圖形系統(tǒng) 進(jìn)行進(jìn)行初始化初始化,即啟動圖形系統(tǒng)即啟動圖形系統(tǒng),進(jìn)入繪圖狀態(tài)進(jìn)入繪圖狀態(tài),在程序結(jié)束在程序結(jié)束 時都用函數(shù)時都用函數(shù)closegraph()關(guān)閉圖形系統(tǒng)關(guān)閉圖形系統(tǒng)。 closegraph()函數(shù)函數(shù) v格式格式 void far closegraph(); v

28、功能功能 關(guān)閉圖形模式。關(guān)閉圖形模式。 v說明說明 函數(shù)函數(shù)closegraph()用來關(guān)閉圖形模式,用來關(guān)閉圖形模式, 釋放用于保存圖形驅(qū)動程序和字體所占用的內(nèi)釋放用于保存圖形驅(qū)動程序和字體所占用的內(nèi) 存空間。當(dāng)一個程序需要從圖形模式下退出,存空間。當(dāng)一個程序需要從圖形模式下退出, 且回到文本模式下繼續(xù)運(yùn)行時可調(diào)用該函數(shù)。且回到文本模式下繼續(xù)運(yùn)行時可調(diào)用該函數(shù)。 注:注:所有有關(guān)圖形顯示的程序一定是在所有有關(guān)圖形顯示的程序一定是在initgraph()和和closegraph()之間之間。 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)23 圖形模式的控制

29、圖形模式的控制 為了對圖形模式進(jìn)行控制,即為了對圖形模式進(jìn)行控制,即 1. 從圖形模式轉(zhuǎn)換成文本模式,或從文本模式轉(zhuǎn)換成圖從圖形模式轉(zhuǎn)換成文本模式,或從文本模式轉(zhuǎn)換成圖 形模式;形模式; 2. 設(shè)置驅(qū)動器有效模式或讀取當(dāng)前圖形模式和范圍。設(shè)置驅(qū)動器有效模式或讀取當(dāng)前圖形模式和范圍。 TurboC都提供了相關(guān)的函數(shù)來實(shí)現(xiàn)其控制。 1.getgraphmode()函數(shù)函數(shù) v格式格式 void far getgraphmode(void); v功能功能 返回當(dāng)前圖形模式值,其返回值如前表所示。返回當(dāng)前圖形模式值,其返回值如前表所示。 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語

30、言圖形程序設(shè)計(jì)基礎(chǔ)24 v功能功能 恢復(fù)屏幕在圖形初始化前的模式恢復(fù)屏幕在圖形初始化前的模式。 v說明說明 該函數(shù)使該函數(shù)使initgraph()函數(shù)所選定圖形模式關(guān)閉函數(shù)所選定圖形模式關(guān)閉,返返 回到調(diào)用回到調(diào)用initgraph()前的狀態(tài)前的狀態(tài)。注意它與。注意它與closegraph()函數(shù)函數(shù) 的區(qū)別。的區(qū)別。 3.setgraphmode()函數(shù)函數(shù) v格式格式 void far setgraphmode(int gmode); v功能功能 設(shè)置系統(tǒng)圖形模式并清屏幕設(shè)置系統(tǒng)圖形模式并清屏幕。 v說明說明 該函數(shù)把當(dāng)前的圖形模式設(shè)置為該函數(shù)把當(dāng)前的圖形模式設(shè)置為gmode 所指定的模

31、式。所指定的模式。 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2.restorecrtmode()函數(shù)函數(shù) v格式格式 void far restorecrtmode(void); 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)25 注注: 通過調(diào)用以上函數(shù),可實(shí)現(xiàn)使顯示器暫時離開 圖形模式進(jìn)入文本模式,進(jìn)行文本輸出,然后不 經(jīng)過initgraph()函數(shù)再返回圖形模式的功能. 4.getmoderange()函數(shù)函數(shù) v格式格式 void far getmoderange(int driver,int *lomode,int *himode); v功能功能 獲取圖形驅(qū)動器可使用的模式范圍獲取圖形驅(qū)

32、動器可使用的模式范圍。 v說明說明 該函數(shù)可以確定該函數(shù)可以確定由由driver所指定圖形驅(qū)動器所指定圖形驅(qū)動器 能夠支持的最低和最高模式能夠支持的最低和最高模式,并將這些值放在由并將這些值放在由 lomode和和himode所指向的變量中所指向的變量中. C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)26 include graphics.h #include stdio.h #include stdlib.h main() int gdriver,gmode,lo,hi; gdriver=CGA; /*設(shè)置顯示模式為設(shè)置顯示模式為CGA*/ getmod

33、erange(CGA, /*獲得獲得CGA的圖形模式范圍的圖形模式范圍*/ printf(CGA surpporting modes range from %d to %d.n,lo,hi); /*顯示顯示CGA的顯示模式范圍的顯示模式范圍/ initgraph( /*初始化初始化CGAC0圖形系統(tǒng)圖形系統(tǒng)*/ bar3d(100,30,130,150,0,0); C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)27 getch(); /*等待按一鍵結(jié)束等待按一鍵結(jié)束*/ gmode=getgraphmode(); /*獲得現(xiàn)行圖形模式獲得現(xiàn)行圖形模式*/ r

34、estorecrtmode(); /*返回圖形初始化前的現(xiàn)實(shí)模式返回圖形初始化前的現(xiàn)實(shí)模式*/ printf(NOW in text mode ,press any key back to graphics mode. n); getch(); setgraphmode(gmode); /*再回到圖形模式再回到圖形模式*/ rectangle(50,30,100,130); /*畫一矩形畫一矩形*/ getch(); closegraph(); /*關(guān)閉圖形系統(tǒng),回到文本模式關(guān)閉圖形系統(tǒng),回到文本模式*/ return(0); C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言

35、圖形程序設(shè)計(jì)基礎(chǔ)28 v我們在畫圖時需要運(yùn)用光標(biāo)定點(diǎn)我們在畫圖時需要運(yùn)用光標(biāo)定點(diǎn),即確定坐標(biāo)位置。當(dāng)屏即確定坐標(biāo)位置。當(dāng)屏 幕處于文本狀態(tài)時,左上角坐標(biāo)原點(diǎn)為(幕處于文本狀態(tài)時,左上角坐標(biāo)原點(diǎn)為(1,1);而在圖);而在圖 形模式下形模式下,以左上角為坐標(biāo)原點(diǎn)(以左上角為坐標(biāo)原點(diǎn)(0,0),水平方向向右),水平方向向右 為為X軸,垂直方向向下為軸,垂直方向向下為Y軸軸。 v由于圖形顯示器和顯示模式的不同由于圖形顯示器和顯示模式的不同,x、y坐標(biāo)的最大值也坐標(biāo)的最大值也 就不同,就不同, 可利用可利用TurboC提供的函數(shù)來提供的函數(shù)來設(shè)定坐標(biāo)設(shè)定坐標(biāo)(定點(diǎn)定點(diǎn)),), 讀取當(dāng)前光標(biāo)的位置讀取當(dāng)

36、前光標(biāo)的位置以及以及x、y軸的最大值軸的最大值。 3.1.4 、圖形坐標(biāo)的設(shè)置、圖形坐標(biāo)的設(shè)置 moveto()函數(shù)函數(shù) v格式格式 void far moveto(int x,int y); v功能功能 把當(dāng)前光標(biāo)移到所需的位置(把當(dāng)前光標(biāo)移到所需的位置(x,y)。)。 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)29 v說明說明 該函數(shù)把當(dāng)前窗口中的當(dāng)前該函數(shù)把當(dāng)前窗口中的當(dāng)前光標(biāo)位置(光標(biāo)位置(CP) 移到所需的(移到所需的(x,y)位置。)位置。注:不是畫線注:不是畫線。 v例如:moveto(100,100)表示把當(dāng)前光標(biāo)移到點(diǎn) (100,100

37、)位置上。 moverel()函數(shù)函數(shù) v格式格式 void far moverel(int deltax,int deltay); v功能功能 以增量方式移動當(dāng)前光標(biāo)。以增量方式移動當(dāng)前光標(biāo)。 v說明說明 此函數(shù)把光標(biāo)從當(dāng)前位置此函數(shù)把光標(biāo)從當(dāng)前位置(CP)開始開始,在在x,y 方向分別移動方向分別移動deltax和和 deltay,即由即由(x,y) (x+ deltax,y+ deltay). v例如:若當(dāng)前光標(biāo)在(10,10)位置,執(zhí)行 moverel(10,20)后即移到(20,30)的位置上. C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)30

38、n注:moveto (10,20)表示把當(dāng)前光標(biāo)移到點(diǎn)(10,20)位置上。 n moverel(10,20)后即移到(20,30)的位置上. Max x Max y (0,0) (10,10) (10,20) (20,30) 當(dāng)前光標(biāo) movet o movere l C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)31 v例如:語句例如:語句printf(“cps loc:%d%d”,getx(),gety(); 顯示光標(biāo)當(dāng)前位置的顯示光標(biāo)當(dāng)前位置的x值值 getx()函數(shù)函數(shù) v格式格式 int far getx(void); v功能功能 讀取當(dāng)前光標(biāo)在

39、讀取當(dāng)前光標(biāo)在x軸的位置。軸的位置。 gety()函數(shù)函數(shù) v格式格式 int far gety(void); v功能功能 讀取當(dāng)前光標(biāo)在讀取當(dāng)前光標(biāo)在y軸的位置。軸的位置。 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)32 程序:#include stdio.h #include conio.h getmaxx()函數(shù)函數(shù) v格式格式 int far getmaxx(void); v功能功能 讀取當(dāng)前光標(biāo)在讀取當(dāng)前光標(biāo)在x軸的最大值。軸的最大值。 getmaxy()函數(shù)函數(shù) v格式格式 int far getmaxy(void); v功能功能 讀取當(dāng)前光

40、標(biāo)在讀取當(dāng)前光標(biāo)在y軸的最大值。軸的最大值。 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)33 v#include graphics.h vvoid main() v v int gdriver,gmode; v gdriver=CGA; v gmode=CGAC0; v initgraph( v printf(max x,y is %d,%d,getmaxx(),getmaxy(); v getch(); v v輸出結(jié)果為;max x,y is 319,199 為什么? C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)3

41、4 3.2圖形顏色設(shè)置圖形顏色設(shè)置 v 在繪圖時,往往要求配置一定的顏色加在繪圖時,往往要求配置一定的顏色加 以渲染在繪圖系統(tǒng)中顏色分為以渲染在繪圖系統(tǒng)中顏色分為前景色前景色 和背景色和背景色。 v 前景色前景色是指構(gòu)成字符和圖形點(diǎn)的顏色是指構(gòu)成字符和圖形點(diǎn)的顏色, 而而背景色背景色是指整個顯示屏幕的顏色是指整個顯示屏幕的顏色。 v TurboC提供了多個顏色控制函數(shù)來設(shè)置提供了多個顏色控制函數(shù)來設(shè)置 前景色、背景色等。前景色、背景色等。 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)35 設(shè)置當(dāng)前背景色設(shè)置當(dāng)前背景色 setbkcolor()函數(shù)函數(shù) v格

42、式格式 void far setbkcolor(int color); v功能功能 設(shè)置當(dāng)前背景顏色。設(shè)置當(dāng)前背景顏色。 v說明說明該函數(shù)將背景色設(shè)置成該函數(shù)將背景色設(shè)置成color 所指定的顏所指定的顏 色值色值。參數(shù)參數(shù)color可以用名字,也可以用數(shù)字可以用名字,也可以用數(shù)字,它,它 們的對應(yīng)關(guān)系在們的對應(yīng)關(guān)系在graphics.h 中定義。如下表:中定義。如下表: 符號常量數(shù)值含義 BLACK0黑色 BLUE1藍(lán)色 GREEN2綠色 Color取值可以由0到15 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)36 設(shè)置當(dāng)前畫圖顏色設(shè)置當(dāng)前畫圖顏色 s

43、etcolor()函數(shù)函數(shù) v格式格式 void far setcolor(int color); v功能功能 設(shè)置當(dāng)前畫圖顏色。設(shè)置當(dāng)前畫圖顏色。 v說明說明該函數(shù)把當(dāng)前畫圖顏色設(shè)置成該函數(shù)把當(dāng)前畫圖顏色設(shè)置成 color 所指定的顏色值,即畫筆的顏色所指定的顏色值,即畫筆的顏色。參參 數(shù)數(shù)color可以用名字,也可以用數(shù)字,可以用名字,也可以用數(shù)字,但當(dāng)?shù)?dāng) 缺省時,默認(rèn)是白色缺省時,默認(rèn)是白色。 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)37 3獲取顏色信息獲取顏色信息 getbkcolor()函數(shù)函數(shù) v格式格式 int far getbkcol

44、or(void); v功能功能 讀取當(dāng)前背景顏色。讀取當(dāng)前背景顏色。 v說明說明該函數(shù)返回當(dāng)前背景顏色。該函數(shù)返回當(dāng)前背景顏色。 getcolor()函數(shù)函數(shù) v格式格式 int far getcolor(void); v功能功能 讀取當(dāng)前畫圖顏色。讀取當(dāng)前畫圖顏色。 v說明說明該函數(shù)返回當(dāng)前畫筆顏色。該函數(shù)返回當(dāng)前畫筆顏色。 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)38 putpixel()函數(shù)函數(shù) v格式格式 void far putpixel(int x,int y,int color); v功能功能 在點(diǎn)在點(diǎn)(x,y)處畫一規(guī)定顏色的點(diǎn)。處畫一

45、規(guī)定顏色的點(diǎn)。 v說明說明該函數(shù)把該函數(shù)把color 所指定的顏色寫到所指定的顏色寫到(x,y)處處 的像素上。例如:語句的像素上。例如:語句putpixel(10,20,GREEN)使使 點(diǎn)點(diǎn)(10,20)的像素成為綠色。的像素成為綠色。 getpixel()函數(shù)函數(shù) v格式格式 int far getpixel(int x,int y ); v功能功能 讀取點(diǎn)讀取點(diǎn)(x,y)的顏色。的顏色。 v說明說明該函數(shù)返回指定點(diǎn)該函數(shù)返回指定點(diǎn)(x,y)位置上的像素顏位置上的像素顏 色值。色值。 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)39 v#includ

46、e graphics.h v#include conio.h vvoid main() vint gdriver=DETECT,gmode; v int color,i,max; v initgraph( /*初始化圖形系統(tǒng)*/ v max=getmaxcolor(); v for(i=0;i20;i+) v putpixel(50+i*10,20,max); v color=getpixel(50,20); v putpixel(150,150,color); v getch(); v closegraph(); 例例6、 在不同位置畫點(diǎn)在不同位置畫點(diǎn) C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)

47、基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)40 line( )函數(shù)函數(shù) n格式格式 void far line(int x1,int y1,int x2,int y2); n功能功能 指定兩點(diǎn)間畫一直線。指定兩點(diǎn)間畫一直線。 n說明說明 該函數(shù)用當(dāng)前顏色從點(diǎn)該函數(shù)用當(dāng)前顏色從點(diǎn)(x1,y1)到點(diǎn)到點(diǎn)(x2,y2)畫一條直畫一條直 線,當(dāng)前位置線,當(dāng)前位置(CP)不變。不變。 直線類函數(shù)直線類函數(shù) lineto( )函數(shù)函數(shù) n格式格式 void far lineto(int x,int y); n功能功能 從當(dāng)前位置到點(diǎn)從當(dāng)前位置到點(diǎn)(x,y)畫一條直線。畫一條直線。 n說明說明 并把當(dāng)前位

48、置并把當(dāng)前位置(CP)定位在點(diǎn)定位在點(diǎn)(x,y)處。處。 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)41 linerel( )函數(shù)函數(shù) n格式格式 void far linerel(int deltax,int deltay); n功能功能 從當(dāng)前位置相對從當(dāng)前位置相對CP位置在位置在X方向增大方向增大deltax,在,在Y 方向增大方向增大deltay處畫一直線。處畫一直線。 線的特性設(shè)定線的特性設(shè)定 我們在用畫線函數(shù)畫線時,其我們在用畫線函數(shù)畫線時,其默認(rèn)值均屬于一默認(rèn)值均屬于一 個像素點(diǎn)寬度的實(shí)線個像素點(diǎn)寬度的實(shí)線。但往往有時需要改變線型。但往往有

49、時需要改變線型 和線的寬度,和線的寬度, TurboC提供了一些可以改變線型提供了一些可以改變線型 和線寬的函數(shù),具體如下:和線寬的函數(shù),具體如下: C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)42 setlinestyle()函數(shù)函數(shù) v格式格式 void far setlinestyle(int linestyle,unsigned pattern,int width); v功能功能 改變線型和線寬。改變線型和線寬。 v說明說明該函數(shù)所用的該函數(shù)所用的3個參數(shù)具體含義為:個參數(shù)具體含義為: 1linestyle為整型值,用來定義所畫直線類型,為整型值,

50、用來定義所畫直線類型, 如下表所示:如下表所示: C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)43 代號名代號名代號代號說明說明 SOLID_LINE0實(shí)線實(shí)線 DOTTEN_LINE1點(diǎn)線點(diǎn)線 CENTER_LINE2中心線中心線 DASHED_LINE3虛線虛線 USERBIT_LINE4用戶定義的線型用戶定義的線型 注注: 表中前表中前4種為系統(tǒng)預(yù)定的類型種為系統(tǒng)預(yù)定的類型,第第5種為用戶自定義類型種為用戶自定義類型 2pattern為無符號整型數(shù)。該參數(shù)在需要用為無符號整型數(shù)。該參數(shù)在需要用 戶自定義線型時才使用,戶自定義線型時才使用,若是使用前四

51、種系統(tǒng)預(yù)若是使用前四種系統(tǒng)預(yù) 定義的線型,則該參數(shù)可取定義的線型,則該參數(shù)可取0值值。 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)44 3 width為整型數(shù)。主要用來為整型數(shù)。主要用來指定所畫直線的指定所畫直線的 粗細(xì),以像素為單位,分兩種情況粗細(xì),以像素為單位,分兩種情況,如下表所示:,如下表所示: 符號常量符號常量值值含義含義 NORM_WIDTH11個像素寬(缺省)個像素寬(缺?。?THICK_WIDTH33個像素寬個像素寬 注注: 通過上述通過上述3個參數(shù)的不同組合,可以根據(jù)需要畫出不同類型、個參數(shù)的不同組合,可以根據(jù)需要畫出不同類型、 不用粗

52、細(xì)的直線。不用粗細(xì)的直線。 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)45 v例如:從點(diǎn)例如:從點(diǎn)(10,20)到到(150,70)畫一條畫一條紅色的點(diǎn)劃線紅色的點(diǎn)劃線 可用下面的語句可用下面的語句: setcolor(RED); setlinestyle(DASHED_LINE,0, THICK_WIDTH); line(10,20,150,70); v注意:當(dāng)函數(shù)注意:當(dāng)函數(shù)setlinestyle的第一個參數(shù)為的第一個參數(shù)為 USERBIT_LINE(或4)時,用戶可以自己定義直時,用戶可以自己定義直 線類型。此時線類型。此時第三個參數(shù)意義不變而第

53、三個參數(shù)意義不變而pattern才變才變 得有意義,直線的類型由得有意義,直線的類型由pattern來定義來定義,該參數(shù)該參數(shù) 是一個是一個16位二進(jìn)制碼,每一位位二進(jìn)制碼,每一位(bit)表示一個像素表示一個像素。 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)46 v若某一位置為若某一位置為1時表示直線上相應(yīng)位置以當(dāng)前顏時表示直線上相應(yīng)位置以當(dāng)前顏 色顯示;色顯示; v若某一位置為若某一位置為0時,則其對應(yīng)像素不顯示或不改時,則其對應(yīng)像素不顯示或不改 變原來的顏色;例如:變原來的顏色;例如: 1. 1111 1111 1111 1111 表示表示16位全

54、置位全置1,因此可因此可 畫一條畫一條16個像素的個像素的點(diǎn)實(shí)線點(diǎn)實(shí)線。 2. 1010 1010 1010 1010 表示隔一位置表示隔一位置1,因此因此 可畫一條可畫一條16個像素的個像素的點(diǎn)虛線點(diǎn)虛線。 但但:在實(shí)際編寫程序時在實(shí)際編寫程序時,一般要把一般要把16位二進(jìn)制數(shù)轉(zhuǎn)換為位二進(jìn)制數(shù)轉(zhuǎn)換為4位位 十六進(jìn)制數(shù)十六進(jìn)制數(shù),每每4位二進(jìn)制數(shù)轉(zhuǎn)換為位二進(jìn)制數(shù)轉(zhuǎn)換為1位十六進(jìn)制數(shù)位十六進(jìn)制數(shù)。例如。例如 1111 1111 1111 1111 FFFF。函數(shù)調(diào)用方法為:。函數(shù)調(diào)用方法為: setlinestyle(4,0 xFFFF,1); 可定義各種線型。可定義各種線型。 C語言圖形程序設(shè)

55、計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)47 v在圖形模式下主要是繪制圖形,為了有效地對在圖形模式下主要是繪制圖形,為了有效地對 圖形進(jìn)行操作,圖形進(jìn)行操作,TurboC提供了圖形屏幕、圖形窗提供了圖形屏幕、圖形窗 口的處理功能,即口的處理功能,即在圖形模式下開設(shè)在圖形模式下開設(shè)“窗口窗口” (又稱為視圖區(qū)),并對屏幕和圖形進(jìn)行處理(又稱為視圖區(qū)),并對屏幕和圖形進(jìn)行處理。 屏幕窗口操作屏幕窗口操作 cleardevice()函數(shù)函數(shù) v格式格式 void far cleardevice(void); v功能功能 清除整個圖形屏幕清除整個圖形屏幕(但保留底色但保留底色

56、),并把當(dāng),并把當(dāng) 前光標(biāo)位置前光標(biāo)位置(CP)重新設(shè)置為重新設(shè)置為(0,0)。 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)48 setactivepage()函數(shù)函數(shù) v格式格式 void far setactivepage(int page); v功能功能 設(shè)置圖形輸出活動頁。 v說明說明該函數(shù)確定接受圖形函數(shù)所輸出的活動 頁,缺省值為屏幕顯示頁。保存顯示在屏幕上信 息的稱為頁(Page)。例如:語句例如:語句 setactivepage(1)表示表示設(shè)置第頁為活動頁設(shè)置第頁為活動頁。 setvisualpage()函數(shù)函數(shù) v格式格式 void f

57、ar setvisualpage(int page); v功能功能 該函數(shù)顯示Page所指定的可見圖形頁。 例如:語句例如:語句setvisualpage(1)表示表示選擇顯示第頁選擇顯示第頁。 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)49 v#include graphics.h v#include conio.h vvoid main() v v int gdriver,gmode; v gdriver=VGA; /*設(shè)置設(shè)置VGA圖形設(shè)備器圖形設(shè)備器(驅(qū)動程序驅(qū)動程序)*/ v gmode=VGAHI; /*設(shè)置設(shè)置VGA圖形模式圖形模式*/ v

58、 initgraph( /*初始化圖形系統(tǒng)初始化圖形系統(tǒng)*/ v cleardevice(); /* 清屏清屏*/ C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)50 vsetactivepage(1); /*設(shè)置圖形輸出活動頁為設(shè)置圖形輸出活動頁為1*/ v circle(150,130,80); /*畫一個圓畫一個圓*/ v setactivepage(0); /*設(shè)置圖形活動頁為設(shè)置圖形活動頁為0*/ v rectangle(40,160,90,180); /*畫一個矩形畫一個矩形*/ v getch(); v setvisualpage(1); /*

59、設(shè)置可見圖形設(shè)置可見圖形1頁頁*/ v getch(); v setvisualpage(0); /*設(shè)置可見圖形設(shè)置可見圖形0頁頁*/ v getch(); v closegraph(); /*關(guān)閉圖形系統(tǒng)關(guān)閉圖形系統(tǒng)*/ v C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)51 vTurboC提供了提供了圖形窗口圖形窗口處理功能,并可以在屏幕某處處理功能,并可以在屏幕某處 設(shè)置一個圖形窗口,以后有關(guān)圖形的操作均相對于這設(shè)置一個圖形窗口,以后有關(guān)圖形的操作均相對于這 個窗口的左上角為坐標(biāo)原點(diǎn)個窗口的左上角為坐標(biāo)原點(diǎn)(0,0)。 v可設(shè)置圖形窗口之外的區(qū)域是不

60、可接觸的,這樣所有可設(shè)置圖形窗口之外的區(qū)域是不可接觸的,這樣所有 的圖形操作只在所指定圖形窗口中進(jìn)行,而不會出現(xiàn)的圖形操作只在所指定圖形窗口中進(jìn)行,而不會出現(xiàn) 在窗口之外。在窗口之外。 clearviewport()函數(shù)函數(shù) v格式格式 void far clearviewport(void); v功能功能 清除當(dāng)前圖形窗口,并把當(dāng)前光標(biāo)位置 (CP)重置為 (0,0)。 C語言圖形程序設(shè)計(jì)基礎(chǔ)語言圖形程序設(shè)計(jì)基礎(chǔ) 2021-6-3C語言圖形程序設(shè)計(jì)基礎(chǔ)52 v若,則超出窗口的輸出部分自動剪裁掉; v若,則超出圖形窗口之外的部分不被剪 裁掉; setviewport()函數(shù)函數(shù) v格式格式 v

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論