c語言如何畫圖_第1頁
c語言如何畫圖_第2頁
c語言如何畫圖_第3頁
c語言如何畫圖_第4頁
c語言如何畫圖_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余4頁可下載查看

下載本文檔

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

文檔簡介

1、c語言如何畫圖2007-06-1214:38圖形和圖像函數(shù)包含在graphics.h里面(一)像素函數(shù)56. putpiel()畫像素點(diǎn)函數(shù)57. getpixel()返回像素色函數(shù)(二)直線和線型函數(shù)58. line()畫線函數(shù)59. lineto()畫線函數(shù)60. linerel()相對畫線函數(shù)61. setlinestyle()設(shè)置線型函數(shù)62. getlinesettings()獲取線型設(shè)置函數(shù)63. setwritemode()設(shè)置畫線模式函數(shù)(三)、多邊形函數(shù)64. rectangle()畫矩形函數(shù)65. bar()畫條函數(shù)66. bar3d()畫條塊函數(shù)67. drawpoly(

2、)畫多邊形函數(shù)(四)、圓、弧和曲線函數(shù)68. getaspectratio()獲取縱橫比函數(shù)69. circle()畫圓函數(shù)70. arc()畫圓弧函數(shù)71. ellipse()畫橢圓弧函數(shù)72. fillellipse()畫橢圓區(qū)函數(shù)73. pieslice()畫扇區(qū)函數(shù)74. sector()畫橢圓扇區(qū)函數(shù)75. getarccoords()(五)、填充函數(shù)76. setfillstyle()77. setfillpattern()獲取圓弧坐標(biāo)函數(shù)設(shè)置填充圖樣和顏色函數(shù)設(shè)置用戶圖樣函數(shù)78. floodfill()填充閉域函數(shù)79. fillpoly()填充多邊形函數(shù)80. getfill

3、settings()獲取填充設(shè)置函數(shù)81. getfillpattern()獲取用戶圖樣設(shè)置函數(shù)(六)、圖像函數(shù)82. imagesize()圖像存儲大小函數(shù)83. getimage()保存圖像函數(shù)84. putimage()輸出圖像函數(shù)四、圖形和圖像函數(shù)對許多圖形應(yīng)用程序,直線和曲線是非常有用的.但對有些圖形只能靠操作單個像素才能畫出.當(dāng)然如果沒有畫像素的功能,就無法操作直線和曲線的函數(shù).而且通過大規(guī)模使用像素功能,整個圖形就可以保存、寫、擦除和與屏幕上的原有圖形進(jìn)行疊加.(一)像素函數(shù)56. putpixel()畫像素點(diǎn)函數(shù)功能:函數(shù)putpixel()在圖形模式下屏幕上畫一個像素點(diǎn).用法

4、:函數(shù)調(diào)用方式為voidputpixel(intx,inty,intcolor);說明:參數(shù)x,y為像素點(diǎn)的坐標(biāo),color是該像素點(diǎn)的顏色,它可以是顏色符號名,也可以是整型色彩值.此函數(shù)相應(yīng)的頭文件是graphics.h返回值:無例:在屏幕上(6,8)處畫一個紅色像素點(diǎn):putpixel(6,8,RED);57. getpixel()返回像素色函數(shù)功能:函數(shù)getpixel()返回像素點(diǎn)顏色值.用法:該函數(shù)調(diào)用方式為intgetpixel(intx,inty);說明:參數(shù)x,y為像素點(diǎn)坐標(biāo).函數(shù)的返回值可以不反映實際彩色值,這取決于調(diào)色板的設(shè)置情況(參見setpalette()函數(shù)).這個函

