C語言程序設計第13章 Turbo C圖形處理基礎_第1頁
C語言程序設計第13章 Turbo C圖形處理基礎_第2頁
C語言程序設計第13章 Turbo C圖形處理基礎_第3頁
C語言程序設計第13章 Turbo C圖形處理基礎_第4頁
C語言程序設計第13章 Turbo C圖形處理基礎_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第13章TurboC圖形處理基礎13.1Turboc的字符屏幕管理13.2Turboc的圖形功能13.1Turboc的字符屏幕管理

TurboC2.0的字符屏幕函數(shù)主要包括文本窗口大小的設定、窗口顏色的設置、窗口文本的清除和輸入輸出等函數(shù)。TurboC2.0默認定義的文本窗口為整個屏幕,共有80列(或40列)25行的文本單元,每個單元包括一個字符和一個屬性,字符即ASCII碼字符,屬性規(guī)定該字符的顏色和強度。1.文本窗口的定義

TurboC2.0可以定義屏幕上的一個矩形域作為窗口,使用window()函數(shù)定義。窗口定義之后,用有關窗口的輸入輸出函數(shù)就可以只在此窗口內進行操作而不超出窗口的邊界。

window()函數(shù)的調用格式為:

voidwindow(intleft,inttop,intright,intbottom);下一頁返回13.1Turboc的字符屏幕管理2.文本窗口顏色的設置文本窗口顏色的設置包括背景顏色的設置和字符顏色的設置,使用的函數(shù)及其調用格式為:設置背景顏色:voidtextbackground(intcolor);設置字符顏色:voidtextcolor(intcolor);

TurboC另外還提供了一個函數(shù),可以同時設置文本的字符和背景顏色,這個函數(shù)的調用格式為:

voidtextattr(int

attr);上一頁下一頁返回13.1Turboc的字符屏幕管理下面這個程序使用了關于窗口大小的定義、顏色的設置等函數(shù),在一個屏幕上不同位置定義了7個窗口,其背景色分別使用了7種不同的顏色。例13.1#include“conio.h”#include“stdio.h”main(){inti;textbackground(0);/*設置屏幕背景色*/clrscr();/*清除文本屏幕*/上一頁下一頁返回13.1Turboc的字符屏幕管理for(i=1;i<8;i++){window(10+i*5,5+i,30+i*5,15+i);/*定義文本窗口*/textbackground(i);/*定義窗口背景色*/clrscr();/*清除窗口*/}getch();}上一頁下一頁返回13.1Turboc的字符屏幕管理3.窗口內文本的輸入輸出函數(shù)1)窗口內文本的輸出函數(shù)int

cprintf("<格式化字符串>",<變量表>);int

cputs(char*string);int

putch(int

ch);上一頁下一頁返回13.1Turboc的字符屏幕管理下面這個程序給上例中加入了一些文本的輸出函數(shù)。例13.2#include“conio.h”#include“stdio.h”intmain(){inti;char*c[]={"BLACK","BLUE","GREEN","CYAN","RED","MAGENTA","BROWN","LIGHTGRAY"};textbackground(0);/*設置屏幕背景色*/clrscr();/*清除文本屏幕*/上一頁下一頁返回13.1Turboc的字符屏幕管理for(i=1;i<8;i++){window(10+i*5,5+i,30+i*5,15+i);/*定義文本窗口*/textbackground(i);/*定義窗口背景色*/clrscr();/*清除窗口*/}getch();return0;}上一頁下一頁返回13.1Turboc的字符屏幕管理4.有關屏幕操作的函數(shù)

voidclrscr(void);清除當前窗口中的文本內容,并把光標定位在窗口的左上角(1,1)處。

voidclreol(void);清除當前窗口中從光標位置到行尾的所有字符,光標位置不變。

voidgotoxy(x,y);該函數(shù)很有用,它用來定位光標在當前窗口中的位置。這里x,y是指光標要定位處的坐標(相對于窗口而言),當x,y超出了窗口的大小時,該函數(shù)就不起作用了。

int

gettext(intxl,int

yl,intx2,inty2,void*buffer);

int

puttext(intx1,inty1,intx2,inty2,void*buffer);上一頁下一頁返回13.1Turboc的字符屏幕管理

