成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

c語言中動圖函數是,c語言簡單動圖代碼

c語言讀取圖片的函數是那些?

#include graphics.h

創(chuàng)新互聯(lián)建站堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網站建設、做網站、企業(yè)官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯(lián)網時代的綏棱網站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!

int main()

{

int gdriver, gmode;

gdriver=VGA;

gmode=VGAHI;

initgraph(gdriver, gmode, "c:\\tc");

bar3d(100, 100, 300, 250, 50, 1); /*畫一長方體*/

getch();

closegraph();

return 0;

}

有時編程者并不知道所用的圖形顯示器適配器種類, 或者需要將編寫的程序 用于不同圖形驅動器, Turbo C提供了一個自動檢測顯示器硬件的函數, 其調用

格式為:

void far detectgraph(int *gdriver, *gmode);

其中gdriver和gmode的意義與上面相同。

例5. 自動進行硬件測試后進行圖形初始化

#include graphics.h

int main()

{

int gdriver, gmode;

detectgraph(gdriver, gmode); /*自動測試硬件*/

printf("the graphics driver is %d, mode is %d\n", gdriver, gmode); /*輸出測試結果*/

getch();

initgraph(gdriver, gmode, "c:\\tc");

/* 根據測試結果初始化圖形*/

bar3d(10, 10, 130, 250, 20, 1);

getch();

closegraph();

return 0;

}

上例程序中先對圖形顯示器自動檢測, 然后再用圖形初始化函數進行初始化設置, 但Turbo C提供了一種更簡單的方法, 即用gdriver= DETECT 語句后再跟 initgraph()函數就行了。采用這種方法后, 上例可改為:

例6.

#include graphics.h

int main()

{

int gdriver=DETECT, gmode;

initgraph(gdriver, gmode, "c:\\tc");

bar3d(50, 50, 150, 30, 1);

getch();

closegraph();

return 0;

}

另外, Turbo C提供了退出圖形狀態(tài)的函數closegraph(), 其調用格式為:void far closegraph(void);調用該函數后可退出圖形狀態(tài)而進入文本方式(Turbo C 默認方式), 并釋放用于保存圖形驅動程序和字體的系統(tǒng)內存。

如何利用C語言實現動畫?

基于擦除法的C語言動畫設計與實現

Movie design implement in C language base on erasure way

 東華理工學院計算機與通信系 姜林 何月順 江西 南昌 330013

摘要:

 本文介紹了程序設計語言中動畫設計的原理,在C語言中的動畫設計常用方法,并提出了在C語言中新的動畫設計方法――擦除法。闡述擦除法動畫設計的原理,并通過一個具體的實例詳細介紹了這種方法的設計實現,文中末尾總結了擦除法動畫設計的優(yōu)點及適用的范圍。

關鍵字:擦除法;C語言;TurboC2.0;動畫設計;原理;實現 

中圖分類號:TP312

Summary:

Through the principium of movie design in program design language, the thesis present movie design general way in C language, and bring forward new movie design way――erasure . The thesis also expatiate the principium of erasure way, particular describe the design implement of erasure by a instance. The end summarize the excellence and range of erasure way.

Key words: erasure way; C language ; TurboC 2.0; movie design; principium; implement

0. 引言

動畫技術是計算機圖形學中的重要內容,它廣泛用于游戲娛樂,輔助教學,科學實驗模擬等計算機輔助設計。用于動畫設計的程序設計語言有多種,并且有多種方法。其中C語言程序設計又廣泛用于各種軟件開發(fā)項目中。因此,掌握C語言的動畫設計方法對于軟件開發(fā)很有必要。

1. 程序設計中動畫原理

程序設計中動畫設計的原理類似電影的方法,它利用人的視覺具有暫留的生理特點,即人眼對動態(tài)圖像的變化僅能分辨出時間間隔為25毫秒左右的變化,如果圖像變化太快,則人眼無法分辨。在程序設計中我們可以在屏幕上畫出一張圖像,而將這張圖像在不同時間出現,然后一張張快速(時間間隔小于25毫秒)呈現在屏幕上,從視覺效果上看這些畫面就如同電影在連續(xù)變化一樣,給人以動的視覺感覺。

2. C語言動畫設計常用方法

 

C語言常用動畫設計方法[1]:

2.1 利用動態(tài)開辟圖視口方法

在位置動態(tài)變化,但大小不變的圖視口中(用setviewpot()函數[2]),設置固定圖形,這樣呈現在觀察者面前的是當前圖視口位置在動態(tài)變化,因而在屏上看到的圖像就好像在動態(tài)變化一樣。

2.2 利用顯示頁和編輯頁交替變化

將當前顯示頁和編輯頁分開(用setvisualpage()和setactivepage()函數),在編輯頁上

畫好圖形后,立即令該頁變?yōu)轱@示頁,然后在上次顯示頁上進行畫圖,畫好后,再交換,如此反復,在觀察者的視覺上,就出現了動畫的效果。

2.3 利用畫面存儲再重放的方法

如同制作幻燈片一樣,將整個動畫過程變成一個個片斷,然后存儲到顯示緩沖區(qū)內,當把它們按順序重放到屏幕上時,就出現了動畫效果。

2.4 直接對圖像動態(tài)存儲器進行操作

利用顯示適配器上控制圖像顯示的各種寄存器和圖像存儲器VRAM,對其進行直接操作和控制,從而可以高效快速的實現動畫效果。

 上述4種方法均可以實現動畫效果,但其操作比較復雜,且在程序中要對圖像不斷進行存取操作,這需要耗費大量內存資源。下面的擦除法動畫設計可以解決上述問題。

3. 擦除法動畫設計原理

擦除法動畫設計方法在很多的動畫制作工具(如flash)中大量使用,但在程序設計中卻鮮有人用。它的設計原理是:利用同色原理,當圖形色與背景色相同時人眼不能感知。在動畫設計中,當在一個位置畫了一張圖像時,使圖像色與背景色相異,然后再到另一個位置畫一張圖像并使圖像色與背景色也相異,此時將先前畫的圖像在原位置再畫一張,并使圖像色與背景色相同,這樣人眼只能看到新畫的一張圖像而看不到先前畫的圖像,從而先前畫的圖像感覺被擦除了。這樣連續(xù)畫多張圖像并在每畫一張新的圖像,將原來的圖像擦除,從而在觀察者來看就實現了動畫的效果。

4. 擦除法的動畫設計實現

下面以一個上下翻滾的圓作為一個例子來講解在TurboC2.0開發(fā)環(huán)境下用C語言來實現動畫的設計過程,其中動畫設計的方法是擦除法。具體的實現步驟如下:

4.1 TC的圖形系統(tǒng)的初始化

