C語言圖形函數(shù)簡介_第1頁
C語言圖形函數(shù)簡介_第2頁
C語言圖形函數(shù)簡介_第3頁
C語言圖形函數(shù)簡介_第4頁
C語言圖形函數(shù)簡介_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C語言圖形函數(shù)簡介TurboC提供了非常豐富的圖形函數(shù),所有圖形函數(shù)的原型均在graphics.h中,在此主要介紹圖形模式下一些常用圖形函數(shù)及圖形模式下文本輸出等函數(shù)。一.屏幕顏色的設(shè)置和清屏函數(shù)對于圖形模式的屏幕顏色設(shè)置,同樣分為背景色的設(shè)置和前景色的設(shè)置。在TurboC中分別用下面兩個函數(shù)。. 設(shè)置背景色: voidfarsetbkcolor(intcolor);. 設(shè)置作圖色: voidfarsetcolor(intcolor);其中color為圖形方式下顏色的規(guī)定數(shù)值,對EGA,VGA顯示器適配器,有關(guān)顏色的符號常數(shù)及數(shù)值見下表所示。表1有關(guān)屏幕顏色的符號常數(shù)表符號常數(shù)數(shù)值含義符號常數(shù)數(shù)值含義BLACK0黑色DARKGRAY8深灰BLUE1蘭色LIGHTBLUE9深蘭GREEN2綠色LIGHTGREEN10淡綠CYAN3青色LIGHTCYAN11淡青RED4紅色LIGHTRED12淡紅MAGENTA5洋紅LIGHTMAGENTA13淡洋紅BROWN6棕色YELLOW14黃色LIGHTGRAY7淡灰WHITE15白色.清除圖形屏幕其調(diào)用格式如下:voidefarcleardevice(void);有關(guān)顏色設(shè)置、清屏函數(shù)的使用請看例1。例1:#include<stdio.h>#include<graphics.h>intmain()(intgdriver,gmode,i;gdriver=DETECT;registerbgidriver(EGAVGA_DRIVER);/*建立獨立圖形運行程序*/initgraph(&gdriver,&gmode","");/*圖形初始化*/setbkcolor(0); /*設(shè)置圖形背景*/cleardevice();for(i=0;i<=15;i++)(setcolor(i); /*設(shè)置不同作圖色*/circle(320,240,20+i*10); /*畫半徑不同的圓*/delay(100); /*延遲100毫秒*/)for(i=0;i<=15;i++)(setbkcolor(i); /*設(shè)置不同背景色*/cleardevice();circle(320,240,20+i*10);delay(100);)closegraph();return0;)另外,TURBOC也提供了幾個獲得現(xiàn)行顏色設(shè)置情況的函數(shù)。intfar getbkcolor(void); 返回現(xiàn)行背景顏色值。intfar getcolor(void); 返回現(xiàn)行作圖顏色值。intfar getmaxcolor(void); 返回最高可用的顏色值。.退出圖形狀態(tài)的函數(shù)closegraph()其調(diào)用格式為:voidfarclosegraph(void);TurboC提供了退出圖形狀態(tài)的函數(shù)closegraph(),調(diào)用該函數(shù)后可退出圖形狀態(tài)而進(jìn)入文本方式(TurboC默認(rèn)方式),并釋放用于保存圖形驅(qū)動程序和字體的系統(tǒng)內(nèi)存。二.基本圖形函數(shù)基本圖形函數(shù)包括畫點,線以及其它一些基本圖形的函數(shù)。本節(jié)對這些函數(shù)作一全面的介紹。.畫點函數(shù)voidfarputpixel(intx,inty,intcolor);該函數(shù)表示有指定的像素畫一個按color所確定顏色的點。對于顏色color的值可從表3中獲得而對x,y是指圖形像素點的坐標(biāo)。在圖形模式下,是按像素來定義坐標(biāo)的。對VGA適配器,它的最高分辨率為640x480,其中640為整個屏幕從左到右所有像素的個數(shù),480為整個屏幕從上到下所有像素的個數(shù)。屏幕的左上角坐標(biāo)為(0,0),右下角坐標(biāo)為(639,479),水平方向從左到右為x軸正向,垂直方向從上到下為y軸正向。TURBOC的圖形函數(shù)都是相對于圖形屏幕坐標(biāo),即像素點來說的。關(guān)于點的另外一個函數(shù)是:intfargetpixel(intx,inty);它獲得當(dāng)前點(x,y)的顏色值。.有關(guān)坐標(biāo)位置的函數(shù)intfargetmaxx(void); 返回x軸的最大值。intfargetmaxy(void); 返回y軸的最大值。intfargetx(void); 返回游標(biāo)在x軸的位置。voidfargety(void); 返回游標(biāo)有y軸的位置。voidfarmoveto(intx,inty); 移動游標(biāo)到(x,y)點,不是畫點,在移動過程中亦畫點。voidfarmoverel(intdx,intdy);移動游標(biāo)從現(xiàn)行位置(x,y)移動到(x+dx,y+dy)的位置,移動過程中不畫點。.畫線函數(shù)TURBOC提供了一系列畫線函數(shù),下面分別敘述:voidfarline(intx0,inty0,intx1,inty1); 畫一條從點(x0,y0)到(x1,y1)的直線。voidfarlineto(intx,inty);畫一作從現(xiàn)行游標(biāo)到點(x,y)的直線。voidfarlinerel(intdx,intdy);畫一條從現(xiàn)行游標(biāo)(x,y)到按相對增量確定的點(x+dx,y+dy)的直線。voidfarcircle(intx,inty,intradius);以(x,y)為圓心,radius為半徑,畫一個圓。voidfararc(intx,inty,intstangle,intendangle,intradius);以(x,y)為圓心,radius為半徑,從stangle開始到endangle結(jié)束(用度表示)畫一段圓弧線。在TURBOC中規(guī)定x軸正向為0度,逆時針方向旋轉(zhuǎn)一周,依次為90,180,270和360度(其它有關(guān)函數(shù)也按此規(guī)定,不再重述)。voidellipse(intx,inty,intstangle,intendangle,intxradius,intyradius);以(乂,y)為中心,xradius,yradius為x軸和y軸半徑,從角stangle開始到endangle結(jié)束畫一段橢圓線,當(dāng)stangle=0,endangle=360時,畫出一個完整的橢圓。voidfarrectangle(intx1,inty1,intx2,inty2);以(x1,y1)為左上角,(x2,y2)為右下角畫一個矩形框。三、封閉圖形的填充填充就是用規(guī)定的顏色和圖模填滿一個封閉圖形。1、先畫輪廓再填充TURBOC提供了一些先畫出基本圖形輪廓,再按規(guī)定圖模和顏色填充整個封閉圖形的函數(shù)。在沒有改變填充方式時,TURBOC以默認(rèn)方式填充。下面介紹這些函數(shù)。voidfarbar(intx1,inty1,intx2,inty2);確定一個以(x1,y1)為左上角,(x2,y2)為右下角的矩形窗口,再按規(guī)定圖模和顏色填充。說明:此函數(shù)不畫出邊框,所以填充色為邊框。voidfarbar3d(intx1,inty1,intx2,inty2,intdepth,inttopflag);當(dāng)topflag為非0時,畫出一個三維的長方體。當(dāng)topflag為0時,三維圖形不封頂,實際上很少這樣使用。說明:bar3d()函數(shù)中,長方體第三維的方向不隨任何參數(shù)而變,即始終為45度的方向。voidfarpieslice(intx,inty,intstangle,intendangle,intradius);畫一個以(x,y)為圓心,radius為半徑,stangle為起始角度,endangle為終止角度的扇形,再按規(guī)定方式填充。當(dāng)stangle=0,endangle=360時變成一個實心圓,并在圓內(nèi)從圓點沿X軸正向畫一條半徑。voidfarsector(intx,inty,intstanle,intendangle,intxradius,intyradius);畫一個以(x,y)為圓心分別以xradius,yradius為x軸和y軸半徑,stangle為起始角,endangle為終止角的橢圓扇形,再按規(guī)定方式填充。2、設(shè)定填充方式TURBOC有四個與填充方式有關(guān)的函數(shù)。下面分別介紹:voidfarsetfillstyle(intpattern,intcolor);color的值是當(dāng)前屏幕圖形模式時顏色的有效值。pattern的值及與其等價的符號常數(shù)如表7所示。表2.關(guān)于填充式樣pattern的規(guī)定符號常數(shù)數(shù)值含義EMPTY_FILL0以背景顏色填充SOLID_FILL1以實填充LINE_FILL2以直線填充LTSLASH_FILL3以斜線填充(陰影線)SLASH_FILL4以粗斜線填充(粗陰影線)BKSLASH_FILL5以粗反斜線填充(粗陰影線)LTBKSLASH_FILL6以反斜線填充(陰影線)HATCH_FILL7以直方網(wǎng)格填充XHATCH_FILL8以斜網(wǎng)格填充INTTERLEAVE_FILL9以間隔點填充WIDE_DOT_FILL10以稀疏點填充CLOSE_DOS_FILL11以密集點填充USER_FILL12以用戶定義式樣填充除USER_FILL用戶定義填充式樣)以外,其它填充式樣均可由setfillstyle()函數(shù)設(shè)置。有關(guān)圖形填充圖模的顏色的選擇,請看下面例程。例2:#include<graphics.h>main(){charstr[8]={10,20,30,40,50,60,70,80};/*用戶定義圖模*/intgdriver,gmode,i;structfillsettingstypesave;/*定義一個用來存儲填充信息的結(jié)構(gòu)變量*/gdriver=DETECT;initgraph(&gdriver,&gmode,"c:\\tc");setbkcolor(BLUE);cleardevice();for(i=0;i<13;i++){setcolor(i+3);setfillstyle(i,2+i);/*設(shè)置填充類型*bar(100,150,200,50); /*畫矩形并填充*/bar3d(300,100,500,200,70,1);/*畫長方體并填充*/pieslice(200,300,90,180,90);/*畫扇形并填充*/sector(500,300,180,270,200,100);/*畫橢圓扇形并填充*/delay(1000); /*延時1秒*/}cleardevice();setcolor(14);setfillpattern(str,RED);bar(100,150,200,50);bar3d(300,100,500,200,70,0);pieslice(200,300,0,360,90);sector(500,300,0,360,100,50);getch();getfillsettings(&save); /*獲得用戶定義的填充模式信息*/closegraph();clrscr();printf("Thepatternis%d,Thecoloroffillingis%d",save.pattern,save.color);/*輸出目前填充圖模和顏色值*/getch();)以上程序運行結(jié)束后,在屏幕上顯示出現(xiàn)行填充圖模和顏色的常數(shù)值。3、任意封閉圖形的填充TURBOC提供了一個可對任意封閉圖形填充的函數(shù)其調(diào)用格式如下:voidfarfloodfill(intx,inty,intborder);其中:x,y為封閉圖形內(nèi)的任意一點。border為邊界的顏色,也就是封閉圖形輪廓的顏色。調(diào)用了該函數(shù)后,將用規(guī)定的顏色和圖模填滿整個封閉圖形。注意:.如果X或y取在邊界上,則不進(jìn)行填充。.如果不是封閉圖形則填充會從沒有封閉的地方溢出去,填滿其它地方。.如果x或y在圖形外面,則填充封閉圖形外的屏幕區(qū)域。.由border指定的顏色值必須與圖形輪廓的顏色值相同,但填充色可選任意顏色。下例是有關(guān)floodfill()函數(shù)的用法,該程序填充了bar3d()所畫長方體中其它兩個未填充的面。例3:#include<stdlib.h>#include<graphics.h>main()(intgdriver,gmode;strctfillsettingstypesave;gdriver=DETECT;initgraph(&gdriver,&gmode,"");setbkcolor(BLUE);cleardevice();setcolor(LIGHTRED);setlinestyle(0,0,3);setfillstyle(1,14); /*設(shè)置填充方式*/bar3d(100,200,400,350,200,1);/*畫長方體并填充*/floodfill(450,300,LIGHTRED);/*填充長方體另外兩個面*/floodfill(250,150,LIGHTRED);rectangle(450,400,500,450); /*畫一矩形*/floodfill(470,420,LIGHTRED);/*填充矩形*/getch();closegraph();)四、屏幕操作除了清屏函數(shù)以外,關(guān)于屏幕操作還有以下函數(shù),這些函數(shù)在圖像動畫處理中非常有用。voidfargetimage(intxl,intyl,intx2,inty2,voidfar*mapbuf);voidfarputimge(intx,int,y,void*mapbuf,intop);unsinedfarimagesize(intxl,intyl,intx2,inty2);這三個函數(shù)用于將屏幕上的圖像復(fù)制到內(nèi)存,然后再將內(nèi)存中圖像送回到屏幕上。首先通過函數(shù)imagesize()測試要保存左上角為(xl,yl),右上角為(x2,y2)的圖形屏幕區(qū)域內(nèi)的全部內(nèi)容需多少個字節(jié),然后再給mapbuf分配一個所測數(shù)字節(jié)內(nèi)存空間的指針。通過調(diào)用getimage()函數(shù)就可將該區(qū)域內(nèi)的圖像保存在內(nèi)存中,需要時可用putimage()函數(shù)將該圖像輸出到左上角為點(x,y)位置上,其中g(shù)etimage()函數(shù)中參數(shù)op規(guī)定如何釋放內(nèi)存中圖像。關(guān)于這個參數(shù)的定義參見表8。表3.putimage()函數(shù)中的op值符號常數(shù)數(shù)值含義COPY_PUT0復(fù)制XOR_PUT1與屏幕圖像異或的復(fù)制OR_PUT2與屏幕圖像或后復(fù)制AND_PUT3與屏幕圖像與后復(fù)制NOT_PUT4復(fù)制反像的圖形對于imagesize()函數(shù),只能返回字節(jié)數(shù)小于64K字節(jié)的圖像區(qū)域,否則將會出錯,出錯時返回-1。例4:下面程序模擬兩個小球動態(tài)碰撞過程。#include<stdio.h>#include<graphics.h>intmain()(inti,gdriver,gmode,size;void*buf;gdriver=DETECT;initgraph(&gdriver,&gmode,"");setbkcolor(BLUE);cleardevice();setcolor(LIGHTRED);setlinestyle(0,0,1);setfillstyle(1,10);circle(100,200,30);floodfill(100,200,12);size=imagesize(69,169,131,231);buf=malloc(size);getimage(69,169,131,231,buf);putimage(500,269,buf,COPY_PUT);for(i=0;i<185;i++){putimage(70+i,170,buf,COPY_PUT);putimage(500-i,170,buf,COPY_PUT);)for(i=0;i<185;i++){putimage(255-i,170,buf,COPY_PUT);putimage(315+i,170,buf,COPY_PUT);)getch();closegraph();)五.圖形模式下的文本輸出在圖形模式下,只能用標(biāo)準(zhǔn)輸出函數(shù),如printf(),puts(),putchar()函數(shù)輸出文本到屏幕。除此之外,其它輸出函數(shù)(如窗口輸出函數(shù))不能使用,即是可以輸出的標(biāo)準(zhǔn)函數(shù),也只以前景色為白色,按80歹U,25行的文本方式輸出。TurboC2.0也提供了一些專門用于在圖形顯示模式下的文本輸出函數(shù)。1、文本輸出函數(shù)voidfarouttext(charfar*textstring);該函數(shù)輸出字符串指針textstring所指的文本在現(xiàn)行位置。voidfarouttextxy(intx,inty,charfar*textstring);該函數(shù)輸出字符串指針textstring所指的文本在規(guī)定的(x,y)位置。其中x和y為像素坐標(biāo)。說明:這兩個函數(shù)都是輸出字符串,但經(jīng)常會遇到輸出數(shù)值或其它類型的數(shù)據(jù),此時就必須使用格式化輸出函數(shù)sprintf()。sprintf()函數(shù)的調(diào)用格式為:intsprintf(char*str,char*format,variable-list);它與printf()函數(shù)不同之處是將按格式化規(guī)定的內(nèi)容寫入str指向的字符串中,返回值等于寫入的字符個數(shù)。例如:sprintf(s,"yourTOEFLscoreis%d",mark);這里s應(yīng)是字符串指針或數(shù)組,mark為整型變量。2、有關(guān)文本字體、字型和輸出方式的設(shè)置有關(guān)圖形方式下的文本輸出函數(shù),可以通過setcolor()函數(shù)設(shè)置輸出文本的顏色。另外,也可以改變文本字體大小以及選擇是水平方向輸出還是垂直方向輸出。voidfarsettexjustify(inthoriz,intvert);該函數(shù)用于定位輸出字符串。對使用outtextxy(intx,inty,charfar*strtextstring)函數(shù)所輸出的字符串,其中哪個點對應(yīng)于定位坐標(biāo)(x,y)在TurboC2.0中是有規(guī)定的。如果把一個字符串看成一個長方形的圖形,在水平方向顯示時,字符串長方形按垂直方向可分為頂部,中部和底部三個位置,水平方向可分為左,中,右三個位置,兩者結(jié)合就有9個位置。settextjustify()函數(shù)的第一個參數(shù)horiz指出水平方向三個位置中的一個,第二個參數(shù)