gettext()函數(shù)是將屏幕上指定的矩形區(qū)域內文本內容存入buffer指針指向的一個內存空間。內存的大小用下式計算:所用字節(jié)大小=行數(shù)*列數(shù)*2其中:行數(shù)=y2-y1+1列數(shù)=x2-x1+1.

puttext()函數(shù)則是將gettext()函數(shù)存入內存buffer中的文字內容拷貝到屏幕上指定的位置。

int

movetext(intx1,intx2,inty2,intx3,inty3);

movetext()函數(shù)將屏幕上左上角為(x1,y1),右下角為(x2,y2)的一矩形窗口內的文本內容拷貝到左上角為(x3,y3)的新的位置。該函數(shù)的坐標也是相對于整個屏幕而言的。上一頁下一頁返回13.1Turboc的字符屏幕管理注意:(1)gettext()函數(shù)和puttext()函數(shù)中的坐標是對整個屏幕而言的,即是屏幕的絕對坐標,而不是相對窗口的坐標。(2)movetext()函數(shù)是拷貝而不是移動窗口區(qū)域內容,即使用該函數(shù)后,原位置區(qū)域的文本內容仍然存在。下面再介紹一些函數(shù):voidhighvideo(void);設置顯示器高亮度顯示字符.voidlowvideo(void);設置顯示器低亮度顯示字符voidnormvideo(void);使顯示器返回到程序運行前的顯示方式int

wherex(void);int

wherey(void);這兩個函數(shù)返回當前窗口下光標的x,y坐標上一頁返回13.2Turboc的圖形功能13.2.1圖形模式的初始化不同的顯示器適配器有不同的圖形分辨率。即是同一顯示器適配器,在不同模式下也有不同分辨率。因此,在屏幕作圖之前,必須根據(jù)顯示器適配器種類將顯示器設置成為某種圖形模式,在未設置圖形模式之前,微機系統(tǒng)默認屏幕為文本模式(80列,25行字符模式),此時所有圖形函數(shù)均不能工作。設置屏幕為圖形模式,可用下列圖形初始化函數(shù):

voidfarinitgraph(intfar*gdriver,intfar*gmode,char*path);其中gdriver和gmode分別表示圖形驅動器和模式,path是指圖形驅動程序所在的目錄路徑。下一頁返回13.2Turboc的圖形功能例13.4使用圖形初始化函數(shù)設置VGA高分辨率圖形模式#include“graphics.h”intmain(){int

gdriver,gmode;gdriver=VGA;gmode=VGAHI;initgraph(&gdriver,&gmode,"c:\\caic\\bgi");bar3d(100,100,300,250,50,1);/*畫一長方體*/getch();closegraph();return0;}上一頁下一頁返回13.2Turboc的圖形功能有時編程者并不知道所用的圖形顯示器適配器種類,或者需要將編寫的程序用于不同圖形驅動器,TurboC提供了一個自動檢測顯示器硬件的函數(shù),其調用格式為:

voidfardetectgraph(int*gdriver,*gmode);例13.5自動進行硬件測試后進行圖形初始化#include“graphics.h”intmain(){int

gdriver,gmode;detectgraph(&gdriver,&gmode);/*自動測試硬件*/上一頁下一頁返回13.2Turboc的圖形功能printf("thegraphicsdriveris%d,modeis%d\n",gdriver,gmode);/*輸出測試結果*/getch();initgraph(&gdriver,&gmode,"c:\\caic\\bgi");/*根據(jù)測試結果初始化圖形*/bar3d(10,10,130,250,20,1);getch();closegraph();return0;}上一頁下一頁返回13.2Turboc的圖形功能13.2.2獨立圖形運行程序的建立

TurboC對于用initgraph()函數(shù)直接進行的圖形初始化程序,在編譯和鏈接時并沒有將相應的驅動程序(*.BGI)裝入到執(zhí)行程序,當程序進行到intitgraph()語句時,再從該函數(shù)中第三個形式參數(shù)char*path中所規(guī)定的路徑中去找相應的驅動程序。若沒有驅動程序,則在C:\TC中去找,如C:\TC中仍沒有或TC不存在,將會出現(xiàn)錯誤:BGIError:Graphicsnotinitialized(use'initgraph')因此,為了使用方便,應該建立一個不需要驅動程序就能獨立運行的可執(zhí)行圖形程序,TurboC中規(guī)定用下述步驟(這里以EGA、VGA顯示器為例):上一頁下一頁返回13.2Turboc的圖形功能1.在C:\TC子目錄下輸入命令:BGIOBJEGAVGA

