framebuffer(幀緩沖)。
在浦口等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站建設(shè),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),全網(wǎng)營(yíng)銷推廣,外貿(mào)網(wǎng)站制作,浦口網(wǎng)站建設(shè)費(fèi)用合理。
幀的最低數(shù)量為24(人肉眼可見)(低于24則感覺到畫面不流暢)。
顯卡與幀的關(guān)系:由cpu調(diào)節(jié)其數(shù)據(jù)傳輸速率來輸出其三基色的配比。
三基色:RGB(紅綠藍(lán))。
在沒有桌面和圖形文件的系統(tǒng)界面,可以通過C語言的編程來實(shí)現(xiàn)在黑色背景上畫圖!
用下面的代碼,在需要的地方(有注釋)適當(dāng)修改,就能畫出自己喜歡的圖形!
PS:同樣要編譯運(yùn)行后才能出效果。
#include stdio.h
#include sys/mman.h
#include fcntl.h
#include linux/fb.h
#include stdlib.h
#define RGB888(r,g,b) ((r 0xff) 16 | (g 0xff) 8 | (b 0xff))
#define RGB565(r,g,b) ((r 0x1f) 11 | (g 0x3f) 5 | (b 0x1f))
int main()
{
int fd = open("/dev/fb0", O_RDWR);
if(fd 0){
perror("open err. \n");
exit(EXIT_FAILURE);
printf("xres: %d\n", info.xres);
printf("yres: %d\n", info.yres);
printf("bits_per_pixel: %d\n", info.bits_per_pixel);
size_t len = info.xres*info.yres*info.bits_per_pixel 3;
unsigned long* addr = NULL;
addr = mmap(NULL, len, PROT_WRITE|PROT_READ, MAP_SHARED, fd, 0);
if(addr == (void*)-1){
perror("mmap err. \n");
與圖形有關(guān)的函數(shù)
GRAPHICS.H 庫(kù)文件
bar
【功能】畫出一條欄目。
【原型】void far bar(int left,int top,int right,int bottom)
【位置】graphics.hgraphics.h
【參見】bar3d,setfillstyle,rectangle
bar3d
【功能】畫出一條3-D欄目。
【原型】void far bar3d(int left,int top,int right,int bottom,int depth,int topflag)
【位置】graphics.h
【參見】bar
circle
【功能】以(x,y)為圓心按照指定的半徑畫出一個(gè)圓。
【原型】void far circle(int x,int y,int radius)
【位置】graphics.h
【參見】arc
cleardevice
【功能】清除圖形畫面。
【原型】void far cleardevice(void)
【位置】graphics.h
【參見】clearviewport
clearviewport
【功能】清除當(dāng)前可視區(qū)域。
【原型】clearviewport(void)
【位置】graphics.h
【參見】setviewport,cleardevice
closegraph
【功能】關(guān)閉圖形系統(tǒng)。
【原型】void far closegraph(void)
【位置】graphics.h
【參見】initgraph
detecgraph
【功能】通過檢查硬件確定使用的圖形驅(qū)動(dòng)程序和模式。
【原型】void far detectgraph(int far *graphdriver,int far *graphmode)
【位置】graphics.h
【參見】initgraph,graphresult
drawpoly
【功能】畫出一個(gè)多邊形的輪廓。
【原型】void far drawpoly(int numpoints,int far polypoints[])
【位置】graphics.h
【說明】polypoints中包括一共numpoints對(duì)數(shù)值。其中每一對(duì)都給出了多邊形中一個(gè)頂點(diǎn)的x和y值。
【參見】fillpoly
ellipse
【功能】畫出一條橢圓形的圓弧。
【原型】void far ellipse(int x,int y,int stangle,int endangle,int xradius,int yradius)
【位置】graphics.h
【說明】中心點(diǎn)在(x,y),stangle和endangle表示一角度為單位的起始角和終止角。Xradius和yradius表示水平軸和垂直軸。
【參見】arc,circle,fillellipse
fillellipose
【功能】畫出橢圓形圓弧,并填充。
【原型】void far fillllipse(int x,int y,int xradius,int yradius)
【位置】graphics.h
【說明】使用(x,y)作為中心點(diǎn),然后使用當(dāng)前的填充模式填充圓弧。Xradius和yradius表示水平軸和垂直軸。
【參見】arc,circle,ellipse,pieslice
fillpoly
【功能】畫出一個(gè)多邊形,并填充。
【原型】void far fillpoly(int numpoints,int far polypoints[])
【位置】graphics.h
【說明】polypoints中包含有numpoints對(duì)數(shù)值。其中每一對(duì)給出了多邊形一個(gè)頂點(diǎn)的x值和y值。
【參見】drawpoly,fill_patterns,floodfill,graphresult,setfillstyle
floodfill
【功能】填充一個(gè)有界區(qū)域范圍。
【原型】void far floodfill(int x,int y,int border)
【位置】graphics.h
【參見】drawpoly,fillpoly,fill_patterns,graphresult,setfillstyle
getarccoords
【功能】得到最后一次調(diào)用arc的坐標(biāo)值。
【原型】void far getaerccoords(struct arccoordstype far *arccoords)
【位置】graphics.h
【參見】arc
getaspectratio
【功能】得到當(dāng)前圖形模式的縱橫比。
【原型】void far getaspectratio(int far *xasp,int far *yasp)
【位置】graphics.h
【說明】are及類似函數(shù)使用縱橫比令圓圈更加圓,而不會(huì)像橢圓。Yasp應(yīng)當(dāng)為10000。當(dāng)象素為VGA平方并且10000時(shí),xasp使用10000數(shù)值。
【參見】arc,setaspectratio
getbkcolor
【功能】返回當(dāng)前背景顏色。
【原型】int far getbkcolor(void)
【位置】graphics.h
【參見】setbkcolor,getcolor,getpalette
getcolor
【功能】返回當(dāng)前畫筆的顏色。
【原型】int far getcolor(void)
【位置】graphics.h
【參見】getbkcolor,setcolor,getmaxcolor,getpalette
getdefaultpalette
【功能】返回調(diào)色板定義結(jié)構(gòu)。
【原型】struct palettetype *far getdefaultpalette(void)
【位置】graphics.h
【說明】返回一個(gè)指針,指向調(diào)用initgraph初始化時(shí),當(dāng)前驅(qū)動(dòng)程序的默認(rèn)調(diào)色板結(jié)構(gòu)。
【參見】getpalette,initgraph
getdrivername
【功能】返回一個(gè)指針,指向當(dāng)前圖形驅(qū)動(dòng)程序的名稱。
【原型】char *far getdrivername(void)
【位置】graphics.h
【說明】返回的指針指向標(biāo)識(shí)當(dāng)前驅(qū)動(dòng)器程序的字符串,從而可以探測(cè)到硬件適配器。
【參見】initgraph
getfillpattern
【功能】將用戶定義的填充模式復(fù)制到內(nèi)存中。
【原型】void far getfillpattern(char far *pattern)
【位置】graphics.h
【參見】getfillsettings,setfillpattern,fill_patterns
getfillsettings
【功能】得到當(dāng)前填充模式及其顏色的有關(guān)信息。
【原型】void far getfillsettings(struct fillsettingstype far *fillinfo)
【位置】graphics.h
【參見】floodfill, fillpoly, setfillstyple, pieslice, setfillpattern, bar3d, bar, getfillpattern
getgraphmode
【功能】返回當(dāng)前圖形模式。
【原型】int far getgraphmode(void)
【位置】graphics.h
【說明】必須先調(diào)用initgraph或者setgraphmode。
【參見】setmoderange,restorectrtmode
getimage
【功能】將制定區(qū)域的位圖保存到內(nèi)存中。
【原型】void far getimage(int left,int top,int right,int bottom,void far *bitmap)
【位置】graphics.h
【參見】imagesize,putimage
因?yàn)樘嗔?,無法一一列出。比如下面的:
putimage
putpixel
rectangle
registerbgidriver
registerbgifont
restorecrtmode
sector
setactivepage
setallpalette
setaspectratio
setbkcolor
setcolor
setfillpattern
setfillstyle
setgraphbufsize
setgraphmode
setlinestyle
setpalette
setrgbcolor
setrgbpalette
settextjustify
settextstyle
setusercharsize
setviewport
setvisualpage
setwritemode
textheight
textwidth
建議你買本專業(yè)的書籍學(xué)習(xí)查看。
用法: 該函數(shù)調(diào)用方式為void line(int startx,int starty,int endx,int endy); 說明: 參數(shù)startx,starty為起點(diǎn)坐標(biāo),endx,endy為終點(diǎn)坐標(biāo),函數(shù)調(diào)用前后,圖形狀態(tài)下屏幕光標(biāo)(一般不可見)當(dāng)前位置不改變。
一) 像素函數(shù)
putpiel() 畫像素點(diǎn)函數(shù)
getpixel()返回像素色函數(shù)
(二) 直線和線型函數(shù)
line() 畫線函數(shù)
lineto() 畫線函數(shù)
linerel() 相對(duì)畫線函數(shù)
setlinestyle() 設(shè)置線型函數(shù)
getlinesettings() 獲取線型設(shè)置函數(shù)
setwritemode() 設(shè)置畫線模式函數(shù)
(三)、多邊形函數(shù)
rectangle() 畫矩形函數(shù)
bar() 畫條函數(shù)
bar3d() 畫條塊函數(shù)
drawpoly() 畫多邊形函數(shù)
(四)、 圓、弧和曲線函數(shù)
getaspectratio()獲取縱橫比函數(shù)
circle()畫圓函數(shù)
arc() 畫圓弧函數(shù)
ellipse()畫橢圓弧函數(shù)
fillellipse() 畫橢圓區(qū)函數(shù)
pieslice() 畫扇區(qū)函數(shù)
sector() 畫橢圓扇區(qū)函數(shù)
getarccoords()獲取圓弧坐標(biāo)函數(shù)
(五)、 填充函數(shù)
setfillstyle() 設(shè)置填充圖樣和顏色函數(shù)
setfillpattern() 設(shè)置用戶圖樣函數(shù)
floodfill() 填充閉域函數(shù)
fillpoly() 填充多邊形函數(shù)
getfillsettings() 獲取填充設(shè)置函數(shù)
getfillpattern() 獲取用戶圖樣設(shè)置函數(shù)
(六)、圖像函數(shù)
imagesize() 圖像存儲(chǔ)大小函數(shù)
getimage() 保存圖像函數(shù)
putimage() 輸出圖像函數(shù)
圖形和圖像函數(shù)包含在graphics.h里面
(一) 像素函數(shù)
56. putpiel() 畫像素點(diǎn)函數(shù)
57. getpixel()返回像素色函數(shù)
(二) 直線和線型函數(shù)
58. line() 畫線函數(shù)
59. lineto() 畫線函數(shù)
60. linerel() 相對(duì)畫線函數(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() 畫多邊形函數(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()獲取圓弧坐標(biāo)函數(shù)
(五)、 填充函數(shù)
76. setfillstyle() 設(shè)置填充圖樣和顏色函數(shù)
77. setfillpattern() 設(shè)置用戶圖樣函數(shù)
78. floodfill() 填充閉域函數(shù)
79. fillpoly() 填充多邊形函數(shù)
80. getfillsettings() 獲取填充設(shè)置函數(shù)
81. getfillpattern() 獲取用戶圖樣設(shè)置函數(shù)
(六)、圖像函數(shù)
82. imagesize() 圖像存儲(chǔ)大小函數(shù)
83. getimage() 保存圖像函數(shù)
84. putimage() 輸出圖像函數(shù)
四、圖形和圖像函數(shù)
對(duì)許多圖形應(yīng)用程序,直線和曲線是非常有用的。但對(duì)有些圖形只能靠操作單個(gè)像素才能畫出。當(dāng)然如果沒有畫像素的功能,就無法操作直線和曲線的函數(shù)。而且通過大規(guī)模使用像素功能,整個(gè)圖形就可以保存、寫、擦除和與屏幕上的原有圖形進(jìn)行疊加。
(一) 像素函數(shù)
56. putpixel() 畫像素點(diǎn)函數(shù)
功能: 函數(shù)putpixel() 在圖形模式下屏幕上畫一個(gè)像素點(diǎn)。
用法: 函數(shù)調(diào)用方式為void putpixel(int x,int y,int color);
說明: 參數(shù)x,y為像素點(diǎn)的坐標(biāo),color是該像素點(diǎn)的顏色,它可以是顏色符號(hào)名,也可以是整型色彩值。
此函數(shù)相應(yīng)的頭文件是graphics.h
返回值: 無
例: 在屏幕上(6,8)處畫一個(gè)紅色像素點(diǎn):
putpixel(6,8,RED);
57. getpixel()返回像素色函數(shù)
功能: 函數(shù)getpixel()返回像素點(diǎn)顏色值。
用法: 該函數(shù)調(diào)用方式為int getpixel(int x,int y);
說明: 參數(shù)x,y為像素點(diǎn)坐標(biāo)。
函數(shù)的返回值可以不反映實(shí)際彩色值,這取決于調(diào)色板的設(shè)置情況(參見setpalette()函數(shù))。
這個(gè)函數(shù)相應(yīng)的頭文件為graphics.h
返回值: 返回一個(gè)像素點(diǎn)色彩值。
例: 把屏幕上(8,6)點(diǎn)的像素顏色值賦給變量color。
color=getpixel(8,6);
(二) 直線和線型函數(shù)
有三個(gè)畫直線的函數(shù),即line(),lineto(),linerel()。這些直線使用整型坐標(biāo),并相對(duì)于當(dāng)前圖形視口,但不一定受視口限制,如果視口裁剪標(biāo)志clip為真,那么直線將受到視口邊緣截?cái)?;如果clip為假,即使終點(diǎn)坐標(biāo)或新的當(dāng)前位置在圖形視口或屏幕極限之外,直線截?cái)嗟狡聊粯O限。
有兩種線寬及幾種線型可供選擇,也可以自己定義線圖樣。下面分別介紹直線和線型函數(shù)。
58. line() 畫線函數(shù)
功能: 函數(shù)line()使用當(dāng)前繪圖色、線型及線寬,在給定的兩點(diǎn)間畫一直線。
用法: 該函數(shù)調(diào)用方式為void line(int startx,int starty,int endx,int endy);
說明: 參數(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()中的實(shí)例。
59. lineto() 畫線函數(shù)
功能: 函數(shù)lineto()使用當(dāng)前繪圖色、線型及線寬,從當(dāng)前位置畫一直線到指定位置。
用法: 此函數(shù)調(diào)用方式為void lineto(int x,int y);
說明: 參數(shù)x,y為指定點(diǎn)的坐標(biāo),函數(shù)調(diào)用后,當(dāng)前位置改變到指定點(diǎn)(x,y)。
該函數(shù)對(duì)應(yīng)的頭文件為graphics.h
返回值: 無
例: 見函數(shù)60.linerel()中的實(shí)例。
60.linerel() 相對(duì)畫線函數(shù)
功能: 函數(shù)linerel() 使用當(dāng)前繪圖色、線型及線寬,從當(dāng)前位置開始,按指定的水平和垂直偏移距離畫一直線。
用法: 這個(gè)函數(shù)調(diào)用方式為void linerel(int dx,int dy);
說明: 參數(shù)dx,dy分別是水平偏移距離和垂直偏移距離。
函數(shù)調(diào)用后,當(dāng)前位置變?yōu)樵黾悠凭嚯x后的位置,例如,原來的位置是(8,6),調(diào)用函數(shù)linerel(10,18)后,當(dāng)前位置為(18,24)。
返回值:無
例: 下面的程序?yàn)楫嬀€函數(shù)調(diào)用實(shí)例:
#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() 設(shè)置線型函數(shù)
功能: setlinestyle() 為畫線函數(shù)設(shè)置當(dāng)前線型,包括線型、線圖樣和線寬。
用法: setlinestyle() 函數(shù)調(diào)用方式為void setlinestyle(int stly,unsigned pattern,int width);
說明: 參數(shù)style為線型取值,也可以用相應(yīng)名稱表示,如表1-10中所示。
參數(shù)pattern用于自定義線圖樣,它是16位(bit)字,只有當(dāng)style=USERBIT_LINE(值為1)時(shí),pattern的值才有意義,使用用戶自定義線圖樣,與圖樣中“1”位對(duì)應(yīng)的像素顯示,因此,pattern=0xFFFF,則畫實(shí)線;pattern=0x9999,則畫每隔兩個(gè)像素交替顯示的虛線,如果要畫長(zhǎng)虛線,那么pattern的值可為0xFF00和0xF00F,當(dāng)style不為USERBIT_LINE值時(shí),雖然pattern的值不起作用,但扔須為它提供一個(gè)值,一般取為0。
參數(shù)wigth用來設(shè)定線寬,其取值見表1-11,表中給出了兩個(gè)值,即1和3,實(shí)際上,線寬取值為2也是可以接受的。
若用非法參數(shù)調(diào)用setlinestyle()函數(shù),那么graphresult()會(huì)返回錯(cuò)誤代碼,并且當(dāng)前線型繼續(xù)有效。
Turbo C提供的線型與線寬定義在頭文件graphics.h中,表1-10和1-11分別列出了參數(shù)的取值與含義。
表1-10 線型
-----------------------------------------------------
名 稱 取 值 含 義
-----------------------------------------------------
SOLID_LINE 0 實(shí)線
DOTTED_LINE 1 點(diǎn)線
CNTER_LINE 2 中心線
DASHED_LINE 3 虛線
USERBIT_LINE 4 用戶自定義線型
-----------------------------------------------------
表1-11 線寬
-----------------------------------------------------------
名 稱 取 值 說 明
-----------------------------------------------------------
NORM_WIDTH(常寬) 1 一個(gè)像素寬(缺省值)
THICK_WIDTH(加寬) 3 三個(gè)像素寬
-----------------------------------------------------------
這個(gè)函數(shù)的頭文件是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() 獲取線型設(shè)置函數(shù)
功能: 函數(shù)getlinesettings() 用當(dāng)前設(shè)置的線型、線圖樣和線寬填 寫linesettingstype型結(jié)構(gòu)。
用法: 函數(shù)調(diào)用方式為void getlinesettings(struct linesettingstype *info);
說明: 此函數(shù)調(diào)用執(zhí)行后,當(dāng)前的線型、線圖樣和線寬值被裝入info指向的結(jié)構(gòu)里,從而可從該結(jié)構(gòu)中獲得線型設(shè)置。
linesettingstype型結(jié)構(gòu)定義如下:
struct linesettingstype {
int linestyle;
unsigned upattern;
int thickness;
};
其中l(wèi)inestyle用于存放線型,線型值為表1-10中的各值之一。
upattern用為裝入用戶自定義線圖樣,這是16位字,每一位等于一個(gè)像素,如果哪個(gè)位被設(shè)置,那么該像素打開,否則關(guān)閉。
thickness為線寬值存放的變量,可參見表1-11。
getlinesettings()函數(shù)對(duì)應(yīng)的頭文件為graphics.h
返回值: 返回的線型設(shè)置存放在info指向的結(jié)構(gòu)中。
例: 把當(dāng)前線型的設(shè)置寫入info結(jié)構(gòu):
struct linesettingstype info;
getlinesettings(info);
63.setwritemode() 設(shè)置畫線模式函數(shù)
功能: 函數(shù)setwritemode() 設(shè)置畫線模式
用法: 函數(shù)調(diào)用方式為 void setwritemode()(int mode);
說明: 參數(shù)mode只有兩個(gè)取值0和1,若mode為0,則新畫的線將復(fù)蓋屏幕上原有的圖形,此為缺省畫線輸出模式。如果mode為1,那么新畫的像素點(diǎn)與原有圖形的像素點(diǎn)先進(jìn)行異或(XOR)運(yùn)算,然后輸出到屏幕上,使用這種畫線輸出模式,第二次畫同一圖形時(shí),將擦除該圖形。調(diào)用setwritemode()設(shè)置的畫線輸出模式只影響函數(shù)line(),lineto(),linerel(),recangle()和drawpoly()。
setwritemode()函數(shù)對(duì)應(yīng)的頭文件是graphics.h
返回值: 無
例: 設(shè)置畫線輸出模式為0:
setwritemode(0);
(三)、多邊形函數(shù)
對(duì)多邊形,無疑可用畫直線函數(shù)來畫出它,但直接提供畫多邊形的函數(shù)會(huì)給用戶很大方便。最常見的多邊形有矩形、矩形塊(或稱條形)、多邊形和多邊形塊,我們還把長(zhǎng)方形條塊也放到這里一起考慮,雖然它不是多邊形,但它的特例就是矩形(塊)。下面直接介紹畫多邊形的函數(shù)。
64. rectangle() 畫矩形函數(shù)
功能: 函數(shù)rectangle() 用當(dāng)前繪圖色、線型及線寬,畫一個(gè)給定左上角與右下角的矩形(正方形或長(zhǎng)方形)。
用法: 此函數(shù)調(diào)用方式為void rectangle(int left,int top,int right,int bottom);
說明: 參數(shù)left,top是左上角點(diǎn)坐標(biāo),right,bottom是右下角點(diǎn)坐標(biāo)。如果有一個(gè)以上角點(diǎn)不在當(dāng)前圖形視口內(nèi),且裁剪標(biāo)志clip設(shè)置的是真(1),那么調(diào)用該函數(shù)后,只有在圖形視口內(nèi)的矩形部分才被畫出。
這個(gè)函數(shù)對(duì)應(yīng)的頭文件為graphics.h
返回值: 無
例: 下面的程序畫一些矩形實(shí)例:
#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() 畫條函數(shù)
功能: 函數(shù)bar()用當(dāng)前填充圖樣和填充色(注意不是給圖色)畫出一個(gè)指定上左上角與右下角的實(shí)心長(zhǎng)條形(長(zhǎng)方塊或正方塊),但沒有四條邊線)。
用法: bar()函數(shù)調(diào)用方式為void bar(int left,int top,int right,int bottom);
說明: 參數(shù)left,topright,bottom分別為左上角坐標(biāo)與右下角坐標(biāo),它們和調(diào)用函數(shù)rectangle()的情形相同,調(diào)用此函數(shù)前,可用setfillstyle()或setfillpattern()設(shè)置當(dāng)前填充圖樣和填充色。
注意此函數(shù)只畫沒有邊線的條形,如果要畫有邊線的的條形,可調(diào)用下面的函數(shù)bar3d()來畫,并將深度參數(shù)設(shè)為0,同時(shí)topflag參數(shù)要設(shè)置為真,否則該條形無頂邊線。
這 應(yīng)的頭文件為graphics.h
返回值: 無
例: 見函數(shù)bar3d()中的實(shí)例。
66.bar3d() 畫條塊函數(shù)
功能: 函數(shù)bar3d() 使用當(dāng)前繪圖色、線型及線寬畫出三維長(zhǎng)方形條塊,并用當(dāng)前填充圖樣和填 充色填充該三維條塊的表面。
用法: 此函數(shù)調(diào)用方式為void bar3d(int left,int top,int right,int bottom,int depth,int topflag);
說明: 參數(shù)left,top,right,bottom分另為左上角與右下角坐標(biāo),這與bar()函數(shù)中的一樣。參數(shù)depth為條塊的深度,以像素為單位,通常按寬度的四分之一計(jì)算。深度方向通過屏顯縱橫比調(diào)節(jié)為約45度(即這時(shí)x/y比設(shè)置為1:1)。
參數(shù)topflag相當(dāng)于一個(gè)布爾參數(shù),如果設(shè)置為1(真)那么條塊上放一頂面;若設(shè)置為0(假),則三維條形就沒有頂面,這樣可使多個(gè)三維條形疊加在一起。
要使圖形更加美觀,可利用函數(shù)floodfill()或setfillpattern()來選擇填充圖樣和填充色(參見本小節(jié)(五)填充函數(shù) )。
bar3d()函數(shù)對(duì)應(yīng)的頭文件為graphics.h
返回值: 無
例: 下面的程序畫一個(gè)條形和條塊:
#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() 畫多邊形函數(shù)
功能: 函數(shù)drawpoly() 用當(dāng)前繪圖色、線型及線寬,畫一個(gè)給定若干點(diǎn)所定義的多邊形。
用法: 此函數(shù)調(diào)用方式為void drawpoly(int pnumber,int *points);
說明: 參數(shù)pnumber為多邊形的頂點(diǎn)數(shù);參數(shù)points指向整型數(shù)組,該數(shù)組中是多邊形所有頂點(diǎn)(x,y)坐標(biāo)值,即一系列整數(shù)對(duì),x坐標(biāo)值在前。顯然整型數(shù)組的維數(shù)至少為頂點(diǎn)數(shù)的2倍,在定義了多邊形所有頂點(diǎn)的數(shù)組polypoints時(shí),頂點(diǎn)數(shù)目可通過計(jì)算sizeof(polypoints)除以2倍的sizeof(int)得到,這里除以2倍的原因是每個(gè)頂點(diǎn)有兩個(gè)整數(shù)坐標(biāo)值。另外有一點(diǎn)要注意,畫一個(gè)n個(gè)頂點(diǎn)的閉合圖形,頂點(diǎn)數(shù)必須等于n+1,并且最后一點(diǎn)(第n+1)點(diǎn)坐標(biāo)必須等于第一點(diǎn)的坐標(biāo)。
drawpoly()函數(shù)對(duì)應(yīng)的頭文件為grpahics.h
返回值: 無
例: 下面的程序畫一個(gè)封閉星形圖與一個(gè)不封閉星形圖:
#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();
}
(四)、 圓、弧和曲線函數(shù)
在一個(gè)屏幕上畫得很圓的圖形到另一個(gè)屏幕上可能被壓扁或拉長(zhǎng),這是因?yàn)槊恳环N顯示卡與之相應(yīng)的顯示模式都有一個(gè)縱橫比??v橫比是指像素的水平方向大小與垂直方向大小的比值。如VGA顯示卡由于偈素基本上是正方形,所以縱橫比為1.000。
為了保證幾何圖形基本按預(yù)計(jì)情況顯示在屏幕上,用屏顯的縱橫比來計(jì)算和糾正不同硬件及顯示卡產(chǎn)生的畸變。計(jì)算縱橫比所需要的水平方向和垂直方向的比例系數(shù)可調(diào)用函數(shù)getaspectratio()獲得。
68. getaspectratio()獲取縱橫比函數(shù)
功能: 函數(shù)getaspectratio()返回x方向和y方向的比例系數(shù),用這兩個(gè)整型值可計(jì)算某一特定屏顯的縱橫比。
用法: 此函數(shù)調(diào)用方式為void getaspectratio(int xasp,int yasp);
說明: 參數(shù)xasp指向的變量存放返回的x方向比例系數(shù);參數(shù)yasp指向的變量存放返回的y方向比例系數(shù)。通常y方向比例系數(shù)為10 000, x方向比例系數(shù)不大于10 000(這是因?yàn)榇蠖鄶?shù)屏幕像素高比寬長(zhǎng))。
注意縱橫比自動(dòng)用作下面函數(shù)arc(),circle()和pieslice()中的標(biāo)尺因子,使屏幕上圓或弧正常顯示。但用ellipse()函數(shù)畫橢圓必須調(diào)用本函數(shù)獲取縱橫比作為標(biāo)尺因子,否則不予調(diào)整??v橫比可用于其它幾何圖形,目的是校正和顯示圖形。
getaspectratio()函數(shù)對(duì)應(yīng)的頭文件為graphics.h
返回值: 返回x與y方向比例系數(shù)分別存放在xasp和yasp所指向的變量中。
例: 下面的程序顯示縱橫比:
int xasp,yasp;
float aspectratio;
getaspectratio(xasp,yasp);
aspectratio=xasp/yasp;
printf("aspect ratio: %f",aspectratio);
69. circle()畫圓函數(shù)
功能: 函數(shù)circle()使用當(dāng)前繪圖色并以實(shí)線畫一個(gè)完整的圓。
用法:該函數(shù)調(diào)用方式為void circle(int x,int y,int radius);
說明: 參數(shù)x,y為圓心坐標(biāo),radius為圓半徑,用像素個(gè)素表示。注意,調(diào)用circle()函數(shù)畫圓時(shí)不用當(dāng)前線型。
不同于ellipse()函數(shù),只用單個(gè)半徑radius參數(shù)調(diào)用circle()函數(shù),故屏顯縱橫比可以自動(dòng)調(diào)節(jié),以產(chǎn)生正確的顯示圖。
此函數(shù)對(duì)應(yīng)的頭文件為graphics.h
返回值: 無
例: 畫六個(gè)同心圓,圓心在(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() 畫圓弧函數(shù)
功能: 函數(shù)arc()使用當(dāng)前繪圖色并以實(shí)線畫一圓弧。
用法: 函數(shù)調(diào)用方式為void arc(int x,int y,int startangle,int endangle,int radius);
說明: 參數(shù)x,y為圓心坐標(biāo),startangle與endangle分別為起始角與終止角,radius為半徑。圓心坐標(biāo)和半徑以像素個(gè)數(shù)給出,起始角和終止角以度為單位,0度位于右邊,90度位于頂部,180度位于左邊,底部是270度。同往常一樣,360度與0度重合。角度按逆時(shí)針方向增加,但并不要求終止角一定比起始角大。例如指定300度和90度分別為起始角和終止角,與指定300度和450度分別為起始角和終止角可畫出相同的弧。大于360度可作為參數(shù),它將被化到0度 ̄360度范圍里。函數(shù)arc()能畫封閉圓,只要取起始角為0度,終止角為360度即可。此函數(shù)中,屏顯縱橫比可自動(dòng)調(diào)節(jié)。
arc()函數(shù)對(duì)應(yīng)的頭文件為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();
}
II、設(shè)定線型函數(shù)
在沒有對(duì)線的特性進(jìn)行設(shè)定之前,TURBO C 用其默認(rèn)值,即一點(diǎn)寬的實(shí)線,但TURBO C 也提供了可以改變線型的函數(shù)。
線型包括:寬度和形狀。其中寬度只有兩種選擇:一點(diǎn)寬和三點(diǎn)寬。而線的形狀則有五種。
下面介紹有關(guān)線型的設(shè)置函數(shù)。
void far setlinestyle(int linestyle,unsigned upattern,int thickness); 該函數(shù)用來設(shè)置線的有關(guān)信息,其中l(wèi)inestyle是線形狀的規(guī)定,見下表。
有關(guān)線的形狀(linestyle)
━━━━━━━━━━━━━━━━━━━━━━━━━
符號(hào)常數(shù) 數(shù)值 含義
—————————————————————————
SOLID_LINE 0 實(shí)線
DOTTED_LINE 1 點(diǎn)線
CENTER_LINE 2 中心線
DASHED_LINE 3 點(diǎn)畫線
USERBIT_LINE 4 用戶定義線
━━━━━━━━━━━━━━━━━━━━━━━━━
thickness是線的寬度,見下表。
有關(guān)線寬(thickness)
━━━━━━━━━━━━━━━━━━━━━━━━━
符號(hào)常數(shù) 數(shù)值 含義
—————————————————————————
NORM_WIDTH 1 一點(diǎn)寬
THIC_WIDTH 3 三點(diǎn)寬
━━━━━━━━━━━━━━━━━━━━━━━━━
對(duì)于upattern,只有l(wèi)inestyle選USERBIT_LINE 時(shí)才有意義 (選其它線型,uppattern取0即可)。此時(shí)uppattern的16位二進(jìn)制數(shù)的每一位代表一個(gè)象元,如果那位為1,則該象元打開,否則該象元關(guān)閉。
void far getlinesettings(struct linesettingstypefar *lineinfo);該函數(shù)將有關(guān)線的信息存放到由lineinfo 指向的結(jié)構(gòu)中,表中l(wèi)inesettingstype的結(jié)構(gòu)如下:
struct linesettingstype{
int linestyle;
unsigned upattern;
int thickness;
}
例如下面兩句程序可以讀出當(dāng)前線的特性
struct linesettingstype *info;
getlinesettings(info);
void far setwritemode(int mode);該函數(shù)規(guī)定畫線的方式。如果mode=0,則表示畫線時(shí)將所畫位置的原來信息覆蓋了(這是TURBO C的默認(rèn)方式)。如果mode=1, 則表示畫線時(shí)用現(xiàn)在特性的線與所畫之處原有的線進(jìn)行異或(XOR)操作, 實(shí)際上畫出的線是原有線與現(xiàn)在規(guī)定的線進(jìn)行異或后的結(jié)果。因此,當(dāng)線的特性不變,進(jìn)行兩次畫線操作相當(dāng)于沒有畫線。
有關(guān)線型設(shè)定和畫線函數(shù)的例子如下所示。
#includestdlib.h
#includegraphics.h
int main()
{
int gdriver, gmode, i;
gdriver=DETECT;
initgraph(gdriver, gmode, "c:\\caic\\bgi");
setbkcolor(BLUE);
cleardevice();
setcolor(GREEN);
circle(320, 240, 98);
setlinestyle(0, 0, 3); /*設(shè)置三點(diǎn)寬實(shí)線*/
setcolor(2);
rectangle(220, 140, 420, 340);
setcolor(WHITE);
setlinestyle(4, 0xaaaa, 1);
/*設(shè)置一點(diǎn)寬用戶定義線*/
line(220, 240, 420, 240);
line(320, 140, 320, 340);
getch();
closegraph();
return 0;
}