TurboC2.0為用戶提供了一個功能強大的畫圖軟件庫,它包括圖形庫文件(graphics.lib),圖形頭文件(graphics.h)和許多圖形顯示器的驅動程序。在TurboC2.0開始進行圖形設計前必須對之進行初始化,使系統(tǒng)知道要用什么類型的圖形顯示器的驅動程序,采用什么模式的圖形方式,以及該適配器驅動程序的尋找路徑名。這個初始化的函數是initgraph()。在本程序中的初始化如下:

gdriver=DETECT;

initgraph(gdriver, gmode, "");//圖形顯示器、顯示模式、路徑自動檢測

4.2 畫圖

setcolor(LIGHTRED);//設置圓的線條顏色為淡紅色

setlinestyle(0,0,1);//設置線條為形狀為實線,線寬為一點寬

setfillstyle(1, 10);//設置圓的填充式樣為以實填充,填充色為淡綠色

circle(300, 10+10*y,15);//畫一個圓心在坐標(300,10+10y),半徑為15的圓

這個地方我們需要畫一個圓(用draw()函數實現),并且設置圓的圓周線條的顏色(用setcolor()函數),設置線條類型(用setlinestyle()函數),設置圓的填充色和填充模式(用setfillstyle()函數),設置圓的填充色(用floodfill()),最后是畫圓(用circle()函數)。在本程序(draw()函數)中的代碼如下:

floodfill(300, 10+10*y, 12);//給圓填充如上stfillstyle中的淡綠色

為了實現擦除操作需在同一個位置再畫一個圓(用clear()函數實現),該操作只需將上面的畫圓函數(draw()函數)改動兩個設置即可,如下示:

setcolor(BLUE);//設置圓的線條顏色為藍色(與背景色相同)

setfillstyle(1, 10);//設置圓的填充式樣為以實填充,填充色為淡綠色

4.3 動畫實現

本部分是核心部分,先設置背景色為藍色(用setbkcolor()函數),再在屏幕上畫一個填充色為淡綠色的圓(draw()函數)。設置一個循環(huán)控制語句實現在屏幕上不同的位置畫圓,同時在每畫一個圓后作一個時間的延遲(用delay()函數),再在延遲后實現擦除操作,即調用clear()函數。其流程圖及代碼如下:

setbkcolor(BLUE);//設置背景色為藍色

for(j=20;j0;j=j-4)//控制動畫實現的次數為20次

{ for(i=j;i30;i++)//實現動畫從上向下閃爍

{ draw(i);//畫圓

delay(100000);//延遲0.1秒

clear(i);//擦除已畫的圓

}

for(i=30;ij;i--)//實現動畫從下向上閃爍

{ draw(i);//畫圓

delay(100000);//延遲0.1秒

clear(i);//擦除已畫的圓

}

}

動畫實現后的最后效果圖如下示。

4.4 關閉圖形系統(tǒng)

當圖形實現結束后需要關閉圖形系統(tǒng),利用函數closegraph()即可實現。

5. 總結

 擦除法動畫設計原理易于理解,便于操作。并且它的程序運行所需內存空間也比上述四種常用方法要少得多,因為它在程序執(zhí)行過程中不需將圖形存入內存再從內存調出,這節(jié)省了大量的內存空間。如果程序運行在內存緊張的環(huán)境中,如嵌入式系統(tǒng)中,這種方法尤其適用

c語言 圖形函數

圖形函數 1. 圖形模式的初始化

不同的顯示器適配器有不同的圖形分辨率。即是同一顯示器適配器, 在不同

模式下也有不同分辨率。因此, 在屏幕作圖之前, 必須根據顯示器適配器種類將

顯示器設置成為某種圖形模式, 在未設置圖形模式之前, 微機系統(tǒng)默認屏幕為文

本模式(80列, 25行字符模式), 此時所有圖形函數均不能工作。設置屏幕為圖形

模式, 可用下列圖形初始化函數:

void far initgraph(int far *gdriver, int far *gmode, char *path);

其中gdriver和gmode分別表示圖形驅動器和模式, path是指圖形驅動程序所

在的目錄路徑。有關圖形驅動器、圖形模式的符號常數及對應的分辨率見表2。

圖形驅動程序由Turbo C出版商提供, 文件擴展名為.BGI。根據不同的圖形

適配器有不同的圖形驅動程序。例如對于EGA、 VGA 圖形適配器就調用驅動程序

EGAVGA.BGI。 例4. 使用圖形初始化函數設置VGA高分辨率圖形模式

#include graphics.h

int main()

{

int gdriver, gmode;

gdriver=VGA;

gmode=VGAHI;

initgraph(gdriver, gmode, "c:\\tc");

bar3d(100, 100, 300, 250, 50, 1); /*畫一長方體*/

getch();

closegraph();

return 0;

}

有時編程者并不知道所用的圖形顯示器適配器種類, 或者需要將編寫的程序

用于不同圖形驅動器, Turbo C提供了一個自動檢測顯示器硬件的函數, 其調用

格式為:

void far detectgraph(int *gdriver, *gmode);

其中gdriver和gmode的意義與上面相同。

例5. 自動進行硬件測試后進行圖形初始化

#include graphics.h

int main()

{

int gdriver, gmode;

detectgraph(gdriver, gmode); /*自動測試硬件*/

printf("the graphics driver is %d, mode is %d\n", gdriver,

gmode); /*輸出測試結果*/

getch();

initgraph(gdriver, gmode, "c:\\tc");

/* 根據測試結果初始化圖形*/

bar3d(10, 10, 130, 250, 20, 1);

getch();

closegraph();

return 0;

}

上例程序中先對圖形顯示器自動檢測, 然后再用圖形初始化函數進行初始化

設置, 但Turbo C提供了一種更簡單的方法, 即用gdriver= DETECT 語句后再跟

initgraph()函數就行了。采用這種方法后, 上例可改為:

例6.

#include graphics.h

int main()

{

int gdriver=DETECT, gmode;

initgraph(gdriver, gmode, "c:\\tc");

bar3d(50, 50, 150, 30, 1);

getch();

closegraph();

return 0;

}

另外, Turbo C提供了退出圖形狀態(tài)的函數closegraph(), 其調用格式為:

void far closegraph(void);

調用該函數后可退出圖形狀態(tài)而進入文本方式(Turbo C 默認方式), 并釋放

用于保存圖形驅動程序和字體的系統(tǒng)內存。

2. 獨立圖形運行程序的建立

Turbo C對于用initgraph()函數直接進行的圖形初始化程序, 在編譯和鏈接

時并沒有將相應的驅動程序(*.BGI)裝入到執(zhí)行程序, 當程序進行到intitgraph()

語句時, 再從該函數中第三個形式參數char *path中所規(guī)定的路徑中去找相應的

驅動程序。若沒有驅動程序, 則在C:\TC中去找, 如C:\TC中仍沒有或TC不存在,

將會出現錯誤:

BGI Error: Graphics not initialized (use 'initgraph')

因此, 為了使用方便, 應該建立一個不需要驅動程序就能獨立運行的可執(zhí)行