此命令將驅動程序EGAVGA.BGI轉換成EGAVGA.OBJ的目標文件。2.在C:\TC子目錄下輸入命令:TLIBLIB\GRAPHICS.LIB+EGAVGA

此命令的意思是將EGAVGA.OBJ的目標模塊裝到GRAPHICS.LIB庫文件中。3.在程序中initgraph()函數(shù)調用之前加上一句:

registerbgidriver(EGAVGA_driver):該函數(shù)告訴連接程序在連接時把EGAVGA的驅動程序裝入到用戶的執(zhí)行程序中。上一頁下一頁返回13.2Turboc的圖形功能13.2.3屏幕顏色的設置和清屏函數(shù)1.屏幕顏色的設置對于圖形模式的屏幕顏色設置,同樣分為背景色的設置和前景色的設置。在TurboC中分別用下面兩個函數(shù)。設置背景色:voidfarsetbkcolor(intcolor);設置作圖色:voidfarsetcolor(intcolor);上一頁下一頁返回13.2Turboc的圖形功能2.清除圖形屏幕內容清屏函數(shù)調用格式如下:voidefarcleardevice(void);另外,TURBOC也提供了幾個獲得現(xiàn)行顏色設置情況的函數(shù)。intfargetbkcolor(void);返回現(xiàn)行背景顏色值。intfargetcolor(void);返回現(xiàn)行作圖顏色值。intfargetmaxcolor(void);返回最高可用的顏色值。上一頁下一頁返回13.2Turboc的圖形功能12.2.4基本圖形函數(shù)1.畫點1)畫點函數(shù)voidfarputpixel(intx,inty,intcolor);該函數(shù)表示有指定的象元畫一個按color所確定顏色的點。對于顏色color的值可從表3中獲得而對x,y是指圖形象元的坐標。在圖形模式下,是按象元來定義坐標的。對VGA適配器,它的最高分辨率為640x480,其中640為整個屏幕從左到右所有象元的個數(shù),480為整個屏幕從上到下所有象元的個數(shù)。上一頁下一頁返回13.2Turboc的圖形功能關于點的另外一個函數(shù)是:intfargetpixel(intx,inty);它獲得當前點(x,y)的顏色值。2)有關坐標位置的函數(shù)intfargetmaxx(void);返回x軸的最大值。intfargetmaxy(void);返回y軸的最大值。上一頁下一頁返回13.2Turboc的圖形功能intfargetx(void);返回游標在x軸的位置。voidfargety(void);返回游標有y軸的位置。voidfarmoveto(intx,inty);移動游標到(x,y)點,不是畫點,在移動過程中亦畫點。voidfarmoverel(int

dx,int

dy);移動游標從現(xiàn)行位置(x,y)移動到(x+dx,y+dy)的位置,移動過程中不畫點。上一頁下一頁返回13.2Turboc的圖形功能2、畫線1)畫線函數(shù)TURBOC提供了一系列畫線函數(shù),下面分別敘述:voidfarline(intx0,inty0,intx1,inty1);畫一條從點(x0,y0)到(x1,y1)的直線。voidfarlineto(intx,inty);畫一作從現(xiàn)行游標到點(x,y)的直線。voidfarlinerel(int

dx,int

dy);畫一條從現(xiàn)行游標(x,y)到按相對增量確定的點(x+dx,y+dy)的直線。voidfarcircle(intx,inty,intradius);以(x,y)為圓心,radius為半徑,畫一個圓。上一頁下一頁返回13.2Turboc的圖形功能voidfararc(intx,inty,int

stangle,int

endangle,intradius);以(x,y)為圓心,radius為半徑,從stangle開始到endangle結束(用度表示)畫一段圓弧線。在TURBOC中規(guī)定x軸正向為0度,逆時針方向旋轉一周,依次為90,180,270和360度(其它有關函數(shù)也按此規(guī)定,不再重述)。voidellipse(intx,inty,int

stangle,int

endangle,int

xradius,int

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

開始到endangle結束畫一段橢圓線,當stangle=0,endangle=360時,畫出一個完整的橢圓。上一頁下一頁返回13.2Turboc的圖形功能

voidfarrectangle(intx1,inty1,intx2,inty2);以(x1,y1)為左上角,(x2,y2)為右下角畫一個矩形框。

voidfardrawpoly(int

numpoints,intfar*polypoints);畫一個頂點數(shù)為numpoints,各頂點坐標由polypoints給出的多邊形。polypoints整型數(shù)組必須至少有2倍頂點數(shù)個無素。每一個頂點的坐標都定義為x,y,并且x在前。上一頁下一頁返回13.2Turboc的圖形功能2)設定線型函數(shù)在沒有對線的特性進行設定之前,TURBOC用其默認值,即一點寬的實線,但TURBOC也提供了可以改變線型的函數(shù)。線型包括:寬度和形狀。其中寬度只有兩種選擇:一點寬和三點寬。而線的形狀則有五種。下面介紹有關線型的設置函數(shù)。voidfarsetlinestyle(int

linestyle,unsignedupattern,intthickness);上一頁下一頁返回13.2Turboc的圖形功能3、封閉圖形的填充填充就是用規(guī)定的顏色和圖模填滿一個封閉圖形。1)先畫輪廓再填充