vert指出垂直方向三個位置中的一個,二者就確定了其中一個位置。當(dāng)規(guī)定了這個位置后,用outtextxy()函數(shù)輸出字符串時,字符串長方形的這個規(guī)定位置就對準(zhǔn)函數(shù)中的(x,y)位置。而對用outtext()函數(shù)輸出字符串時,這個規(guī)定的位置就位于現(xiàn)行游標(biāo)的位置。有關(guān)參數(shù)horiz和vert的取值參見表9。表4.參數(shù)horiz和vert的取值符號常數(shù)數(shù)值用于LEFT_TEXT0水平RIGHT_TEXT2水平BOTTOM_TEXT0垂直TOP_TEXT2垂直CENTER_TEXT1水平或垂直voidfarsettextstyle(intfont,intdirection,intcharsize);該函數(shù)用來設(shè)置輸出字符的字形(由font確定)、輸出方向(由direction確定)和字符大小(由charsize確定)等特性。TurboC2.0對函數(shù)中各個參數(shù)的規(guī)定見下列各表所示:表5.font的取值符號常數(shù)數(shù)值含義DEFAULT_FONT08*8點陣字(缺省值)TRIPLEX_FONT1三倍筆劃字體SMALL_FONT2小號筆劃字體SANSSERIF_FONT3無襯線筆劃字體GO

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論