圖形程序,Turbo C中規(guī)定用下述步驟(這里以EGA、VGA顯示器為例):

1. 在C:\TC子目錄下輸入命令:BGIOBJ EGAVGA

此命令將驅動程序EGAVGA.BGI轉換成EGAVGA.OBJ的目標文件。

2. 在C:\TC子目錄下輸入命令:TLIB LIB\GRAPHICS.LIB+EGAVGA

此命令的意思是將EGAVGA.OBJ的目標模塊裝到GRAPHICS.LIB庫文件中。

3. 在程序中initgraph()函數調用之前加上一句:

registerbgidriver(EGAVGA_driver):

該函數告訴連接程序在連接時把EGAVGA的驅動程序裝入到用戶的執(zhí)行程序中。

經過上面處理,編譯鏈接后的執(zhí)行程序可在任何目錄或其它兼容機上運行。

假設已作了前兩個步驟,若再向例6中加 registerbgidriver()函數則變成:

例7:

#includestdio.h

#includegraphics.h

int main()

{

int gdriver=DETECT,gmode;

registerbgidriver(EGAVGA_driver): / *建立獨立圖形運行程序 */

initgraph( gdriver, gmode,"c:\\tc");

bar3d(50,50,250,150,20,1);

getch();

closegraph();

return 0;

}

上例編譯鏈接后產生的執(zhí)行程序可獨立運行。

如不初始化成EGA或CGA分辨率, 而想初始化為CGA分辨率, 則只需要將上述

步驟中有EGAVGA的地方用CGA代替即可。

3.屏幕顏色的設置和清屏函數

對于圖形模式的屏幕顏色設置, 同樣分為背景色的設置和前景色的設置。在

Turbo C中分別用下面兩個函數。

設置背景色: void far setbkcolor( int color);

設置作圖色: void far setcolor(int color);

其中color 為圖形方式下顏色的規(guī)定數值, 對EGA, VGA顯示器適配器, 有關

顏色的符號常數及數值見下表所示。

表3 有關屏幕顏色的符號常數表

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

符號常數 數值 含義 符號常數 數值 含義

———————————————————————————————————

BLACK 0 黑色 DARKGRAY 8 深灰

BLUE 1 蘭色 LIGHTBLUE 9 深蘭

GREEN 2 綠色 LIGHTGREEN 10 淡綠

CYAN 3 青色 LIGHTCYAN 11 淡青

RED 4 紅色 LIGHTRED 12 淡紅

MAGENTA 5 洋紅 LIGHTMAGENTA 13 淡洋紅

BROWN 6 棕色 YELLOW 14 黃色

LIGHTGRAY 7 淡灰 WHITE 15 白色

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

對于CGA適配器, 背景色可以為表3中16種顏色的一種, 但前景色依賴于不同

的調色板。共有四種調色板, 每種調色板上有四種顏色可供選擇。不同調色板所

對應的原色見表4。

表4 CGA調色板與顏色值表

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

調色板 顏色值

——————————— ——————————————————

符號常數 數值 0 1 2 3

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

C0 0 背景 綠 紅 黃

C1 1 背景 青 洋紅 白

C2 2 背景 淡綠 淡紅 黃

C3 3 背景 淡青 淡洋紅 白

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

清除圖形屏幕內容使用清屏函數, 其調用格式如下:

voide far cleardevice(void);

另外, TURBO C也提供了幾個獲得現行顏色設置情況的函數。

int far getbkcolor(void); 返回現行背景顏色值。

int far getcolor(void); 返回現行作圖顏色值。

int far getmaxcolor(void); 返回最高可用的顏色值。

4. 基本圖形函數

基本圖形函數包括畫點, 線以及其它一些基本圖形的函數。本節(jié)對這些函數

作一全面的介紹。

一、畫點

1. 畫點函數

void far putpixel(int x, int y, int color);

該函數表示有指定的象元畫一個按color所確定顏色的點。對于顏色color的

值可從表3中獲得而對x, y是指圖形象元的坐標。

在圖形模式下, 是按象元來定義坐標的。對VGA適配器, 它的最高分辨率為

640x480, 其中640為整個屏幕從左到右所有象元的個數, 480 為整個屏幕從上到

下所有象元的個數。屏幕的左上角坐標為(0, 0), 右下角坐標為(639, 479), 水

平方向從左到右為x軸正向, 垂直方向從上到下為y軸正向。TURBO C 的圖形函數

都是相對于圖形屏幕坐標, 即象元來說的。

關于點的另外一個函數是:

int far getpixel(int x, int y);

它獲得當前點(x, y)的顏色值。

2. 有關坐標位置的函數

int far getmaxx(void);

返回x軸的最大值。

int far getmaxy(void);

返回y軸的最大值。

int far getx(void);

返回游標在x軸的位置。

void far gety(void);

返回游標有y軸的位置。

void far moveto(int x, int y);

移動游標到(x, y)點, 不是畫點, 在移動過程中亦畫點。

void far moverel(int dx, int dy);

移動游標從現行位置(x, y)移動到(x+dx, y+dy)的位置, 移動過程中不畫點。

二、畫線

1. 畫線函數

TURBO C提供了一系列畫線函數, 下面分別敘述:

void far line(int x0, int y0, int x1, int y1);

畫一條從點(x0, y0)到(x1, y1)的直線。

void far lineto(int x, int y);

畫一作從現行游標到點(x, y)的直線。

void far linerel(int dx, int dy);

畫一條從現行游標(x, y)到按相對增量確定的點(x+dx, y+dy)的直線。

void far circle(int x, int y, int radius);

以(x, y)為圓心, radius為半徑, 畫一個圓。

void far arc(int x, int y, int stangle, int endangle, int radius);

以(x, y)為圓心, radius為半徑, 從stangle開始到endangle結束(用度表示)

畫一段圓弧線。在TURBO C中規(guī)定x軸正向為0度, 逆時針方向旋轉一周, 依次為

90, 180, 270和360度(其它有關函數也按此規(guī)定, 不再重述)。

void ellipse(int x, int y, int stangle, int endangle, int xradius,

int yradius);

以(x, y)為中心, xradius, yradius為x軸和y軸半徑, 從角stangle 開始到

endangle結束畫一段橢圓線, 當stangle=0, endangle=360時, 畫出一個完整的

橢圓。

void far rectangle(int x1, int y1, int x2, inty2);

以(x1, y1)為左上角, (x2, y2)為右下角畫一個矩形框。

void far drawpoly(int numpoints, int far *polypoints);

畫一個頂點數為numpoints, 各頂點坐標由polypoints 給出的多邊形。

polypoints整型數組必須至少有2倍頂點數個無素。每一個頂點的坐標都定義為x,

y, 并且x在前。值得注意的是當畫一個封閉的多邊形時, numpoints 的值取實際

多邊形的頂點數加一, 并且數組polypoints中第一個和最后一個點的坐標相同。