TURBOC提供了一些先畫出基本圖形輪廓,再按規(guī)定圖模和顏色填充整個封閉圖形的函數(shù)。在沒有改變填充方式時,TURBOC以默認方式填充。下面介紹這些函數(shù)。

Voidfarbar(intx1,inty1,intx2,inty2);確定一個以(x1,y1)為左上角,(x2,y2)為右下角的矩形窗口,再按規(guī)定圖模和顏色填充。上一頁下一頁返回13.2Turboc的圖形功能

voidfarbar3d(intx1,inty1,intx2,inty2,intdepth,int

topflag);當topflag為非0時,畫出一個三維的長方體。當topflag為0時,三維圖形不封頂,實際上很少這樣使用。上一頁下一頁返回13.2Turboc的圖形功能voidfarpieslice(intx,inty,int

stangle,int

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

為終止角度的扇形,再按規(guī)定方式填充。當stangle=0,endangle=360時變成一個實心圓,并在圓內從圓點沿X軸正向畫一條半徑。

voidfarsector(intx,inty,int

stanle,intendangle,int

xradius,int

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

為起始角,endangle為終止角的橢圓扇形,再按規(guī)定方式填充。上一頁下一頁返回13.2Turboc的圖形功能2)設定填充方式TURBOC有四個與填充方式有關的函數(shù)。下面分別介紹:voidfarsetfillstyle(intpattern,intcolor);color的值是當前屏幕圖形模式時顏色的有效值。

voidfarsetfillpattern(char*upattern,intcolor);設置用戶定義的填充圖模的顏色以供對封閉圖形填充。voidfargetfillpattern(char*upattern);該函數(shù)將用戶定義的填充圖模存入upattern指針指向的內存區(qū)域。voidfargetfillsetings(struct

fillsettingstypefar*fillinfo);得現(xiàn)行圖模的顏色并將存入結構指針變量fillinfo中。上一頁下一頁返回13.2Turboc的圖形功能3)任意封閉圖形的填充截止目前為止,我們只能對一些特定形狀的封閉圖形進行填充,但還不能對任意封閉圖形進行填充。為此,TURBOC提供了一個可對任意封閉圖形填充的函數(shù),其調用格式如下:

voidfarfloodfill(intx,inty,intborder);其中:x,y為封閉圖形內的任意一點。border為邊界的顏色,也就是封閉圖形輪廓的顏色。調用了該函數(shù)后,將用規(guī)定的顏色和圖模填滿整個封閉圖形。上一頁下一頁返回13.2Turboc的圖形功能4.有關圖形窗口和圖形屏幕操作函數(shù)1)圖形窗口操作象文本方式下可以設定屏幕窗口一樣,圖形方式下也可以在屏幕上某一區(qū)域設定窗口,只是設定的為圖形窗口而已,其后的有關圖形操作都將以這個窗口的左上角(0,0)作為坐標原點,而且可為通過設置使窗口之外的區(qū)域為不可接觸。這樣,所有的圖形操作就被限定在窗口內進行。

