C语言中绘图的函数库全解.docx
《C语言中绘图的函数库全解.docx》由会员分享,可在线阅读,更多相关《C语言中绘图的函数库全解.docx(11页珍藏版)》请在冰豆网上搜索。
![C语言中绘图的函数库全解.docx](https://file1.bdocx.com/fileroot1/2023-7/10/3f5d9306-4aaa-4acf-871d-1bc49163a211/3f5d9306-4aaa-4acf-871d-1bc49163a2111.gif)
C语言中绘图的函数库全解
C语言中绘图的函数库
图形和图像函数包含在graphics.h里面
(一)像素函数
56.putpiel()画像素点函数
57.getpixel()返回像素色函数
(二)直线和线型函数
58.line()画线函数
59.lineto()画线函数
60.linerel()相对画线函数
61.setlinestyle()设置线型函数
62.getlinesettings()获取线型设置函数
63.setwritemode()设置画线模式函数
(三)、多边形函数
64.rectangle()画矩形函数
65.bar()画条函数
66.bar3d()画条块函数
67.drawpoly()画多边形函数
(四)、圆、弧和曲线函数
68.getaspectratio()获取纵横比函数
69.circle()画圆函数
70.arc()画圆弧函数
71.ellipse()画椭圆弧函数
72.fillellipse()画椭圆区函数
73.pieslice()画扇区函数
74.sector()画椭圆扇区函数
75.getarccoords()获取圆弧坐标函数
(一)像素函数
56.putpixel()画像素点函数
功能:
函数putpixel()在图形模式下屏幕上画一个像素点。
用法:
函数调用方式为voidputpixel(intx,inty,intcolor);
说明:
参数x,y为像素点的坐标,color是该像素点的颜色,它可以是颜色符号名,也可以是整型色彩值。
此函数相应的头文件是graphics.h
返回值:
无
例:
在屏幕上(6,8)处画一个红色像素点:
putpixel(6,8,RED);
(二)直线和线型函数
有三个画直线的函数,即line(),lineto(),linerel()。
这些直线使用整型坐标,并相对于当前图形视口,但不一定受视口限制,如果视口裁剪标志clip为真,那么直线将受到视口边缘截断;如果clip为假,即使终点坐标或新的当前位置在图形视口或屏幕极限之外,直线截断到屏幕极限。
有两种线宽及几种线型可供选择,也可以自己定义线图样。
下面分别介绍直线和线型函数。
58.line()画线函数
功能:
函数line()使用当前绘图色、线型及线宽,在给定的两点间画一直线。
用法:
该函数调用方式为voidline(intstartx,intstarty,intendx,intendy);
说明:
参数startx,starty为起点坐标,endx,endy为终点坐标,函数调用前后,图形状态下屏幕光标(一般不可见)当前位置不改变。
此函数相应的头文件为graphics.h
返回值:
无
例:
见函数60.linerel()中的实例。
59.lineto()画线函数
功能:
函数lineto()使用当前绘图色、线型及线宽,从当前位置画一直线到指定位置。
用法:
此函数调用方式为voidlineto(intx,inty);
说明:
参数x,y为指定点的坐标,函数调用后,当前位置改变到指定点(x,y)。
该函数对应的头文件为graphics.h
返回值:
无
例:
见函数60.linerel()中的实例。
60.linerel()相对画线函数
功能:
函数linerel()使用当前绘图色、线型及线宽,从当前位置开始,按指定的水平和垂直偏移距离画一直线。
用法:
这个函数调用方式为voidlinerel(intdx,intdy);
说明:
参数dx,dy分别是水平偏移距离和垂直偏移距离。
函数调用后,当前位置变为增加偏移距离后的位置,例如,原来的位置是(8,6),调用函数linerel(10,18)后,当前位置为(18,24)。
返回值:
无
例:
下面的程序为画线函数调用实例:
#include
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()设置线型函数
功能:
setlinestyle()为画线函数设置当前线型,包括线型、线图样和线宽。
用法:
setlinestyle()函数调用方式为voidsetlinestyle(intstly,unsignedpattern,intwidth);
说明:
参数style为线型取值,也可以用相应名称表示,如表1-10中所示。
参数pattern用于自定义线图样,它是16位(bit)字,只有当style=USERBIT_LINE(值为1)时,pattern的值才有意义,使用用户自定义线图样,与图样中“1”位对应的像素显示,因此,pattern=0xFFFF,则画实线;pattern=0x9999,则画每隔两个像素交替显示的虚线,如果要画长虚线,那么pattern的值可为0xFF00和0xF00F,当style不为USERBIT_LINE值时,虽然pattern的值不起作用,但扔须为它提供一个值,一般取为0。
参数wigth用来设定线宽,其取值见表1-11,表中给出了两个值,即1和3,实际上,线宽取值为2也是可以接受的。
若用非法参数调用setlinestyle()函数,那么graphresult()会返回错误代码,并且当前线型继续有效。
TurboC提供的线型与线宽定义在头文件graphics.h中,表1-10和1-11分别列出了参数的取值与含义。
表1-10线型
-----------------------------------------------------
名称取值含义
-----------------------------------------------------
SOLID_LINE0实线
DOTTED_LINE1点线
CNTER_LINE2中心线
DASHED_LINE3虚线
USERBIT_LINE4用户自定义线型
-----------------------------------------------------
表1-11线宽
-----------------------------------------------------------
名称取值说明
-----------------------------------------------------------
NORM_WIDTH(常宽)1一个像素宽(缺省值)
THICK_WIDTH(加宽)3三个像素宽
-----------------------------------------------------------
这个函数的头文件是graphics.h
返回值:
无
例:
下面的程序显示了BC中所提供的线型图样:
#include
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.getlinesettings()获取线型设置函数
功能:
函数getlinesettings()用当前设置的线型、线图样和线宽填写linesettingstype型结构。
用法:
函数调用方式为voidgetlinesettings(structlinesettingstype*info);
说明:
此函数调用执行后,当前的线型、线图样和线宽值被装入info指向的结构里,从而可从该结构中获得线型设置。
linesettingstype型结构定义如下:
structlinesettingstype{
intlinestyle;
unsignedupattern;
intthickness;
};
其中linestyle用于存放线型,线型值为表1-10中的各值之一。
upattern用为装入用户自定义线图样,这是16位字,每一位等于一个像素,如果哪个位被设置,那么该像素打开,否则关闭。
thickness为线宽值存放的变量,可参见表1-11。
getlinesettings()函数对应的头文件为graphics.h
返回值:
返回的线型设置存放在info指向的结构中。
例:
把当前线型的设置写入info结构:
structlinesettingstypeinfo;
getlinesettings(&info);
63.setwritemode()设置画线模式函数
功能:
函数setwritemode()设置画线模式
用法:
函数调用方式为voidsetwritemode()(intmode);
说明:
参数mode只有两个取值0和1,若mode为0,则新画的线将复盖屏幕上原有的图形,此为缺省画线输出模式。
如果mode为1,那么新画的像素点与原有图形的像素点先进行异或(XOR)运算,然后输出到屏幕上,使用这种画线输出模式,第二次画同一图形时,将擦除该图形。
调用setwritemode()设置的画线输出模式只影响函数line(),lineto(),linerel(),recangle()和drawpoly()。
setwritemode()函数对应的头文件是graphics.h
返回值:
无
例:
设置画线输出模式为0:
setwritemode(0);
(三)、多边形函数
对多边形,无疑可用画直线函数来画出它,但直接提供画多边形的函数会给用户很大方便。
最常见的多边形有矩形、矩形块(或称条形)、多边形和多边形块,我们还把长方形条块也放到这里一起考虑,虽然它不是多边形,但它的特例就是矩形(块)。
下面直接介绍画多边形的函数。
64.rectangle()画矩形函数
功能:
函数rectangle()用当前绘图色、线型及线宽,画一个给定左上角与右下角的矩形(正方形或长方形)。
用法:
此函数调用方式为voidrectangle(intleft,inttop,intright,intbottom);
说明:
参数left,top是左上角点坐标,right,bottom是右下角点坐标。
如果有一个以上角点不在当前图形视口内,且裁剪标志clip设置的是真
(1),那么调用该函数后,只有在图形视口内的矩形部分才被画出。
这个函数对应的头文件为graphics.h
返回值:
无
例:
下面的程序画一些矩形实例:
#include
voidmain()
{
intdriver,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()画条函数
功能:
函数bar()用当前填充图样和填充色(注意不是给图色)画出一个指定上左上角与右下角的实心长条形(长方块或正方块),但没有四条边线)。
用法:
bar()函数调用方式为voidbar(intleft,inttop,intright,intbottom);
说明:
参数left,topright,bottom分别为左上角坐标与右下角坐标,它们和调用函数rectangle()的情形相同,调用此函数前,可用setfillstyle()或setfillpattern()设置当前填充图样和填充色。
注意此函数只画没有边线的条形,如果要画有边线的的条形,可调用下面的函数bar3d()来画,并将深度参数设为0,同时topflag参数要设置为真,否则该条形无顶边线。
这应的头文件为graphics.h
返回值:
无
例:
见函数bar3d()中的实例。
66.bar3d()画条块函数
功能:
函数bar3d()使用当前绘图色、线型及线宽画出三维长方形条块,并用当前填充图样和填充色填充该三维条块的表面。
用法:
此函数调用方式为voidbar3d(intleft,inttop,intright,intbottom,intdepth,inttopflag);
说明:
参数left,top,right,bottom分另为左上角与右下角坐标,这与bar()函数中的一样。
参数depth为条块的深度,以像素为单位,通常按宽度的四分之一计算。
深度方向通过屏显纵横比调节为约45度(即这时x/y比设置为1:
1)。
参数topflag相当于一个布尔参数,如果设置为1(真)那么条块上放一顶面;若设置为0(假),则三维条形就没有顶面,这样可使多个三维条形叠加在一起。
要使图形更加美观,可利用函数floodfill()或setfillpattern()来选择填充图样和填充色(参见本小节(五)填充函数)。
bar3d()函数对应的头文件为graphics.h
返回值:
无
例:
下面的程序画一个条形和条块:
#include
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();
}
(四)、圆、弧和曲线函数
在一个屏幕上画得很圆的图形到另一个屏幕上可能被压扁或拉长,这是因为每一种显示卡与之相应的显示模式都有一个纵横比。
纵横比是指像素的水平方向大小与垂直方向大小的比值。
如VGA显示卡由于偈素基本上是正方形,所以纵横比为1.000。
为了保证几何图形基本按预计情况显示在屏幕上,用屏显的纵横比来计算和纠正不同硬件及显示卡产生的畸变。
计算纵横比所需要的水平方向和垂直方向的比例系数可调用函数getaspectratio()获得。
69.circle()画圆函数
功能:
函数circle()使用当前绘图色并以实线画一个完整的圆。
用法:
该函数调用方式为voidcircle(intx,inty,intradius);
说明:
参数x,y为圆心坐标,radius为圆半径,用像素个素表示。
注意,调用circle()函数画圆时不用当前线型。
不同于ellipse()函数,只用单个半径radius参数调用circle()函数,故屏显纵横比可以自动调节,以产生正确的显示图。
此函数对应的头文件为graphics.h
返回值:
无
例:
画六个同心圆,圆心在(100,100)。
#include
voidmain()
{
intdriver,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()画圆弧函数
功能:
函数arc()使用当前绘图色并以实线画一圆弧。
用法:
函数调用方式为voidarc(intx,inty,intstartangle,intendangle,intradius);
说明:
参数x,y为圆心坐标,startangle与endangle分别为起始角与终止角,radius为半径。
圆心坐标和半径以像素个数给出,起始角和终止角以度为单位,0度位于右边,90度位于顶部,180度位于左边,底部是270度。
同往常一样,360度与0度重合。
角度按逆时针方向增加,但并不要求终止角一定比起始角大。
例如指定300度和90度分别为起始角和终止角,与指定300度和450度分别为起始角和终止角可画出相同的弧。
大于360度可作为参数,它将被化到0度 ̄360度范围里。
函数arc()能画封闭圆,只要取起始角为0度,终止角为360度即可。
此函数中,屏显纵横比可自动调节。
arc()函数对应的头文件为graphics.h
返回值:
无
例:
以(200,200)为圆心,100为半径,从0度到120度画圆弧:
#includevoidmain()
{
intdriver,mode;
driver=DETECT;
mode=0;
initgraph(&drivwer,&mode,"");
setcolor(WHITE);
arc(200,200,0,120,100);
getch();
restorecrtmode();
}
42.setbackcolor()设置背景颜色函数
43.setcolor()设置颜色函数
42.setbackcolor()设置背景颜色函数
功能:
函数setbackcolor()把当前调色板颜色的第一个值改成指定的颜色值,以设置背景颜色。
用法:
此函数调用方式为voidsetbackcolor(intcolor);
说明:
参数color为指定的背景色,其有效值可以是颜色符号名,也可以是色彩值。
表1-8列出了背景颜色供选取。
表1-8背景颜色值
-----------------------------------------------------------------
颜色符号名 色彩值 颜色符号名 色彩值
-----------------------------------------------------------------
BLACK(黑色) 0 DARKGRAY(深灰) 8
BLUE(蓝色) 1 LIGHTBLUE(淡蓝) 9
GREEN(绿色) 2 LIGHTGREEN(淡绿) 10
CYAN(青色) 3 LIGHTCYAN(淡青) 11
RED(红色) 4 LIGHTRED(淡红) 12
MAGENTA(品红) 5 LIGHTMAGENTA(粉红) 13
BROWN(棕色) 6 YELLOW(黄色) 14
LIGHTGRAY(淡灰) 7 WHITE(白色) 15
-----------------------------------------------------------------
调用该函数,将改变整个屏幕的颜色,如果新的背景色与原来屏幕的图形颜色相同,尽管图形信息不会丢失,但是看不见图形了。
如果所选背景色为对比鲜明的颜色,看不见的图形就会重新清晰地显现出来。
这个函数的头文件为graphics.h
返回值:
无
例:
把背景色置为淡蓝色
setbackcolor(LIGHTBLUE);
43.setcolor()设置颜色函数
功能:
函数setcolor()设置当前绘图颜色(或称做前景色)。
用法:
该函数调用方式为voidssetcolor(intcolor);
说明:
参数color为选择的当前绘图颜色。
在高分辨率显示模式下,选取的color是实际色彩值,也可以用颜色符号名表示。
如果已经摇篮函数setpalette()改变了调色板色彩值,那么符号名就不可能产生预期作用了。
在低分辨率显示模式(320X200)下,选取的color是调色板颜色号,不是实际色彩值。
此函数相应的头文件为graphics.h
返回值:
无
例:
设置16种不同的颜色,显示16段直线:
#include
voidmain()
{
intdriver,mode;
inti;
driver=DETECT;
mode=0;
initgraph(&driver,&mode,"");
moveto(0,200);
for(i=0;i<16;i++)
{
setcolor(i);
linerel(20,0);
}
getch();
restorecrtmode();
}
44、restorecrtmode();复原函数