下面舉一個用drawpoly()函數畫箭頭的例子。

例9:

#includestdlib.h

#includegraphics.h

int main()

{

int gdriver, gmode, i;

int arw[16]={200, 102, 300, 102, 300, 107, 330,

100, 300, 93, 300, 98, 200, 98, 200, 102};

gdriver=DETECT;

registerbgidriver(EGAVGA_driver);

initgraph(gdriver, gmode, "");

setbkcolor(BLUE);

cleardevice();

setcolor(12); /*設置作圖顏色*/

drawpoly(8, arw); /*畫一箭頭*/

getch();

closegraph();

return 0;

}

2. 設定線型函數

在沒有對線的特性進行設定之前, TURBO C用其默認值, 即一點寬的實線,

但TURBO C也提供了可以改變線型的函數。線型包括:寬度和形狀。其中寬度只有

兩種選擇: 一點寬和三點寬。而線的形狀則有五種。下面介紹有關線型的設置函

數。

void far setlinestyle(int linestyle, unsigned upattern, int

thickness);

該函數用來設置線的有關信息, 其中l(wèi)inestyle是線形狀的規(guī)定, 見表5。

表5. 有關線的形狀(linestyle)

━━━━━━━━━━━━━━━━━━━━━━━━━

符號常數 數值 含義

—————————————————————————

SOLID_LINE 0 實線

DOTTED_LINE 1 點線

CENTER_LINE 2 中心線

DASHED_LINE 3 點畫線

USERBIT_LINE 4 用戶定義線

━━━━━━━━━━━━━━━━━━━━━━━━━

thickness是線的寬度, 見表6。

表6. 有關線寬(thickness)

━━━━━━━━━━━━━━━━━━━━━━━━━

符號常數 數值 含義

—————————————————————————

NORM_WIDTH 1 一點寬

THIC_WIDTH 3 三點寬

━━━━━━━━━━━━━━━━━━━━━━━━━

對于upattern, 只有l(wèi)inestyle選USERBIT_LINE 時才有意義( 選其它線型,

uppattern取0即可)。此進uppattern的16位二進制數的每一位代表一個象元, 如

果那位為1, 則該象元打開, 否則該象元關閉。

void far getlinesettings(struct linesettingstype far *lineinfo);

該函數將有關線的信息存放到由lineinfo 指向的結構中, 表中

linesettingstype的結構如下:

struct linesettingstype{

int linestyle;

unsigned upattern;

int thickness;

}

例如下面兩句程序可以讀出當前線的特性

struct linesettingstype *info;

getlinesettings(info);

void far setwritemode(int mode);

該函數規(guī)定畫線的方式。如果mode=0, 則表示畫線時將所畫位置的原來信息

覆蓋了(這是TURBO C的默認方式)。如果mode=1, 則表示畫線時用現在特性的線

與所畫之處原有的線進行異或(XOR)操作, 實際上畫出的線是原有線與現在規(guī)定

的線進行異或后的結果。因此, 當線的特性不變, 進行兩次畫線操作相當于沒有

畫線。

有關線型設定和畫線函數的例子如下所示。

例10.

#includestdlib.h

#includegraphics.h

int main()

{

int gdriver, gmode, i;

gdriver=DETECT;

registerbgidriver(EGAVGA_driver);

initgraph(gdriver, gmode, "");

setbkcolor(BLUE);

cleardevice();

setcolor(GREEN);

circle(320, 240, 98);

setlinestyle(0, 0, 3); /*設置三點寬實線*/

setcolor(2);

rectangle(220, 140, 420, 340);

setcolor(WHITE);

setlinestyle(4, 0xaaaa, 1); /*設置一點寬用戶定義線*/

line(220, 240, 420, 240);

line(320, 140, 320, 340);

getch();

closegraph();

return 0;

}

5. 封閉圖形的填充

填充就是用規(guī)定的顏色和圖模填滿一個封閉圖形。

一、先畫輪廓再填充

TURBO C提供了一些先畫出基本圖形輪廓, 再按規(guī)定圖模和顏色填充整個封

閉圖形的函數。在沒有改變填充方式時, TURBO C以默認方式填充。 下面介紹這

些函數。

void far bar(int x1, int y1, int x2, int y2);

確定一個以(x1, y1)為左上角, (x2, y2)為右下角的矩形窗口, 再按規(guī)定圖

模和顏色填充。

說明: 此函數不畫出邊框, 所以填充色為邊框。

void far bar3d(int x1, int y1, int x2, int y2, int depth, int

topflag);

當topflag為非0時, 畫出一個三維的長方體。當topflag為0時, 三維圖形不

封頂, 實際上很少這樣使用。

說明: bar3d()函數中, 長方體第三維的方向不隨任何參數而變, 即始終為

45度的方向。

void far pieslice(int x, int y, int stangle, int endangle, int

radius);

畫一個以(x, y)為圓心, radius為半徑, stangle為起始角度, endangle 為

終止角度的扇形, 再按規(guī)定方式填充。當stangle=0, endangle=360 時變成一個

實心圓, 并在圓內從圓點沿X軸正向畫一條半徑。

void far sector(int x, int y, int stanle, intendangle, int

xradius, int yradius);

畫一個以(x, y)為圓心分別以xradius, yradius為x軸和y軸半徑, stangle

為起始角, endangle為終止角的橢圓扇形, 再按規(guī)定方式填充。

二、設定填充方式

TURBO C有四個與填充方式有關的函數。下面分別介紹:

void far setfillstyle(int pattern, int color);

color的值是當前屏幕圖形模式時顏色的有效值。pattern的值及與其等價的

符號常數 除USER_FILL(用戶定義填充式樣)以外, 其它填充式樣均可由setfillstyle()

函數設置。當選用USER_FILL時, 該函數對填充圖模和顏色不作任何改變。 之所

以定義USER_FILL主要因為在獲得有關填充信息時用到此項。

void far setfillpattern(char * upattern,int color);

設置用戶定義的填充圖模的顏色以供對封閉圖形填充。

其中upattern是一個指向8個字節(jié)的指針。這8個字節(jié)定義了8x8點陣的圖形。

每個字節(jié)的8位二進制數表示水平8點, 8個字節(jié)表示8行, 然后以此為模型向個封

閉區(qū)域填充。

void far getfillpattern(char * upattern);

該函數將用戶定義的填充圖模存入upattern指針指向的內存區(qū)域。

void far getfillsetings(struct fillsettingstype far * fillinfo);

獲得現行圖模的顏色并將存入結構指針變量fillinfo中。其中fillsettingstype

結構定義如下:

