1、VC+的图形库。分为:像素函数、直线和线型函数、多边形函数、填充函数等。像素函数56. putpixel() 画像素点函数57. getpixel()返回像素色函数直线和线型函数58. line() 画线函数59. lineto() 画线函数60. linerel() 相对画线函数61. setlinestyle() 设置线型函数62. getlinesettings() 获取线型设置函数63. setwritemode() 设置画线模式函数多边形函数64. rectangle() 画矩形函数65. bar() 画条函数66. bar3d() 画条块函数67. drawpoly() 画多边形函
2、数圆、弧和曲线函数68. getaspectratio()获取纵横比函数69. circle()画圆函数70. arc() 画圆弧函数71. ellipse()画椭圆弧函数72. fillellipse() 画椭圆区函数73. pieslice() 画扇区函数74. sector() 画椭圆扇区函数75. getarccoords()获取圆弧坐标函数填充函数76. setfillstyle() 设置填充图样和颜色函数77. setfillpattern() 设置用户图样函数78. floodfill() 填充闭域函数79. fillpoly() 填充多边形函数80. getfillsettin
3、gs() 获取填充设置函数81. getfillpattern() 获取用户图样设置函数图像函数82. imagesize() 图像存储大小函数83. getimage() 保存图像函数84. putimage() 输出图像函数图形和图像函数对许多图形应用程序,直线和曲线是非常有用的。但对有些图形只能靠操作单个像素才能画出。当然如果没有画像素的功能,就无法操作直线和曲线的函数。而且通过大规模使用像素功能,整个图形就可以保存、写、擦除和与屏幕上的原有图形进行叠加。(一) 像素函数putpixel() 画像素点函数功能: 函数putpixel() 在图形模式下屏幕上画一个像素点。用法: 函数调用方
4、式为void putpixel(int x,int y,int color);说明: 参数x,y为像素点的坐标,color是该像素点的颜色,它可以是颜色符号名,也可以是整型色 。函数相应的 是graphics.h返回 : 无: 在屏幕上(6,8) 画一个 色像素点:putpixel(6,8,RED);getpixel()返回像素色函数功能: 函数getpixel()返回像素点颜色 。用法: 该函数调用方式为int getpixel(int x,int y);说明: 参数x,y为像素点坐标。函数的返回 可以 色 , 取 调色 的设置 (参 setpalette()函数)。个函数相应的 为grap
5、hics.h返回 : 返回一个像素点色 。: 屏幕上(8,6)点的像素颜色 color。color=getpixel(8,6);( ) 直线和线型函数有 个画直线的函数, line(),lineto(),linerel()。 些直线使用整型坐标,相对 当图形,但 一currency1,如果“标clip为,fi直线fl 边如果clip为, 使点坐标的当置在图形屏幕”,直线 屏幕”。有 线 线型可,也可以线图样。下分 直线和线型函数。line() 画线函数功能: 函数line()使用当 图色、线型 线,在 的点画一直线。用法: 该函数调用方式为void line(int startx,int st
6、arty,int endx,int endy);说明: 参数startx,starty为点坐标,endx,endy为点坐标,函数调用,图形 下屏幕 标(一 可 )当置 。函数相应的 为graphics.h返回 : 无: 函数60.linerel() 的 。lineto() 画线函数功能: 函数lineto()使用当 图色、线型 线, 当置画一直线 置。用法: 函数调用方式为void lineto(int x,int y);说明: 参数x,y为 点的坐标,函数调用,当置 点(x,y)。该函数对应的 为graphics.h返回 : 无: 函数60.linerel() 的 。linerel() 相对
7、画线函数功能: 函数linerel() 使用当 图色、线型 线, 当置 , 的 和 直 画一直线。用法: 个函数调用方式为void linerel(int dx,int dy);说明: 参数dx,dy分 是 和 直 。函数调用,当置 为 加 的置, 如,原的置是(8,6),调用函数linerel(10,18),当置为(18,24)。返回 :无: 下的程序为画线函数调用 :i ncludevoid main()int driver,mode;driver=DETECT;mode=0;initgraph(setcolor(15);line(66,66,88,88);lineto(100,100);
8、linerel(36,64);getch();restorecrtmode();setlinestyle() 设置线型函数功能: setlinestyle() 为画线函数设置当线型, 线型、线图样和线。用法: setlinestyle() 函数调用方式为void setlinestyle(int stly,unsigned pattern,int width);说明: 参数style为线型取 ,也可以用相应名 ,如1-10 。参数pattern用 线图样,它是16(bit),只有当style=USERBIT_LINE( 为1) ,pattern的 才有 ,使用用户线图样,与图样 1”对应的像素
9、 , ,pattern=0xFFFF,画 线pattern=0x9999,画 个像素 的 线,如果 画 线,fipattern的 可为0xFF00和0xF00F,当style 为USERBIT_LINE ,然pattern的 作用,但为它 一个 ,一 取为0。参数wigth用设线, 取 1-11, 出 个 , 1和3, 上,线取 为2也是可以 的。若用非法参数调用setlinestyle()函数,figraphresult()会返回错误代码,且当线型继续有效。Turbo C 的线型与线在 graphics.h ,1-10和1-11分 列出 参数的取 与含。1-10 线型名 取 含SOLID_L
10、INE0 线DOTTED_LINE 1 点线CNTER_LINE2 心线DASHED_LINE 3 线USERBIT_LINE 4 用户线型1-11 线名 取 说 明NORM_WIDTH(常) 1 一个像素(缺省 )THICK_WIDTH(加) 3 个像素个函数的 是graphics.h返回 : 无: 下的程序 BC 的线型图样:i ncludevoid main()int driver,mode;i;driver=DETECT;mode=0;initgraph(for(i=0;ivoid main()int driver,mode;driver=DETECT;mode=0;initgrpah
11、(rectangle(80,80,220,200);rectangle(140,99,180,300);rectangle(6,6,88,88);rectangle(168,72,260,360);getch();restorecrtmode();bar() 画条函数功能: 函数bar()用当填充图样和填充色(注 是 图色)画出一个 上左上角与右下角的 心条形(方块正方块),但没有四条边线)。用法: bar()函数调用方式为void bar(int left,int top,int right,int bottom);说明: 参数left,topright,bottom分 为左上角坐标与右下角
12、坐标,它们和调用函数rectangle()的 形相同,调用 函数,可用setfillstyle()setfillpattern()设置当填充图样和填充色。注 函数只画没有边线的条形,如果 画有边线的的条形,可调用下的函数bar3d()画,fl深度参数设为0,同 topflag参数 设置为,否该条形无顶边线。应的 为graphics.h返回 : 无: 函数bar3d() 的 。bar3d() 画条块函数功能: 函数bar3d() 使用当 图色、线型 线画出 维方形条块,用当填充图样和填 充色填充该 维条块的。用法: 函数调用方式为void bar3d(int left,int top,int r
13、ight,int bottom,int depth,int topflag);说明: 参数left,top,right,bottom分另为左上角与右下角坐标, 与bar()函数 的一样。参数depth为条块的深度,以像素为单,通常 度的四分一计算。深度方向通过屏 纵横比调节为约45度( x/y比设置为1:1)。参数topflag相当 一个布尔参数,如果设置为1()fi条块上放一顶若设置为0( ), 维条形就没有顶, 样可使多个 维条形叠加在一。使图形更加美观,可利用函数floodfill()setfillpattern()填充图样和填充色(参 小节(五)填充函数 )。bar3d()函数对应的
14、为graphics.h返回 : 无: 下的程序画一个条形和条块:i ncludevoid main()int driver,mode;driver=DETECT;mode=0;initgraph(setfillstyle(SOLID-FILL,GREEN);bar(60,80,220,160);setfillstyle(SOLID-FILL,RED);bar3d(260,180,360,240,20,1);getch();restorecrtmode();drawpoly() 画多边形函数功能: 函数drawpoly() 用当 图色、线型 线,画一个 若干点的多边形。用法: 函数调用方式为vo
15、id drawpoly(int pnumber,int *points);说明: 参数pnumber为多边形的顶点数参数points 向整型数组,该数组 是多边形有顶点(x,y)坐标 , 一系列整数对,x坐标 在。 然整型数组的维数至少为顶点数的2倍,在 多边形有顶点的数组polypoints ,顶点数目可通过计算sizeof(polypoints)除以2倍的sizeof(int)得 , 里除以2倍的原 是 个顶点有个整数坐标 。另有一点 注 ,画一个n个顶点的闭合图形,顶点数必等 n+1,且最一点(第n+1)点坐标必等 第一点的坐标。drawpoly()函数对应的 为grpahics.h返回
16、 : 无: 下的程序画一个封闭星形图与一个 封闭星形图:i ncludevoid main()int driver,mode;static int polypoints118=100,100,110,120,100,130,120,125,140,140,130,120,140,110,120,115,100,100;static int polypoints218=180,100,210,120,200,130,220,125,240,140,230,120,240,110,220,115,220,110;driver=DETECT;mode=0;initgraph(drawpoly(9,p
17、olypoints1);drawpoly(9,polypoints2);getch();restorecrtmode();(四)、 圆、弧和曲线函数在一个屏幕上画得很圆的图形 另一个屏幕上可能被压扁拉, 是 为 一 卡与相应的 模式都有一个纵横比。纵横比是 像素的 方向大小与 直方向大小的比 。如VGA 卡由 偈素基 上是正方形,以纵横比为1.000。为 保证何图形基 预计 在屏幕上,用屏 的纵横比计算和纠正 同硬 卡产生的畸 。计算纵横比需 的 方向和 直方向的比 系数可调用函数getaspectratio()获得。getaspectratio()获取纵横比函数功能: 函数getaspect
18、ratio()返回x方向和y方向的比 系数,用 个整型 可计算某一特屏的纵横比。用法: 函数调用方式为void getaspectratio(int xasp,int yasp);说明: 参数xasp 向的 存放返回的x方向比 系数参数yasp 向的 存放返回的y方向比 系数。通常y方向比 系数为10 000, x方向比 系数 大 10 000( 是 为大多数屏幕像素高比)。注 纵横比动用作下函数arc(),circle()和pieslice() 的标尺 子,使屏幕上圆弧正常 。但用ellipse()函数画椭圆必调用 函数获取纵横比作为标尺 子,否 予调整。纵横比可用 它何图形,目的是校正和
19、图形。getaspectratio()函数对应的 为graphics.h返回 : 返回x与y方向比 系数分 存放在xasp和yasp 向的 。: 下的程序 纵横比:int xasp,yasp;float aspectratio;getaspectratio(aspectratio=xasp/yasp;printf(“aspect ratio: %f“,aspectratio);circle()画圆函数功能: 函数circle()使用当 图色以 线画一个完整的圆。用法:该函数调用方式为void circle(int x,int y,int radius);说明: 参数x,y为圆心坐标,radiu
20、s为圆半径,用像素个素。注 ,调用circle()函数画圆 用当线型。同 ellipse()函数,只用单个半径radius参数调用circle()函数,故屏 纵横比可以动调节,以产生正确的 图。函数对应的 为graphics.h返回 : 无: 画六个同心圆,圆心在(100,100)。i ncludevoid main()int driver,mode;driver=DETECT;mode=0;initgraph(circle(100,100,10);circle(100,100,20);circle(100,100,30);circle(100,100,40);circle(100,100,5
21、0);circle(100,100,60);getch();restorecrtmode();arc() 画圆弧函数功能: 函数arc()使用当 图色以 线画一圆弧。用法: 函数调用方式为void arc(int x,int y,int startangle,int endangle,int radius);说明: 参数x,y为圆心坐标,startangle与endangle分 为 角与止角,radius为半径。圆心坐标和半径以像素个数 出, 角和止角以度为单,0度 右边,90度 顶部,180度 左边,底部是270度。同往常一样,360度与0度重合。角度 逆 针方向 加,但 求止角一比角大。
22、如 300度和90度分 为 角和止角,与 300度和450度分 为 角和止角可画出相同的弧。大 360度可作为参数,它fl被化 0度360度范围里。函数arc()能画封闭圆,只 取 角为0度,止角为360度 可。 函数 ,屏 纵横比可动调节。arc()函数对应的 为graphics.h返回 : 无: 以(200,200)为圆心,100为半径, 0度 120度画圆弧:i ncludegraphics.hvoid main()int driver,mode;driver=DETECT;mode=0;initgraph(setcolor(WHITE);arc(200,200,0,120,100);g
23、etch();restorecrtmode();graphics.h 的内 :/* graphics.hDefinitions for Graphics Package.Copyright (c) Borland International 1987,1988All Rights Reserved.*/#if _STDC_#define _Cdecl#else#define _Cdecl cdecl#endif#if !defined(_GRAPHX_DEF_)#define _GRAPHX_DEF_enum graphics_errors /* graphresult error retur
24、n codes */grOk = 0,grNoInitGraph = -1,grNotDetected = -2,grFileNotFound = -3,grInvalidDriver = -4,grNoLoadMem = -5,grNoScanMem = -6,grNoFloodMem = -7,grFontNotFound = -8,grNoFontMem = -9,grInvalidMode = -10,grError = -11, /* generic error */grIOerror = -12,grInvalidFont = -13,grInvalidFontNum = -14,
25、grInvalidVersion = -18;enum graphics_drivers /* define graphics drivers */DETECT, /* requests autodetection */CGA, MCGA, EGA, EGA64, EGAMONO, IBM8514, /* 1 - 6 */HERCMONO, ATT400, VGA, PC3270, /* 7 - 10 */CURRENT_DRIVER = -1;enum graphics_modes /* graphics modes for each driver */CGAC0 = 0, /* 320x2
26、00 palette 0; 1 page */CGAC1 = 1, /* 320x200 palette 1; 1 page */CGAC2 = 2, /* 320x200 palette 2: 1 page */CGAC3 = 3, /* 320x200 palette 3; 1 page */CGAHI = 4, /* 640x200 1 page */MCGAC0 = 0, /* 320x200 palette 0; 1 page */MCGAC1 = 1, /* 320x200 palette 1; 1 page */MCGAC2 = 2, /* 320x200 palette 2;
27、1 page */MCGAC3 = 3, /* 320x200 palette 3; 1 page */MCGAMED = 4, /* 640x200 1 page */MCGAHI = 5, /* 640x480 1 page */EGALO = 0, /* 640x200 16 color 4 pages */EGAHI = 1, /* 640x350 16 color 2 pages */EGA64LO = 0, /* 640x200 16 color 1 page */EGA64HI = 1, /* 640x350 4 color 1 page */EGAMONOHI = 0, /*
28、640x350 64K on card, 1 page - 256K on card, 4 pages */HERCMONOHI = 0, /* 720x348 2 pages */ATT400C0 = 0, /* 320x200 palette 0; 1 page */ATT400C1 = 1, /* 320x200 palette 1; 1 page */ATT400C2 = 2, /* 320x200 palette 2; 1 page */ATT400C3 = 3, /* 320x200 palette 3; 1 page */ATT400MED = 4, /* 640x200 1 p
29、age */ATT400HI = 5, /* 640x400 1 page */VGALO = 0, /* 640x200 16 color 4 pages */VGAMED = 1, /* 640x350 16 color 2 pages */VGAHI = 2, /* 640x480 16 color 1 page */PC3270HI = 0, /* 720x350 1 page */IBM8514LO = 0, /* 640x480 256 colors */IBM8514HI = 1 /*1024x768 256 colors */;/* Colors for setpalette
30、and setallpalette */#if !defined(_COLORS)#define _COLORSenum COLORS BLACK, /* dark colors */BLUE,GREEN,CYAN,RED,MAGENTA,BROWN,LIGHTGRAY,DARKGRAY, /* light colors */LIGHTBLUE,LIGHTGREEN,LIGHTCYAN,LIGHTRED,LIGHTMAGENTA,YELLOW,WHITE;#endifenum CGA_COLORS CGA_LIGHTGREEN = 1, /* Palette C0 Color Names */
31、CGA_LIGHTRED = 2,CGA_YELLOW = 3,CGA_LIGHTCYAN = 1, /* Palette C1 Color Names */CGA_LIGHTMAGENTA = 2,CGA_WHITE = 3,CGA_GREEN = 1, /* Palette C2 Color Names */CGA_RED = 2,CGA_BROWN = 3,CGA_CYAN = 1, /* Palette C3 Color Names */CGA_MAGENTA = 2,CGA_LIGHTGRAY = 3;enum EGA_COLORS EGA_BLACK = 0, /* dark co
32、lors */EGA_BLUE = 1,EGA_GREEN = 2,EGA_CYAN = 3,EGA_RED = 4,EGA_MAGENTA = 5,EGA_BROWN = 20,EGA_LIGHTGRAY = 7,EGA_DARKGRAY = 56, /* light colors */EGA_LIGHTBLUE = 57,EGA_LIGHTGREEN = 58,EGA_LIGHTCYAN = 59,EGA_LIGHTRED = 60,EGA_LIGHTMAGENTA = 61,EGA_YELLOW = 62,EGA_WHITE = 63;enum line_styles /* Line s
33、tyles for get/setlinestyle */SOLID_LINE = 0,DOTTED_LINE = 1,CENTER_LINE = 2,DASHED_LINE = 3,USERBIT_LINE = 4, /* User defined line style */;enum line_widths /* Line widths for get/setlinestyle */NORM_WIDTH = 1,THICK_WIDTH = 3,;enum font_names DEFAULT_FONT = 0, /* 8x8 bit mapped font */TRIPLEX_FONT =
34、 1, /* “Stroked“ fonts */SMALL_FONT = 2,SANS_SERIF_FONT = 3,GOTHIC_FONT = 4;#define HORIZ_DIR 0 /* left to right */#define VERT_DIR 1 /* bottom to top */#define USER_CHAR_SIZE 0 /* user-defined char size */enum fill_patterns /* Fill patterns for get/setfillstyle */EMPTY_FILL, /* fills area in backgr
35、ound color */SOLID_FILL, /* fills area in solid fill color */LINE_FILL, /* - fill */LTSLASH_FILL, /* / fill */SLASH_FILL, /* / fill with thick lines */BKSLASH_FILL, /* fill with thick lines */LTBKSLASH_FILL, /* fill */HATCH_FILL, /* light hatch fill */XHATCH_FILL, /* heavy cross hatch fill */INTERLE
36、AVE_FILL, /* interleaving line fill */WIDE_DOT_FILL, /* Widely spaced dot fill */CLOSE_DOT_FILL, /* Closely spaced dot fill */USER_FILL /* user defined fill */;enum putimage_ops /* BitBlt operators for putimage */COPY_PUT, /* MOV */XOR_PUT, /* XOR */OR_PUT, /* OR */AND_PUT, /* AND */NOT_PUT /* NOT *
37、/;enum text_just /* Horizontal and vertical justificationfor settextjustify */LEFT_TEXT = 0,CENTER_TEXT = 1,RIGHT_TEXT = 2,BOTTOM_TEXT = 0,/* CENTER_TEXT = 1, already defined above */TOP_TEXT = 2;#define MAXCOLORS 15struct palettetype unsigned char size;signed char colorsMAXCOLORS+1;struct linesetti
38、ngstype int linestyle;unsigned upattern;int thickness;struct textsettingstype int font;int direction;int charsize;int horiz;int vert;struct fillsettingstype int pattern;int color;struct pointtype int x, y;struct viewporttype int left, top, right, bottom;int clip;struct arccoordstype int x, y;int xst
39、art, ystart, xend, yend;void far _Cdecl arc(int x, int y, int stangle, int endangle,int radius);void far _Cdecl bar(int left, int top, int right, int bottom);void far _Cdecl bar3d(int left, int top, int right, int bottom,int depth, int topflag);void far _Cdecl circle(int x, int y, int radius);void f
40、ar _Cdecl cleardevice(void);void far _Cdecl clearviewport(void);void far _Cdecl closegraph(void);void far _Cdecl detectgraph(int far *graphdriver,int far *graphmode);void far _Cdecl drawpoly(int numpoints, int far *polypoints);void far _Cdecl ellipse(int x, int y, int stangle, int endangle,int xradi
41、us, int yradius);void far _Cdecl fillellipse( int x, int y, int xradius, int yradius );void far _Cdecl fillpoly(int numpoints, int far *polypoints);void far _Cdecl floodfill(int x, int y, int border);void far _Cdecl getarccoords(struct arccoordstype far *arccoords);void far _Cdecl getaspectratio(int
42、 far *xasp, int far *yasp);int far _Cdecl getbkcolor(void);int far _Cdecl getcolor(void);struct palettetype * far _Cdecl getdefaultpalette( void );char * far _Cdecl getdrivername( void );void far _Cdecl getfillpattern(char far *pattern);void far _Cdecl getfillsettings(struct fillsettingstype far *fi
43、llinfo);int far _Cdecl getgraphmode(void);void far _Cdecl getimage(int left, int top, int right, int bottom,void far *bitmap);void far _Cdecl getlinesettings(struct linesettingstype far *lineinfo);int far _Cdecl getmaxcolor(void);int far _Cdecl getmaxmode(void);int far _Cdecl getmaxx(void);int far _
44、Cdecl getmaxy(void);char * far _Cdecl getmodename( int mode_number );void far _Cdecl getmoderange(int graphdriver, int far *lomode,int far *himode);unsigned far _Cdecl getpixel(int x, int y);void far _Cdecl getpalette(struct palettetype far *palette);int far _Cdecl getpalettesize( void );void far _C
45、decl gettextsettings(struct textsettingstype far *texttypeinfo);void far _Cdecl getviewsettings(struct viewporttype far *viewport);int far _Cdecl getx(void);int far _Cdecl gety(void);void far _Cdecl graphdefaults(void);char * far _Cdecl grapherrormsg(int errorcode);void far _Cdecl _graphfreemem(void
46、 far *ptr, unsigned size);void far * far _Cdecl _graphgetmem(unsigned size);int far _Cdecl graphresult(void);unsigned far _Cdecl imagesize(int left, int top, int right, int bottom);void far _Cdecl initgraph(int far *graphdriver,int far *graphmode,char far *pathtodriver);int far _Cdecl installuserdri
47、ver( char far *name, int huge (*detect)(void) );int far _Cdecl installuserfont( char far *name );void far _Cdecl line(int x1, int y1, int x2, int y2);void far _Cdecl linerel(int dx, int dy);void far _Cdecl lineto(int x, int y);void far _Cdecl moverel(int dx, int dy);void far _Cdecl moveto(int x, int
48、 y);void far _Cdecl outtext(char far *textstring);void far _Cdecl outtextxy(int x, int y, char far *textstring);void far _Cdecl pieslice(int x, int y, int stangle, int endangle,int radius);void far _Cdecl putimage(int left, int top, void far *bitmap, int op);void far _Cdecl putpixel(int x, int y, int color);void far _Cdecl rectangle(int left, int top, int right, int bottom);void far _Cdecl restorecrtmode(void);void far _Cdecl sector( int X, int Y, int StAngle, int EndAngle,int XRadius, int YRadius