5、數(shù)相應(yīng)的頭文件為graphics.h返回值:返回一個像素點(diǎn)色彩值.例:把屏幕上(8,6)點(diǎn)的像素顏色值賦給變量color0color=getpixel(8,6);(二)直線和線型函數(shù)有三個畫直線的函數(shù),即line(),lineto(),linerel().這些直線使用整型坐標(biāo),并相對于當(dāng)前圖形視口,但不一定受視口限制,如果視口裁剪標(biāo)志clip為真,那么直線將受到視口邊緣截斷;如果clip為假,即使終點(diǎn)坐標(biāo)或新的當(dāng)前位置在圖形視口或屏幕極限之外,直線截斷到屏幕極限.有兩種線寬及幾種線型可供選擇,也可以自己定義線圖樣.下面分別介紹直線和線型函數(shù).58. line()畫線函數(shù)功能:函數(shù)line()使

6、用當(dāng)前繪圖色、線型及線寬,在給定的兩點(diǎn)間畫一直線.用法:該函數(shù)調(diào)用方式為voidline(intstartx,intstarty,intendx,intendy);說明:參數(shù)startx,starty為起點(diǎn)坐標(biāo),endx,endy為終點(diǎn)坐標(biāo),函數(shù)調(diào)用前后,圖形狀態(tài)下屏幕光標(biāo)(一般不可見)當(dāng)前位置不改變.此函數(shù)相應(yīng)的頭文件為graphics.h返回值:無例:見函數(shù)60.linerel()中的實例.59. lineto()畫線函數(shù)功能:函數(shù)lineto()使用當(dāng)前繪圖色、線型及線寬,從當(dāng)前位置畫一直線到指定位置.用法:此函數(shù)調(diào)用方式為voidlineto(intx,inty);說明:參數(shù)x,y為指

7、定點(diǎn)的坐標(biāo),函數(shù)調(diào)用后,當(dāng)前位置改變到指定點(diǎn)(x,y)o該函數(shù)對應(yīng)的頭文件為graphics.h返回值:無例:見函數(shù)60.linerel()中的實例.60. linerel()相對畫線函數(shù)功能:函數(shù)linerel()使用當(dāng)前繪圖色、線型及線寬,從當(dāng)前位置開始,按指定的水平和垂直偏移距離畫一直線.用法:這個函數(shù)調(diào)用方式為voidlinerel(intdx,intdy);說明:參數(shù)dx,dy分別是水平偏移距離和垂直偏移距離.函數(shù)調(diào)用后,當(dāng)前位置變?yōu)樵黾悠凭嚯x后的位置,例如,原來的位置是(8,6),調(diào)用函數(shù)linerel(10,18)后,當(dāng)前位置為(18,24).返回值:無例:下面的程序為畫線函數(shù)

8、調(diào)用實例:#include<graphics.h>voidmain()intdriver,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()設(shè)置線型函數(shù)功能:setlinestyle()為畫線函數(shù)設(shè)置當(dāng)前線型,包括線型、線圖樣和線寬.用法:setlinestyle()函數(shù)調(diào)用方式為v

9、oidsetlinestyle(intstly,unsignedpattern,intwidth);說明:參數(shù)style為線型取值,也可以用相應(yīng)名稱表示,如表1-10中所示.參數(shù)pattern用于自定義線圖樣,它是16位(bit)字,只有當(dāng)style=USERBIT_LINE(值為1)時,pattern的值才有意義,使用用戶自定義線圖樣,與圖樣中“1位對應(yīng)的像素顯示,因此,pattern=0xFFFF,那么畫實線;pattern=0x9999,那么畫每隔兩個像素交替顯示的3線,如果要畫長虛線,那么pattern的值可為0xFF00和0xF00F,當(dāng)style不為USERBIT_LINEt時,雖

10、然pattern的值不起作用,但扔須為它提供一個值,一般取為0.參數(shù)wigth用來設(shè)定線寬,其取值見表1-11,表中給出了兩個值,即1和3,實際上,線寬取值為2也是可以接受的.假設(shè)用非法參數(shù)調(diào)用setlinestyle函數(shù),那么graphresult會返回錯誤代碼,并且當(dāng)前線型繼續(xù)有效.TurboC提供的線型與線寬定義在頭文件graphics.h中,表1-10和1-11分別列出了參數(shù)的取值與含義.表1-10線型名稱取值含義SOLID_LINE0實線DOTTED_LINE1點(diǎn)線CNTER_LINE2中央線DASHED_LINE乘線USERBIT_LINE4用戶自定義線型表1-11線寬名稱取值說明