struct fillsettingstype{

int pattern; /* 現行填充模式 * /

int color; /* 現行填充模式 * /

};

三、任意封閉圖形的填充

截止目前為止, 我們只能對一些特定形狀的封閉圖形進行填充, 但還不能對

任意封閉圖形進行填充。為此, TURBO C 提供了一個可對任意封閉圖形填充的函

數, 其調用格式如下:

void far floodfill(int x, int y, int border);

其中: x, y為封閉圖形內的任意一點。border為邊界的顏色, 也就是封閉圖

形輪廓的顏色。調用了該函數后, 將用規(guī)定的顏色和圖模填滿整個封閉圖形。例12:

#includestdlib.h

#includegraphics.h

main()

{

int gdriver, gmode;

strct fillsettingstype save;

gdriver=DETECT;

initgraph(gdriver, gmode, "");

setbkcolor(BLUE);

cleardevice();

setcolor(LIGHTRED);

setlinestyle(0,0,3);

setfillstyle(1,14); /*設置填充方式*/

bar3d(100,200,400,350,200,1); /*畫長方體并填充*/

floodfill(450,300,LIGHTRED); /*填充長方體另外兩個面*/

floodfill(250,150, LIGHTRED);

rectanle(450,400,500,450); /*畫一矩形*/

floodfill(470,420, LIGHTRED); /*填充矩形*/

getch();

closegraph();

}

6. 有關圖形窗口和圖形屏幕操作函數

一、圖形窗口操作

象文本方式下可以設定屏幕窗口一樣, 圖形方式下也可以在屏幕上某一區(qū)域

設定窗口, 只是設定的為圖形窗口而已, 其后的有關圖形操作都將以這個窗口的

左上角(0,0)作為坐標原點, 而且可為通過設置使窗口之外的區(qū)域為不可接觸。

這樣, 所有的圖形操作就被限定在窗口內進行。

void far setviewport(int xl,int yl,int x2, int y2,int clipflag);

設定一個以(xl,yl)象元點為左上角, (x2,y2)象元為右下角的圖形窗口, 其

中x1,y1,x2,y2是相對于整個屏幕的坐標。若clipflag為非0, 則設定的圖形以外

部分不可接觸, 若clipflag為0, 則圖形窗口以外可以接觸。

void far clearviewport(void);

清除現行圖形窗口的內容。

void far getviewsettings(struct viewporttype far * viewport);

獲得關于現行窗口的信息,并將其存于viewporttype定義的結構變量viewport

中, 其中viewporttype的結構說明如下:

struct viewporttype{

int left, top, right, bottom;

int cliplag;

};

二、屏幕操作

除了清屏函數以外, 關于屏幕操作還有以下函數:

void far setactivepage(int pagenum);

void far setvisualpage(int pagenum);

這兩個函數只用于EGA,VGA 以及HERCULES圖形適配器。setctivepage() 函數

是為圖形輸出選擇激活頁。 所謂激活頁是指后續(xù)圖形的輸出被寫到函數選定的

pagenum頁面, 該頁面并不一定可見。setvisualpage()函數才使pagenum 所指定

的頁面變成可見頁。頁面從0開始(Turbo C默認頁)。如果先用setactivepage()

函數在不同頁面上畫出一幅幅圖像,再用setvisualpage()函數交替顯示, 就可以

實現一些動畫的效果。

void far getimage(int xl,int yl, int x2,int y2, void far *mapbuf);

void far putimge(int x,int,y,void * mapbuf, int op);

unsined far imagesize(int xl,int yl,int x2,int y2);

這三個函數用于將屏幕上的圖像復制到內存,然后再將內存中的圖像送回到

屏幕上。首先通過函數imagesize()測試要保存左上角為(xl,yl), 右上角為(x2,

y2)的圖形屏幕區(qū)域內的全部內容需多少個字節(jié), 然后再給mapbuf 分配一個所測

數字節(jié)內存空間的指針。通過調用getimage()函數就可將該區(qū)域內的圖像保存在

內存中, 需要時可用putimage()函數將該圖像輸出到左上角為點(x, y)的位置上,

其中getimage()函數中的參數op規(guī)定如何釋放內存中圖像。

對于imagesize()函數, 只能返回字節(jié)數小于64K字節(jié)的圖像區(qū)域, 否則將會

出錯, 出錯時返回-1。

本節(jié)介紹的函數在圖像動畫處理、菜單設計技巧中非常有用。

例13: 下面程序模擬兩個小球動態(tài)碰撞過程。

7. 圖形模式下的文本輸出

在圖形模式下, 只能用標準輸出函數, 如printf(), puts(), putchar() 函

數輸出文本到屏幕。除此之外, 其它輸出函數(如窗口輸出函數)不能使用, 即是

可以輸出的標準函數, 也只以前景色為白色, 按80列, 25行的文本方式輸出。

Turbo C2.0也提供了一些專門用于在圖形顯示模式下的文本輸出函數。下面

將分別進行介紹。

一、文本輸出函數

void far outtext(char far *textstring);

該函數輸出字符串指針textstring所指的文本在現行位置。

void far outtextxy(int x, int y, char far *textstring);

該函數輸出字符串指針textstring所指的文本在規(guī)定的(x, y)位置。 其中x

和y為象元坐標。

說明:

這兩個函數都是輸出字符串, 但經常會遇到輸出數值或其它類型的數據,

此時就必須使用格式化輸出函數sprintf()。

sprintf()函數的調用格式為:

int sprintf(char *str, char *format, variable-list);

它與printf()函數不同之處是將按格式化規(guī)定的內容寫入str 指向的字符串

中, 返回值等于寫入的字符個數。

例如:

sprintf(s, "your TOEFL score is %d", mark);

這里s應是字符串指針或數組, mark為整型變量。

C語言中的圖形函數有哪些

一) 像素函數

putpiel() 畫像素點函數

getpixel()返回像素色函數

(二) 直線和線型函數

line() 畫線函數

lineto() 畫線函數

linerel() 相對畫線函數

setlinestyle() 設置線型函數

getlinesettings() 獲取線型設置函數

setwritemode() 設置畫線模式函數

(三)、多邊形函數

rectangle() 畫矩形函數

bar() 畫條函數

bar3d() 畫條塊函數

drawpoly() 畫多邊形函數

(四)、 圓、弧和曲線函數

getaspectratio()獲取縱橫比函數

circle()畫圓函數

arc() 畫圓弧函數

ellipse()畫橢圓弧函數

fillellipse() 畫橢圓區(qū)函數

pieslice() 畫扇區(qū)函數

sector() 畫橢圓扇區(qū)函數

getarccoords()獲取圓弧坐標函數

(五)、 填充函數

setfillstyle() 設置填充圖樣和顏色函數

setfillpattern() 設置用戶圖樣函數

floodfill() 填充閉域函數

fillpoly() 填充多邊形函數

getfillsettings() 獲取填充設置函數

getfillpattern() 獲取用戶圖樣設置函數

(六)、圖像函數

imagesize() 圖像存儲大小函數

getimage() 保存圖像函數

putimage() 輸出圖像函數

C語言中有沒有繪圖的函數庫?里面每個函數的內容和用法是什么?

