圖形和圖像函數(shù)包含在graphics.h里面
成都創(chuàng)新互聯(lián)是一家專業(yè)提供枝江企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、H5建站、小程序制作等業(yè)務(wù)。10年已為枝江眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
(一) 像素函數(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() 畫多邊形函數(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() 圖像存儲大小函數(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)。
用法: 函數(shù)調(diào)用方式為void putpixel(int x,int y,int color);
說明: 參數(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)用方式為int getpixel(int x,int y);
說明: 參數(shù)x,y為像素點(diǎn)坐標(biāo)。
函數(shù)的返回值可以不反映實(shí)際彩色值,這取決于調(diào)色板的設(shè)置情況(參見setpalette()函數(shù))。
這個函數(shù)相應(yīng)的頭文件為graphics.h
返回值: 返回一個像素點(diǎn)色彩值。
例: 把屏幕上(8,6)點(diǎn)的像素顏色值賦給變量color。
color=getpixel(8,6);
(二) 直線和線型函數(shù)
有三個畫直線的函數(shù),即line(),lineto(),linerel()。這些直線使用整型坐標(biāo),并相對于當(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ù)對應(yīng)的頭文件為graphics.h
返回值: 無
例: 見函數(shù)60.linerel()中的實(shí)例。
60.linerel() 相對畫線函數(shù)
功能: 函數(shù)linerel() 使用當(dāng)前繪圖色、線型及線寬,從當(dāng)前位置開始,按指定的水平和垂直偏移距離畫一直線。
用法: 這個函數(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)時,pattern的值才有意義,使用用戶自定義線圖樣,與圖樣中“1”位對應(yīng)的像素顯示,因此,pattern=0xFFFF,則畫實(shí)線;pattern=0x9999,則畫每隔兩個像素交替顯示的虛線,如果要畫長虛線,那么pattern的值可為0xFF00和0xF00F,當(dāng)style不為USERBIT_LINE值時,雖然pattern的值不起作用,但扔須為它提供一個值,一般取為0。
參數(shù)wigth用來設(shè)定線寬,其取值見表1-11,表中給出了兩個值,即1和3,實(shí)際上,線寬取值為2也是可以接受的。
若用非法參數(shù)調(diào)用setlinestyle()函數(shù),那么graphresult()會返回錯誤代碼,并且當(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 一個像素寬(缺省值)
THICK_WIDTH(加寬) 3 三個像素寬
-----------------------------------------------------------
這個函數(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位字,每一位等于一個像素,如果哪個位被設(shè)置,那么該像素打開,否則關(guān)閉。
thickness為線寬值存放的變量,可參見表1-11。
getlinesettings()函數(shù)對應(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只有兩個取值0和1,若mode為0,則新畫的線將復(fù)蓋屏幕上原有的圖形,此為缺省畫線輸出模式。如果mode為1,那么新畫的像素點(diǎn)與原有圖形的像素點(diǎn)先進(jìn)行異或(XOR)運(yùn)算,然后輸出到屏幕上,使用這種畫線輸出模式,第二次畫同一圖形時,將擦除該圖形。調(diào)用setwritemode()設(shè)置的畫線輸出模式只影響函數(shù)line(),lineto(),linerel(),recangle()和drawpoly()。
setwritemode()函數(shù)對應(yīng)的頭文件是graphics.h
返回值: 無
例: 設(shè)置畫線輸出模式為0:
setwritemode(0);
(三)、多邊形函數(shù)
對多邊形,無疑可用畫直線函數(shù)來畫出它,但直接提供畫多邊形的函數(shù)會給用戶很大方便。最常見的多邊形有矩形、矩形塊(或稱條形)、多邊形和多邊形塊,我們還把長方形條塊也放到這里一起考慮,雖然它不是多邊形,但它的特例就是矩形(塊)。下面直接介紹畫多邊形的函數(shù)。
64. rectangle() 畫矩形函數(shù)
功能: 函數(shù)rectangle() 用當(dā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)。如果有一個以上角點(diǎn)不在當(dāng)前圖形視口內(nèi),且裁剪標(biāo)志clip設(shè)置的是真(1),那么調(diào)用該函數(shù)后,只有在圖形視口內(nèi)的矩形部分才被畫出。
這個函數(shù)對應(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)前填充圖樣和填充色(注意不是給圖色)畫出一個指定上左上角與右下角的實(shí)心長條形(長方塊或正方塊),但沒有四條邊線)。
用法: 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,同時topflag參數(shù)要設(shè)置為真,否則該條形無頂邊線。
這 應(yīng)的頭文件為graphics.h
返回值: 無
例: 見函數(shù)bar3d()中的實(shí)例。
66.bar3d() 畫條塊函數(shù)
功能: 函數(shù)bar3d() 使用當(dā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度(即這時x/y比設(shè)置為1:1)。
參數(shù)topflag相當(dāng)于一個布爾參數(shù),如果設(shè)置為1(真)那么條塊上放一頂面;若設(shè)置為0(假),則三維條形就沒有頂面,這樣可使多個三維條形疊加在一起。
要使圖形更加美觀,可利用函數(shù)floodfill()或setfillpattern()來選擇填充圖樣和填充色(參見本小節(jié)(五)填充函數(shù) )。
bar3d()函數(shù)對應(yīng)的頭文件為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() 畫多邊形函數(shù)
功能: 函數(shù)drawpoly() 用當(dāng)前繪圖色、線型及線寬,畫一個給定若干點(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ù)對,x坐標(biāo)值在前。顯然整型數(shù)組的維數(shù)至少為頂點(diǎn)數(shù)的2倍,在定義了多邊形所有頂點(diǎn)的數(shù)組polypoints時,頂點(diǎn)數(shù)目可通過計(jì)算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)必須等于第一點(diǎn)的坐標(biāo)。
drawpoly()函數(shù)對應(yīng)的頭文件為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();
}
(四)、 圓、弧和曲線函數(shù)
在一個屏幕上畫得很圓的圖形到另一個屏幕上可能被壓扁或拉長,這是因?yàn)槊恳环N顯示卡與之相應(yīng)的顯示模式都有一個縱橫比??v橫比是指像素的水平方向大小與垂直方向大小的比值。如VGA顯示卡由于偈素基本上是正方形,所以縱橫比為1.000。
為了保證幾何圖形基本按預(yù)計(jì)情況顯示在屏幕上,用屏顯的縱橫比來計(jì)算和糾正不同硬件及顯示卡產(chǎn)生的畸變。計(jì)算縱橫比所需要的水平方向和垂直方向的比例系數(shù)可調(diào)用函數(shù)getaspectratio()獲得。
68. getaspectratio()獲取縱橫比函數(shù)
功能: 函數(shù)getaspectratio()返回x方向和y方向的比例系數(shù),用這兩個整型值可計(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ù)屏幕像素高比寬長)。
注意縱橫比自動用作下面函數(shù)arc(),circle()和pieslice()中的標(biāo)尺因子,使屏幕上圓或弧正常顯示。但用ellipse()函數(shù)畫橢圓必須調(diào)用本函數(shù)獲取縱橫比作為標(biāo)尺因子,否則不予調(diào)整??v橫比可用于其它幾何圖形,目的是校正和顯示圖形。
getaspectratio()函數(shù)對應(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í)線畫一個完整的圓。
用法:該函數(shù)調(diào)用方式為void circle(int x,int y,int radius);
說明: 參數(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)。
#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)和半徑以像素個數(shù)給出,起始角和終止角以度為單位,0度位于右邊,90度位于頂部,180度位于左邊,底部是270度。同往常一樣,360度與0度重合。角度按逆時針方向增加,但并不要求終止角一定比起始角大。例如指定300度和90度分別為起始角和終止角,與指定300度和450度分別為起始角和終止角可畫出相同的弧。大于360度可作為參數(shù),它將被化到0度 ̄360度范圍里。函數(shù)arc()能畫封閉圓,只要取起始角為0度,終止角為360度即可。此函數(shù)中,屏顯縱橫比可自動調(diào)節(jié)。
arc()函數(shù)對應(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();
}
圖形和圖像函數(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() 畫多邊形函數(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() 圖像存儲大小函數(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)。用法: 函數(shù)調(diào)用方式為void putpixel(int x,int y,int color);說明: 參數(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)用方式為int getpixel(int x,int y);說明: 參數(shù)x,y為像素點(diǎn)坐標(biāo)。函數(shù)的返回值可以不反映實(shí)際彩色值,這取決于調(diào)色板的設(shè)置情況(參見setpalette()函數(shù))。這個函數(shù)相應(yīng)的頭文件為graphics.h返回值: 返回一個像素點(diǎn)色彩值。例: 把屏幕上(8,6)點(diǎn)的像素顏色值賦給變量color。color=getpixel(8,6);
/*請不要看完了就走人*/
/*幫幫忙,采納我的答案!*/
#includestdio.h
#includemath.h
main(){
double
y;
int
x,m,i;
printf("y=sin(x)
[0x2*pi]\n");
for(y=1;y=-1;y-=0.1){
if(y=0){
m=asin(y)*10;
for(x=1;xm;x++)printf("
");
printf("*",m);
for(;x31-m;x++)printf("
");
printf("*\n");}
else{
m=-1*asin(y)*10;
for(i=0;i32;i++)printf("
");
for(x=1;xm;x++)printf("
");
printf("*",m);
for(;x31-m;x++)printf("
");
printf("*\n",m);
}
}
}
C語言庫函數(shù),常用庫函數(shù)有:
1、scanf格式輸入函數(shù)
2、printf格式輸出函數(shù)
3、systemdos命令函數(shù)
4、sort排序
5、main主函數(shù)
6、fgets文件讀取字符串函數(shù)
7、fputs文件寫入字符串函數(shù)
8、fscanf文件格式讀取函數(shù)
9、fprintf文件格式寫入函數(shù)
10、fopen打開文件函數(shù)
11、getchar輸入字符函數(shù)
12、putchar輸出字符函數(shù)
13、malloc動態(tài)申請內(nèi)存函數(shù)
14、free釋放內(nèi)存函數(shù)
15、abs求絕對值數(shù)學(xué)函數(shù)
16、sqrt求平方根數(shù)學(xué)函數(shù)
擴(kuò)展資料
語言組成:
1、數(shù)據(jù)類型
C的數(shù)據(jù)類型包括:整型、字符型、實(shí)型或浮點(diǎn)型(單精度和雙精度)、枚舉類型、數(shù)組類型、結(jié)構(gòu)體類型、共用體類型、指針類型和空類型。
2、常量與變量
常量其值不可改變,符號常量名通常用大寫。
變量是以某標(biāo)識符為名字,其值可以改變的量。標(biāo)識符是以字母或下劃線開頭的一串由字母、數(shù)字或下劃線構(gòu)成的序列,請注意第一個字符必須為字母或下劃線,否則為不合法的變量名。變量在編譯時為其分配相應(yīng)存儲單元。
3、數(shù)組
如果一個變量名后面跟著一個有數(shù)字的中括號,這個聲明就是數(shù)組聲明。字符串也是一種數(shù)組。它們以ASCII的NULL作為數(shù)組的結(jié)束。要特別注意的是,方括內(nèi)的索引值是從0算起的。
4、指針
如果一個變量聲明時在前面使用 * 號,表明這是個指針型變量。換句話說,該變量存儲一個地址,而 *(此處特指單目運(yùn)算符 * ,下同。C語言中另有 雙目運(yùn)算符 *) 則是取內(nèi)容操作符,意思是取這個內(nèi)存地址里存儲的內(nèi)容。指針是 C 語言區(qū)別于其他同時代高級語言的主要特征之一。
參考資料來源:百度百科-函數(shù)
SDL可以做到。給你貼個源碼:
#includestdio.h
#includestdlib.h
#includeunistd.h
#includeSDL/SDL.h
#includeSDL/SDL_image.h
//函數(shù)聲明
int Init(void);
SDL_Surface *createScreen(int width,int height,int bpp,Uint32 flags);
void destroyScreen(SDL_Surface *screen);
SDL_Surface *loadImageBMP(char *filename);
void loadImage(char *filename,SDL_Surface *screen,int xPos,int yPos);
SDL_Surface *screen;
SDL_Surface *image_handler;
char buffer[10];
int main(int argc,char *argv[])
{
int height=640,width=480;
int bpp=8;
Init();
screen = createScreen(width,height,bpp,SDL_SWSURFACE);
loadImage("./wuyajie.bmp",screen,width/2,height/4);
read(STDIN_FILENO,buffer,1);
destroyScreen(screen);
SDL_Quit();
return 0;
}
int Init(void)
{
if(SDL_Init(SDL_INIT_VIDEO)==-1)
{
fprintf(stderr,"SDL Init Error:%s\n",SDL_GetError());
exit(-1);
}
return 0;
}
/*
創(chuàng)建屏幕,并將屏幕設(shè)置為640x480大小
*/
SDL_Surface *createScreen(int width,int height,int bpp,Uint32 flags)
{
SDL_Surface *screen;
if((screen = SDL_SetVideoMode(width,height,bpp,flags))==NULL)
{
fprintf(stderr,"Could not create a screen:%s\n",SDL_GetError());
exit(-1);
}
return screen;
}
/*
加載圖片
*/
void loadImage(char *filename,SDL_Surface *screen,int xPos,int yPos)
{
SDL_Surface *image;
SDL_Rect dest;
image = SDL_LoadBMP(filename);
if ( image == NULL ){
fprintf(stderr, "無法加載 %s: %s\n", filename, SDL_GetError());
exit(-1);
}
dest.x = xPos;
dest.y = yPos;
dest.w = image-w;
dest.h = image-h;
SDL_BlitSurface(image,NULL,screen,dest);
SDL_UpdateRects(screen,1,dest);
}
void destroyScreen(SDL_Surface * screen)
{
SDL_FreeSurface(screen);
}
framebuffer(幀緩沖)。
幀的最低數(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");