11、NORM_WIDTH隨1一個像素寬缺省值THICK_WIDTH寬3三個像素寬這個函數(shù)的頭文件是graphics.h返回值:無例:下面的程序顯示了BC中所提供的線型圖樣:#include<graphics.h>voidmain()(intdriver,mode;driver=DETECT;mode=0;initgraph(&driver,&mode,"");for(i=0;i<4;i+)(setlinestyle(i,0,1);line(i*50,200,i*50+60,200)getch();restorecrtmode();)62. ge

12、tlinesettings()獲取線型設(shè)置函數(shù)功能:函數(shù)getlinesettings()用當(dāng)前設(shè)置的線型、線圖樣和線寬填寫linesettingstype型結(jié)構(gòu).用法:函數(shù)調(diào)用方式為voidgetlinesettings(structlinesettingstype*info);說明:此函數(shù)調(diào)用執(zhí)行后,當(dāng)前的線型、線圖樣和線寬值被裝入info指向的結(jié)構(gòu)里,從而可從該結(jié)構(gòu)中獲得線型設(shè)置.linesettingstype型結(jié)構(gòu)定義如下:structlinesettingstypeintlinestyle;unsignedupattern;intthickness;其中l(wèi)inestyle用于存放線

13、型,線型值為表1-10中的各值之一.upattern用為裝入用戶自定義線圖樣,這是16位字,每一位等于一個像素,如果哪個位被設(shè)置,那么該像素翻開,否那么關(guān)閉.thickness為線寬值存放的變量,可參見表1-11.getlinesettings()函數(shù)對應(yīng)的頭文件為graphics.h返回值:返回的線型設(shè)置存放在info指向的結(jié)構(gòu)中.例:把當(dāng)前線型的設(shè)置寫入info結(jié)構(gòu):structlinesettingstypeinfo;getlinesettings(&info);63. setwritemode()設(shè)置畫線模式函數(shù)功能:函數(shù)setwritemode()設(shè)置畫線模式用法:函數(shù)調(diào)用方

14、式為voidsetwritemode()(intmode);說明:參數(shù)mode只有兩個取值0和1,假設(shè)mode為0,那么新畫的線將復(fù)蓋屏幕上原有的圖形,此為缺省畫線輸出模式.如果mode為1,那么新畫的像素點(diǎn)與原有圖形的像素點(diǎn)先進(jìn)行異或(XOR貶算,然后輸出到屏幕上,使用這種畫線輸出模式,第二次畫同一圖形時,將擦除該圖形.調(diào)用setwritemode()設(shè)置的畫線輸出模式只影響函數(shù)line(),lineto(),linerel(),recangle()和drawpoly().setwritemode()函數(shù)對應(yīng)的頭文件是graphics.h返回值:無例:設(shè)置畫線輸出模式為0:setwritem

15、ode(0);(三)、多邊形函數(shù)對多邊形,無疑可用畫直線函數(shù)來畫出它,但直接提供畫多邊形的函數(shù)會給用戶很大方便.最常見的多邊形有矩形、矩形塊(或稱條形)、多邊形和多邊形塊,我們還把長方形條塊也放到這里一起考慮,雖然它不是多邊形,但它的特例就是矩形(塊).下面直接介紹畫多邊形的函數(shù).64. rectangle()畫矩形函數(shù)功能:函數(shù)rectangle()用當(dāng)前繪圖色、線型及線寬,畫一個給定左上角與右下角的矩形(正方形或長方形).用法:此函數(shù)調(diào)用方式為voidrectangle(intleft,inttop,intright,intbottom);說明:參數(shù)left,top是左上角點(diǎn)坐標(biāo),righ

16、t,bottom是右下角點(diǎn)坐標(biāo).如果有一個以上角點(diǎn)不在當(dāng)前圖形視口內(nèi),且裁剪標(biāo)志clip設(shè)置的是真(1),那么調(diào)用該函數(shù)后,只有在圖形視口內(nèi)的矩形局部才被畫出.這個函數(shù)對應(yīng)的頭文件為graphics.h返回值:無例:下面的程序畫一些矩形實例:#include<graphics.h>voidmain()intdriver,mode;driver=DETECT;mode=0;initgrpah(&driver,&mode,"");rectangle(80,80,220,200);rectangle(140,99,180,300);rectangle(

17、6,6,88,88);rectangle(168,72,260,360);getch();restorecrtmode();65. bar()畫條函數(shù)功能:函數(shù)bar()用當(dāng)前填充圖樣和填充色(注意不是給圖色)畫出一個指定上左上角與右下角的實心長條形(長方塊或正方塊),但沒有四條邊線).用法:bar()函數(shù)調(diào)用方式為voidbar(intleft,inttop,intright,intbottom);說明:參數(shù)left,topright,bottom分別為左上角坐標(biāo)與右下角坐標(biāo),它們和調(diào)用函數(shù)rectangle()的情形相同,調(diào)用此函數(shù)前,可用setfillstyle()或setfillpat