圖形和圖像函數包含在graphics.h里面

(一) 像素函數

56. putpiel() 畫像素點函數

57. getpixel()返回像素色函數

(二) 直線和線型函數

58. line() 畫線函數

59. lineto() 畫線函數

60. linerel() 相對畫線函數

61. setlinestyle() 設置線型函數

62. getlinesettings() 獲取線型設置函數

63. setwritemode() 設置畫線模式函數

(三)、多邊形函數

64. rectangle() 畫矩形函數

65. bar() 畫條函數

66. bar3d() 畫條塊函數

67. drawpoly() 畫多邊形函數

(四)、 圓、弧和曲線函數

68. getaspectratio()獲取縱橫比函數

69. circle()畫圓函數

70. arc() 畫圓弧函數

71. ellipse()畫橢圓弧函數

72. fillellipse() 畫橢圓區(qū)函數

73. pieslice() 畫扇區(qū)函數

74. sector() 畫橢圓扇區(qū)函數

75. getarccoords()獲取圓弧坐標函數

(五)、 填充函數

76. setfillstyle() 設置填充圖樣和顏色函數

77. setfillpattern() 設置用戶圖樣函數

78. floodfill() 填充閉域函數

79. fillpoly() 填充多邊形函數

80. getfillsettings() 獲取填充設置函數

81. getfillpattern() 獲取用戶圖樣設置函數

(六)、圖像函數

82. imagesize() 圖像存儲大小函數

83. getimage() 保存圖像函數

84. putimage() 輸出圖像函數

四、圖形和圖像函數

對許多圖形應用程序,直線和曲線是非常有用的。但對有些圖形只能靠操作單個像素才能畫出。當然如果沒有畫像素的功能,就無法操作直線和曲線的函數。而且通過大規(guī)模使用像素功能,整個圖形就可以保存、寫、擦除和與屏幕上的原有圖形進行疊加。

(一) 像素函數

56. putpixel() 畫像素點函數

功能: 函數putpixel() 在圖形模式下屏幕上畫一個像素點。

用法: 函數調用方式為void putpixel(int x,int y,int color);

說明: 參數x,y為像素點的坐標,color是該像素點的顏色,它可以是顏色符號名,也可以是整型色彩值。

此函數相應的頭文件是graphics.h

返回值: 無

例: 在屏幕上(6,8)處畫一個紅色像素點:

putpixel(6,8,RED);

57. getpixel()返回像素色函數

功能: 函數getpixel()返回像素點顏色值。

用法: 該函數調用方式為int getpixel(int x,int y);

說明: 參數x,y為像素點坐標。

函數的返回值可以不反映實際彩色值,這取決于調色板的設置情況(參見setpalette()函數)。

這個函數相應的頭文件為graphics.h

返回值: 返回一個像素點色彩值。

例: 把屏幕上(8,6)點的像素顏色值賦給變量color。

color=getpixel(8,6);

(二) 直線和線型函數

有三個畫直線的函數,即line(),lineto(),linerel()。這些直線使用整型坐標,并相對于當前圖形視口,但不一定受視口限制,如果視口裁剪標志clip為真,那么直線將受到視口邊緣截斷;如果clip為假,即使終點坐標或新的當前位置在圖形視口或屏幕極限之外,直線截斷到屏幕極限。

有兩種線寬及幾種線型可供選擇,也可以自己定義線圖樣。下面分別介紹直線和線型函數。

58. line() 畫線函數

功能: 函數line()使用當前繪圖色、線型及線寬,在給定的兩點間畫一直線。

用法: 該函數調用方式為void line(int startx,int starty,int endx,int endy);

說明: 參數startx,starty為起點坐標,endx,endy為終點坐標,函數調用前后,圖形狀態(tài)下屏幕光標(一般不可見)當前位置不改變。

此函數相應的頭文件為graphics.h

返回值: 無

例: 見函數60.linerel()中的實例。

59. lineto() 畫線函數

功能: 函數lineto()使用當前繪圖色、線型及線寬,從當前位置畫一直線到指定位置。

用法: 此函數調用方式為void lineto(int x,int y);

說明: 參數x,y為指定點的坐標,函數調用后,當前位置改變到指定點(x,y)。

該函數對應的頭文件為graphics.h

返回值: 無

例: 見函數60.linerel()中的實例。

60.linerel() 相對畫線函數

功能: 函數linerel() 使用當前繪圖色、線型及線寬,從當前位置開始,按指定的水平和垂直偏移距離畫一直線。

用法: 這個函數調用方式為void linerel(int dx,int dy);

說明: 參數dx,dy分別是水平偏移距離和垂直偏移距離。

函數調用后,當前位置變?yōu)樵黾悠凭嚯x后的位置,例如,原來的位置是(8,6),調用函數linerel(10,18)后,當前位置為(18,24)。

返回值:無

例: 下面的程序為畫線函數調用實例:

#i ncludegraphics.h

void main()

{

int driver,mode;

driver=DETECT;

mode=0;

initgraph(driver,mode,"");

setcolor(15);

line(66,66,88,88);

lineto(100,100);

linerel(36,64);

getch();

restorecrtmode();

}

61. setlinestyle() 設置線型函數

功能: setlinestyle() 為畫線函數設置當前線型,包括線型、線圖樣和線寬。

用法: setlinestyle() 函數調用方式為void setlinestyle(int stly,unsigned pattern,int width);

說明: 參數style為線型取值,也可以用相應名稱表示,如表1-10中所示。

參數pattern用于自定義線圖樣,它是16位(bit)字,只有當style=USERBIT_LINE(值為1)時,pattern的值才有意義,使用用戶自定義線圖樣,與圖樣中“1”位對應的像素顯示,因此,pattern=0xFFFF,則畫實線;pattern=0x9999,則畫每隔兩個像素交替顯示的虛線,如果要畫長虛線,那么pattern的值可為0xFF00和0xF00F,當style不為USERBIT_LINE值時,雖然pattern的值不起作用,但扔須為它提供一個值,一般取為0。

參數wigth用來設定線寬,其取值見表1-11,表中給出了兩個值,即1和3,實際上,線寬取值為2也是可以接受的。

若用非法參數調用setlinestyle()函數,那么graphresult()會返回錯誤代碼,并且當前線型繼續(xù)有效。

Turbo C提供的線型與線寬定義在頭文件graphics.h中,表1-10和1-11分別列出了參數的取值與含義。

表1-10 線型

-----------------------------------------------------

名 稱 取 值 含 義

-----------------------------------------------------

SOLID_LINE 0 實線

DOTTED_LINE 1 點線

CNTER_LINE 2 中心線

DASHED_LINE 3 虛線

USERBIT_LINE 4 用戶自定義線型

-----------------------------------------------------

表1-11 線寬

-----------------------------------------------------------

名 稱 取 值 說 明

-----------------------------------------------------------