voidfarsetviewport(intxl,int

yl,intx2,inty2,int

clipflag);設定一個以(xl,yl)象元點為左上角,(x2,y2)象元為右下角的圖形窗口,其中x1,y1,x2,y2是相對于整個屏幕的坐標。若clipflag為非0,則設定的圖形以外部分不可接觸,若clipflag為0,則圖形窗口以外可以接觸。上一頁下一頁返回13.2Turboc的圖形功能voidfarclearviewport(void);清除現(xiàn)行圖形窗口的內容。voidfargetviewsettings(struct

viewporttypefar*viewport);獲得關于現(xiàn)行窗口的信息,并將其存于viewporttype定義的結構變量viewport中除了清屏函數(shù)以外,關于屏幕操作還有以下函數(shù):voidfarsetactivepage(int

pagenum);voidfarsetvisualpage(int

pagenum);這兩個函數(shù)只用于EGA,VGA以及HERCULES圖形適配器。上一頁下一頁返回13.2Turboc的圖形功能voidfargetimage(intxl,int

yl,intx2,inty2,voidfar*mapbuf);voidfarputimge(intx,int,y,void*mapbuf,intop);unsinedfarimagesize(intxl,int

yl,intx2,inty2);這三個函數(shù)用于將屏幕上的圖像復制到內存,然后再將內存中的圖像送回到屏幕上。上一頁下一頁返回13.2Turboc的圖形功能13.2.5圖形模式下的文本輸出1.文本輸出函數(shù)voidfarouttext(charfar*textstring);該函數(shù)輸出字符串指針textstring所指的文本在現(xiàn)行位置。voidfarouttextxy(intx,inty,charfar*textstring);該函數(shù)輸出字符串指針textstring所指的文本在規(guī)定的(x,y)位置。其中x和y為象元坐標。說明:這兩個函數(shù)都是輸出字符串,但經(jīng)常會遇到輸出數(shù)值或其它類型的數(shù)據(jù),此時就必須使用格式化輸出函數(shù)sprintf()。上一頁下一頁返回13.2Turboc的圖形功能

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

int

sprintf(char*str,char*format,variable-list);它與printf()函數(shù)不同之處是將按格式化規(guī)定的內容寫入str

指向的字符串中,返回值等于寫入的字符個數(shù)。例如:sprintf(s,"yourTOEFLscoreis%d",mark);這里s應是字符串指針或數(shù)組,mark為整型變量。2.有關文本字體、字型和輸出方式的設置有關圖形方式下的文本輸出函數(shù),可以通過setcolor()函數(shù)設置輸出文本的顏色。另外,也可以改變文本字體大小以及選擇是水平方向輸出還是垂直方向輸出。

voidfarsettexjustify(int

horiz,int

vert);上一頁下一頁返回13.2Turboc的圖形功能有關圖形屏幕下文本輸出和字體字型設置函數(shù)的用法請看下例:例13.14#include“graphics.h”#include“stdio.h”intmain(){inti,gdriver,gmode;chars[30];gdriver=DETECT;initgraph(&gdriver,&gmode,"c:\\caic\\bgi");上一頁下一頁返回13.2Turboc的圖形功能setbkcolor(BLUE);cleardevice();setviewport(100,100,540,380,1);/*定義一個圖形窗口*/setfillstyle(1,2);/*綠色以實填充*/setcolor(YELLOW);rectangle(0,0,439,279);floodfill(50,50,14);setcolor(12);settextstyle(1,0,8);/*三重筆劃字體,水平放大8倍*/上一頁下一頁返回13.2Turboc的圖形功能outtextxy(20,20,"GoodBetter");setcolor(15);settextstyle(3,0,5);/*無襯筆劃字體,水平放大5倍*/outtextxy(120,120,"GoodBetter");setcolor(14);settextstyle(2,0,8);i=620;sprintf(s,"Yourscoreis%d",i);outtextxy(30,200,s);/*將數(shù)字轉化為字符串*/setcolor(1);/*指定位置輸出字符串*/上一頁下一頁返回13.2Turboc的圖形

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論