18、tern()設(shè)置當(dāng)前填充圖樣和填充色.注意此函數(shù)只畫沒有邊線的條形,如果要畫有邊線的的條形,可調(diào)用下面的函數(shù)bar3d()來畫,并將深度參數(shù)設(shè)為0,同時topflag參數(shù)要設(shè)置為真,否那么該條形無頂邊線.這應(yīng)的頭文件為graphics.h返回值:無例:見函數(shù)bar3d()中的實例.66. bar3d()畫條塊函數(shù)功能:函數(shù)bar3d()使用當(dāng)前繪圖色、線型及線寬畫出三維長方形條塊,并用當(dāng)前填充圖樣和填充色填充該三維條塊的外表.用法:此函數(shù)調(diào)用方式為voidbar3d(intleft,inttop,intright,intbottom,intdepth,inttopflag);說明:參數(shù)left

19、,top,right,bottom分另為左上角與右下角坐標(biāo),這與bar()函數(shù)中的一樣.參數(shù)depth為條塊的深度,以像素為單位,通常按寬度的四分之一計算.深度方向通過屏顯縱橫比調(diào)節(jié)為約45度(即這時x/y比設(shè)置為1:1).參數(shù)topflag相當(dāng)于一個布爾參數(shù),如果設(shè)置為1(真)那么條塊上放一頂面;假設(shè)設(shè)置為0(假),那么三維條形就沒有頂面,這樣可使多個三維條形疊加在一起.要使圖形更加美觀,可利用函數(shù)floodfill()或sefillpattern()來選擇填充圖樣和填充色(參見本小節(jié)(五)填充函數(shù)).bar3d()函數(shù)對應(yīng)的頭文件為graphics.h返回值:無例:下面的程序畫一個條形和條

20、塊:#include<graphics.h>voidmain()(intdriver,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()畫多邊形函數(shù)功能:函數(shù)drawpoly()用當(dāng)前繪圖色、線型及線

21、寬,畫一個給定假設(shè)干點(diǎn)所定義的多邊形.用法:此函數(shù)調(diào)用方式為voiddrawpoly(intpnumber,int*points);說明:參數(shù)pnumber為多邊形的頂點(diǎn)數(shù);參數(shù)points指向整型數(shù)組,該數(shù)組中是多邊形所有頂點(diǎn)(x,y)坐標(biāo)值,即一系列整數(shù)對,x坐標(biāo)值在前.顯然整型數(shù)組的維數(shù)至少為頂點(diǎn)數(shù)的2倍,在定義了多邊形所有頂點(diǎn)的數(shù)組polypoints時,頂點(diǎn)數(shù)目可通過計算sizeof(polypoints)除以2倍的sizeof(int)得到,這里除以2倍的原因是每個頂點(diǎn)有兩個整數(shù)坐標(biāo)值.另外有一點(diǎn)要注意,畫一個n個頂點(diǎn)的閉合圖形,頂點(diǎn)數(shù)必須等于n+1,并且最后一點(diǎn)(第n+1)點(diǎn)坐標(biāo)