NORM_WIDTH(常寬) 1 一個像素寬(缺省值)

THICK_WIDTH(加寬) 3 三個像素寬

-----------------------------------------------------------

這個函數的頭文件是graphics.h

返回值: 無

例: 下面的程序顯示了BC中所提供的線型圖樣:

#i ncludegraphics.h

void main()

{

int driver,mode;

driver=DETECT;

mode=0;

initgraph(driver,mode,"");

for(i=0;i4;i++)

{

setlinestyle(i,0,1);

line(i*50,200,i*50+60,200)

}

getch();

restorecrtmode();

}

62. getlinesettings() 獲取線型設置函數

功能: 函數getlinesettings() 用當前設置的線型、線圖樣和線寬填 寫linesettingstype型結構。

用法: 函數調用方式為void getlinesettings(struct linesettingstype *info);

說明: 此函數調用執(zhí)行后,當前的線型、線圖樣和線寬值被裝入info指向的結構里,從而可從該結構中獲得線型設置。

linesettingstype型結構定義如下:

struct linesettingstype {

int linestyle;

unsigned upattern;

int thickness;

};

其中l(wèi)inestyle用于存放線型,線型值為表1-10中的各值之一。

upattern用為裝入用戶自定義線圖樣,這是16位字,每一位等于一個像素,如果哪個位被設置,那么該像素打開,否則關閉。

thickness為線寬值存放的變量,可參見表1-11。

getlinesettings()函數對應的頭文件為graphics.h

返回值: 返回的線型設置存放在info指向的結構中。

例: 把當前線型的設置寫入info結構:

struct linesettingstype info;

getlinesettings(info);

63.setwritemode() 設置畫線模式函數

功能: 函數setwritemode() 設置畫線模式

用法: 函數調用方式為 void setwritemode()(int mode);

說明: 參數mode只有兩個取值0和1,若mode為0,則新畫的線將復蓋屏幕上原有的圖形,此為缺省畫線輸出模式。如果mode為1,那么新畫的像素點與原有圖形的像素點先進行異或(XOR)運算,然后輸出到屏幕上,使用這種畫線輸出模式,第二次畫同一圖形時,將擦除該圖形。調用setwritemode()設置的畫線輸出模式只影響函數line(),lineto(),linerel(),recangle()和drawpoly()。

setwritemode()函數對應的頭文件是graphics.h

返回值: 無

例: 設置畫線輸出模式為0:

setwritemode(0);

(三)、多邊形函數

對多邊形,無疑可用畫直線函數來畫出它,但直接提供畫多邊形的函數會給用戶很大方便。最常見的多邊形有矩形、矩形塊(或稱條形)、多邊形和多邊形塊,我們還把長方形條塊也放到這里一起考慮,雖然它不是多邊形,但它的特例就是矩形(塊)。下面直接介紹畫多邊形的函數。

64. rectangle() 畫矩形函數

功能: 函數rectangle() 用當前繪圖色、線型及線寬,畫一個給定左上角與右下角的矩形(正方形或長方形)。

用法: 此函數調用方式為void rectangle(int left,int top,int right,int bottom);

說明: 參數left,top是左上角點坐標,right,bottom是右下角點坐標。如果有一個以上角點不在當前圖形視口內,且裁剪標志clip設置的是真(1),那么調用該函數后,只有在圖形視口內的矩形部分才被畫出。

這個函數對應的頭文件為graphics.h

返回值: 無

例: 下面的程序畫一些矩形實例:

#i ncludegraphics.h

void main()

{

int driver,mode;

driver=DETECT;

mode=0;

initgrpah(driver,mode,"");

rectangle(80,80,220,200);

rectangle(140,99,180,300);

rectangle(6,6,88,88);

rectangle(168,72,260,360);

getch();

restorecrtmode();

}

65. bar() 畫條函數

功能: 函數bar()用當前填充圖樣和填充色(注意不是給圖色)畫出一個指定上左上角與右下角的實心長條形(長方塊或正方塊),但沒有四條邊線)。

用法: bar()函數調用方式為void bar(int left,int top,int right,int bottom);

說明: 參數left,topright,bottom分別為左上角坐標與右下角坐標,它們和調用函數rectangle()的情形相同,調用此函數前,可用setfillstyle()或setfillpattern()設置當前填充圖樣和填充色。

注意此函數只畫沒有邊線的條形,如果要畫有邊線的的條形,可調用下面的函數bar3d()來畫,并將深度參數設為0,同時topflag參數要設置為真,否則該條形無頂邊線。

這 應的頭文件為graphics.h

返回值: 無

例: 見函數bar3d()中的實例。

66.bar3d() 畫條塊函數

功能: 函數bar3d() 使用當前繪圖色、線型及線寬畫出三維長方形條塊,并用當前填充圖樣和填 充色填充該三維條塊的表面。

用法: 此函數調用方式為void bar3d(int left,int top,int right,int bottom,int depth,int topflag);

說明: 參數left,top,right,bottom分另為左上角與右下角坐標,這與bar()函數中的一樣。參數depth為條塊的深度,以像素為單位,通常按寬度的四分之一計算。深度方向通過屏顯縱橫比調節(jié)為約45度(即這時x/y比設置為1:1)。

參數topflag相當于一個布爾參數,如果設置為1(真)那么條塊上放一頂面;若設置為0(假),則三維條形就沒有頂面,這樣可使多個三維條形疊加在一起。

要使圖形更加美觀,可利用函數floodfill()或setfillpattern()來選擇填充圖樣和填充色(參見本小節(jié)(五)填充函數 )。

bar3d()函數對應的頭文件為graphics.h

返回值: 無

例: 下面的程序畫一個條形和條塊:

#i ncludegraphics.h

void main()

{

int driver,mode;

driver=DETECT;

mode=0;

initgraph(driver,mode,"");

setfillstyle(SOLID-FILL,GREEN);

bar(60,80,220,160);

setfillstyle(SOLID-FILL,RED);

bar3d(260,180,360,240,20,1);

getch();

restorecrtmode();

}

67. drawpoly() 畫多邊形函數

功能: 函數drawpoly() 用當前繪圖色、線型及線寬,畫一個給定若干點所定義的多邊形。

用法: 此函數調用方式為void drawpoly(int pnumber,int *points);

說明: 參數pnumber為多邊形的頂點數;參數points指向整型數組,該數組中是多邊形所有頂點(x,y)坐標值,即一系列整數對,x坐標值在前。顯然整型數組的維數至少為頂點數的2倍,在定義了多邊形所有頂點的數組polypoints時,頂點數目可通過計算sizeof(polypoints)除以2倍的sizeof(int)得到,這里除以2倍的原因是每個頂點有兩個整數坐標值。另外有一點要注意,畫一個n個頂點的閉合圖形,頂點數必須等于n+1,并且最后一點(第n+1)點坐標必須等于第一點的坐標。

drawpoly()函數對應的頭文件為grpahics.h

返回值: 無

例: 下面的程序畫一個封閉星形圖與一個不封閉星形圖:

#i ncludegraphics.h

void main()

{

int driver,mode;

static int polypoints1[18]={100,100,110,120,100,130,120,125,140,140,130,120,

140,110,120,115,100,100};

static int polypoints2[18]={180,100,210,120,200,130,220,125,240,140,230,120,

240,110,220,115,220,110};

driver=DETECT;

mode=0;

initgraph(driver,mode,"");

drawpoly(9,polypoints1);

drawpoly(9,polypoints2);

getch();

restorecrtmode();

}

(四)、 圓、弧和曲線函數

在一個屏幕上畫得很圓的圖形到另一個屏幕上可能被壓扁或拉長,這是因為每一種顯示卡與之相應的顯示模式都有一個縱橫比。縱橫比是指像素的水平方向大小與垂直方向大小的比值。如VGA顯示卡由于偈素基本上是正方形,所以縱橫比為1.000。

為了保證幾何圖形基本按預計情況顯示在屏幕上,用屏顯的縱橫比來計算和糾正不同硬件及顯示卡產生的畸變。計算縱橫比所需要的水平方向和垂直方向的比例系數可調用函數getaspectratio()獲得。

68. getaspectratio()獲取縱橫比函數

功能: 函數getaspectratio()返回x方向和y方向的比例系數,用這兩個整型值可計算某一特定屏顯的縱橫比。

用法: 此函數調用方式為void getaspectratio(int xasp,int yasp);

說明: 參數xasp指向的變量存放返回的x方向比例系數;參數yasp指向的變量存放返回的y方向比例系數。通常y方向比例系數為10 000, x方向比例系數不大于10 000(這是因為大多數屏幕像素高比寬長)。

注意縱橫比自動用作下面函數arc(),circle()和pieslice()中的標尺因子,使屏幕上圓或弧正常顯示。但用ellipse()函數畫橢圓必須調用本函數獲取縱橫比作為標尺因子,否則不予調整??v橫比可用于其它幾何圖形,目的是校正和顯示圖形。

getaspectratio()函數對應的頭文件為graphics.h

返回值: 返回x與y方向比例系數分別存放在xasp和yasp所指向的變量中。

例: 下面的程序顯示縱橫比:

int xasp,yasp;

float aspectratio;

getaspectratio(xasp,yasp);

aspectratio=xasp/yasp;

printf("aspect ratio: %f",aspectratio);

69. circle()畫圓函數

功能: 函數circle()使用當前繪圖色并以實線畫一個完整的圓。

用法:該函數調用方式為void circle(int x,int y,int radius);

說明: 參數x,y為圓心坐標,radius為圓半徑,用像素個素表示。注意,調用circle()函數畫圓時不用當前線型。

不同于ellipse()函數,只用單個半徑radius參數調用circle()函數,故屏顯縱橫比可以自動調節(jié),以產生正確的顯示圖。

此函數對應的頭文件為graphics.h

返回值: 無

例: 畫六個同心圓,圓心在(100,100)。

#i ncludegraphics.h

void main()

{

int driver,mode;

driver=DETECT;

mode=0;

initgraph(driver,mode,"");

circle(100,100,10);

circle(100,100,20);

circle(100,100,30);

circle(100,100,40);

circle(100,100,50);

circle(100,100,60);

getch();

restorecrtmode();

}

70. arc() 畫圓弧函數

功能: 函數arc()使用當前繪圖色并以實線畫一圓弧。

用法: 函數調用方式為void arc(int x,int y,int startangle,int endangle,int radius);

說明: 參數x,y為圓心坐標,startangle與endangle分別為起始角與終止角,radius為半徑。圓心坐標和半徑以像素個數給出,起始角和終止角以度為單位,0度位于右邊,90度位于頂部,180度位于左邊,底部是270度。同往常一樣,360度與0度重合。角度按逆時針方向增加,但并不要求終止角一定比起始角大。例如指定300度和90度分別為起始角和終止角,與指定300度和450度分別為起始角和終止角可畫出相同的弧。大于360度可作為參數,它將被化到0度 ̄360度范圍里。函數arc()能畫封閉圓,只要取起始角為0度,終止角為360度即可。此函數中,屏顯縱橫比可自動調節(jié)。

arc()函數對應的頭文件為graphics.h

返回值: 無

例: 以(200,200)為圓心,100為半徑,從0度到120度畫圓?。?/p>

#i ncludegraphics.h

void main()

{

int driver,mode;

driver=DETECT;

mode=0;

initgraph(drivwer,mode,"");

setcolor(WHITE);

arc(200,200,0,120,100);

getch();

restorecrtmode();

}

C語言中,圖像處理函數的使用

Tc中用initgraph()函數可以切換到圖形模式,用closegraph()可以從圖形模式切換回字符模式。

initgraph()和closegraph()都是圖形函數,使用圖形函數必須包括頭文件"graphics.h"。

void far i nitgraph(int far *graphdriver, int far *graphmode,char far *pathtodriver);

graphdriver是指向圖形驅動序號變量的指針,

graphmode是在graphdriver選定后,指向圖形顯示模式序號變量的指針,

pathtodriver表示存放圖形驅動文件的路徑。

圖形驅動序號不同,圖形驅動文件也不同。序號為VGA圖形驅動對應"egavga.bgi"這個圖形驅動文件。

"egavga.bgi"一般在 Tc目錄下

例如:

-------

#include graphics.h

int Drive,Mode=DETECT;

initgraph(Drive,Mode,""); //圖形顯示器、顯示模式、路徑自動檢測

運行時需要在當前目錄下存在 EGAVGA.BGI文件

在TC\BGI目錄底下

-------

如果編譯后的.exe文件在另外一個目錄(如編譯后的.exe文件在D:\MyTc 目錄下,而編譯器的程序和.BGI文件在C:\Turboc\bin 目錄下,則需要填上BGI文件的路徑

例如:

initgraph(Drive,Mode,"C:\\Turboc\\bgi");

當前標題:c語言中動圖函數是,c語言簡單動圖代碼
文章出自:http://jinyejixie.com/article16/dssdodg.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供營銷型網站建設小程序開發(fā)、網站排名建站公司、品牌網站建設、關鍵詞優(yōu)化

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

外貿網站建設
玉门市| 滦南县| 宝坻区| 长岛县| 门头沟区| 遵义县| 通化市| 新余市| 大关县| 定西市| 尚志市| 西平县| 岳阳县| 象州县| 岳阳县| 英山县| 绥滨县| 林口县| 竹北市| 定边县| 自治县| 乐陵市| 祁阳县| 南昌县| 博客| 蕲春县| 凉城县| 马关县| 灯塔市| 越西县| 宝坻区| 闽清县| 潜江市| 施甸县| 高台县| 北安市| 兰西县| 上思县| 凤山县| 阳山县| 封开县|