22、必須等于第一點(diǎn)的坐標(biāo).drawpoly()函數(shù)對應(yīng)的頭文件為grpahics.h返回值:無例:下面的程序畫一個封閉星形圖與一個不封閉星形圖:#include<graphics.h>voidmain()(intdriver,mode;staticintpolypoints118=100,100,110,120,100,130,120,125,140,140,130,120,140,110,120,115,100,100);staticintpolypoints218=180,100,210,120,200,130,220,125,240,140,230,120,240,110,220

23、,115,220,110);driver=DETECT;mode=0;initgraph(&driver,&mode,"");drawpoly(9,polypoints1);drawpoly(9,polypoints2);getch();restorecrtmode();)(四)、圓、弧和曲線函數(shù)在一個屏幕上畫得很圓的圖形到另一個屏幕上可能被壓扁或拉長,這是由于每一種顯示卡與之相應(yīng)的顯示模式都有一個縱橫比.縱橫比是指像素的水平方向大小與垂直方向大小的比值.如VGA®示卡由于偈素根本上是正方形,所以縱橫比為1.0000為了保證幾何圖形根本按預(yù)計情況顯

24、示在屏幕上,用屏顯的縱橫比來計算和糾正不同硬件及顯示卡產(chǎn)生的畸變.計算縱橫比所需要的水平方向和垂直方向的比例系數(shù)可調(diào)用函數(shù)getaspectratio()獲得.68. getaspectratio()獲取縱橫比函數(shù)功能:函數(shù)getaspectratio()返回x方向和y方向的比例系數(shù),用這兩個整型值可計算某一特定屏顯的縱橫比.用法:止匕函數(shù)調(diào)用方式為voidgetaspectratio(intxasp,intyasp);說明:參數(shù)xasp指向的變量存放返回的x方向比例系數(shù);參數(shù)yasp指向的變量存放返回的y方向比例系數(shù).通常y方向比例系數(shù)為10000,x方向比例系數(shù)不大于10000(這是由于大

25、多數(shù)屏幕像素高比寬長).注意縱橫比自動用作下面函數(shù)arc(),circle()和pieslice()中的標(biāo)尺因子,使屏幕上圓或弧正常顯示.但用ellipse()函數(shù)畫橢圓必須調(diào)用本函數(shù)獲取縱橫比作為標(biāo)尺因子,否那么不予調(diào)整.縱橫比可用于其它幾何圖形,目的是校正和顯示圖形.getaspectratio()函數(shù)對應(yīng)的頭文件為graphics.h返回值:返回x與y方向比例系數(shù)分別存放在xasp和yasp所指向的變量中.例:下面的程序顯示縱橫比:intxasp,yasp;floataspectratio;getaspectratio(&xasp,&yasp);aspectratio=x

26、asp/yasp;printf("aspectratio:%f",aspectratio);69. circle()畫圓函數(shù)功能:函數(shù)circle()使用當(dāng)前繪圖色并以實線畫一個完整的圓.用法:該函數(shù)調(diào)用方式為voidcircle(intx,inty,intradius);說明:參數(shù)x,y為圓心坐標(biāo),radius為圓半徑,用像素個素表示.注意,調(diào)用circle()函數(shù)畫圓時不用當(dāng)前線型.不同于ellipse()函數(shù),只用單個半徑radius參數(shù)調(diào)用circle()函數(shù),故屏顯縱橫比可以自動調(diào)節(jié),以產(chǎn)生正確的顯示圖.此函數(shù)對應(yīng)的頭文件為graphics.h返回值:無例:畫六個同心圓,圓心在(100,100).#include<graphics.h&g

溫馨提示

  • 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

提交評論