TC图形函数

发布时间:2012-03-09 10:31:46   来源:文档文库   
字号:

TC图形函数

一、图形模式的初始化

微机系统默认屏幕为文本模式(80列,25行字符模式)。图形驱动程序由TurboC出版商提供,文件扩展名为.BGI。根据不同的图形适配器有不同的图形驱动程序。例如对于EGA VGA 图形适配器就调用驱动程序EGAVGA.BGI。所有图形函数的原型均在graphics. h ,使用图形函数时要确保有显示器图形驱动程序*.BGI

1.图形模式初始化函数:initgraph(int far *gdriver, int far *gmode,char *path);

2.自动检测显示器硬件的函数:detectgraph(int *gdriver, *gmode);

3.退图进文本释放内存函数:closegraph();

4.驱动程序装入函数:registerbgidriver(EGAVGA_driver)

5.背景色设置函数:setbkcolor(int color);

6.前景色(作图色)设置函数:setcolor(int color);

7.清除图形屏幕内容函数:cleardevice(void);

8.返回现行背景颜色值函数:getbkcolor(void);

9.返回现行作图颜色值函数:getcolor(void);

10.返回最高可用的颜色值函数:getmaxcolor(void);

1. #include

void Init(void);/*图形驱动函数说明*/

int main()

{

Init();/*调用图形驱动集成函数*/

bar(100,150,200,50);

pieslice(200,300,0,360,90);

sector(500,300,0,360,100,50);

getch();

closegraph();

return 0;

}

void Init(void)/*图形驱动集成函数*/

{

int gd=DETECT,gm;/*检测显卡驱动并赋值*/

registerbgidriver(EGAVGA_driver);/*建立独立图形运行程序 */

initgraph(&gd,&gm,"");/*启动图形驱动函数*/

cleardevice();/*清屏函数*/

}

2.置色与清屏函数应用:

#include

#include

int main()

{

int gdriver, gmode, i;

gdriver=DETECT;

initgraph(&gdriver, &gmode, ""); /*图形初始化*/

setbkcolor(0); /*设置图形背景*/

cleardevice();

for(i=0; i<=15; i++)

{

setcolor(i); /*设置不同作图色*/

circle(320, 240, 20+i*10); /*画半径不同的圆*/

delay(10000); /*延迟100毫秒*/

}

for(i=0; i<=15; i++)

{

setbkcolor(i); /*设置不同背景色*/

cleardevice();

circle(320, 240, 20+i*10);

delay(100000);

}

closegraph();

return 0;

}

二、光标操作函数

1.返回x轴的最大值函数:getmaxx(void);

2.返回y轴的最大值函数:getmaxy(void);

3.返回游标在x轴的位置函数:getx(void);

4.返回游标有y轴的位置函数:gety(void);

5.移动游标到(x, y)点,moveto(int x, int y);

6.移动游标从现行位置(x, y)移动到(x+dx, y+dy)的位置函数:moverel(int dx, int dy);

例句:moveto(20,40);lineto(60,80);moverel(140,220); /*光标到(200,300)*/

三、基本图形函数

1.画点函数 putpixel(int x, int y, int color);

2.获得当前点(x, y)的颜色值函数:getpixel(int x, int y);

3.直线函数:line(int x0, int y0, int x1, int y1);

4.从现行游标到点(x, y)的直线函数:lineto(int x, int y);

5.从现行游标(xy)到点(x+dx, y+dy)的直线函数:linerel(int dx, int dy);

例句:lineto(0,180);linerel(640,120);/*光标到(640,300)*/

6.(x, y)为圆心radius为半径的圆函数:circle(int x, int y, int radius);

7.(x,y)为圆心,radius为半径,从stangle开始到endangle结束()画一段圆弧线函数:

arc(x,y,stangle,endangle,radius);

8.(x, y)为中心,xradiusyradiusx轴和y轴半径,从角stangle 开始到endangle结束画一段椭圆线函数:ellipse(x,y,stangle,endangle,xradius,yradius);

9.矩形框函数:rectangle(x1,y1,x2,y2);

10.多边形函数:drawpoly(numpoints,*polypoints);

3.drawpoly()函数画箭头:

#include

#include

int main()

{

int gdriver, gmode, i;

int arw[16]={200,102,300,102,300,107,330,

100,300,93,300,98,200,98,200,102};

gdriver=DETECT;

initgraph(&gdriver, &gmode, "");

setbkcolor(BLUE);

cleardevice();

setcolor(12); /*设置作图颜色*/

drawpoly(8, arw); /*画一箭头*/

getch();

closegraph();

return 0;

}

变式练习(正五角星)

#include

#include

int main()

{

int gdriver, gmode, i;

int arw[22]={100,0,76,73,0,73,62,118,32,190,100,145,162,190,138,118,200,73,124,73,100,0};

gdriver=DETECT;

initgraph(&gdriver, &gmode, "");

setbkcolor(BLUE);

cleardevice();

setcolor(12); /*设置作图颜色*/

drawpoly(11, arw);

getch();

closegraph();

return 0;

}

11.设定线型函数:setlinestyle(linestyle,upattern,thickness);

有关线的形状(linestyle)

━━━━━━━━━━━━━━━━━━━━━━━━━

符号常数 数值 含义

─────────────────────────

SOLID_LINE 0 实线

DOTTED_LINE 1 点线

CENTER_LINE 2 中心线

DASHED_LINE 3 点画线

USERBIT_LINE 4 用户定义线

━━━━━━━━━━━━━━━━━━━━━━━━━

有关线宽(thickness)

━━━━━━━━━━━━━━━━━━━━━━━━━

符号常数 数值 含义

─────────────────────────

NORM_WIDTH 1 一点宽

THIC_WIDTH 3 三点宽

━━━━━━━━━━━━━━━━━━━━━━━━━

对于upattern,只有linestyleUSERBIT_LINE 时才有意义 (选其它线型,uppattern0即可)。此时uppattern16位二进制数的每一位代表一个象元,如果那位为1,则该象元打开,否则该象元关闭。例句:setlinestyle(4, 0x2184, 3);

4.有关线型设定和画线函数应用:

#include

#include

int main()

{

int gdriver, gmode, i;

gdriver=DETECT;

initgraph(&gdriver, &gmode, "");

setbkcolor(BLUE);

cleardevice();

setcolor(GREEN);

circle(320, 240, 98);

setlinestyle(0, 0, 3); /*设置三点宽实线*/

setcolor(2);

rectangle(220, 140, 420, 340);

setcolor(WHITE);

setlinestyle(4, 0x2184, 3);/*设置一点宽用户定义线*/

line(220, 240, 420, 240);

line(320, 140, 320, 340);

getch();

closegraph();

return 0;

}

12.getlinesettings(struct linesettingstypefar *lineinfo);

该函数将有关线的信息存放到由lineinfo 指向的结构中,linesettingstype的结构如下:

struct linesettingstype{

int linestyle;

unsigned upattern;

int thickness;

}

例如下面两句程序可以读出当前线的特性

struct linesettingstype info;

getlinesettings(&info);

5.函数getlinesettings应用

#include

#include

int main()

{

int gdriver, gmode, i;

struct linesettingstype info;

gdriver=DETECT;

initgraph(&gdriver, &gmode, "");

setbkcolor(BLUE);

cleardevice();

setcolor(GREEN);

circle(320, 240, 98);

setlinestyle(0, 0, 3); /*设置三点宽实线*/

setcolor(2);

rectangle(220, 140, 420, 340);

setcolor(WHITE);

setlinestyle(4, 0x2184, 3);/*设置一点宽用户定义线*/

line(220, 240, 420, 240);

line(320, 140, 320, 340);

getch();

getlinesettings(&info);

cleardevice(); /*清除图形屏幕内容*/

printf("\n");

printf("\n");

printf("\n");

printf("The linestyle is %d\tThe upattern is %x\tThe thickness is %d\t", info . linestyle , info . upattern , info . thickness );

getch();

clrscr();

getch();

return 0;

}

13.画线方式函数:setwritemode(int mode);

mode=0,表示画线时将所画位置的原来信息覆盖了(这是TURBO C的默认方式)。如果mode=1 则表示画线时用现在特性的线与所画之处原有的线进行异或(XOR)操作, 实际上画出的线是原有线与现在规定的线进行异或后的结果。因此,当线的特性不变,进行两次画线操作相当于没有画线。

6.函数setwritemode应用

#include

#include

int main()

{

int gdriver, gmode, i;

gdriver=DETECT;

initgraph(&gdriver, &gmode, "");

setbkcolor(15);

cleardevice();

setcolor(GREEN);

setcolor(1);

setlinestyle(0, 0, 3);

rectangle(220, 140, 420, 340);

line(220, 240, 420, 240);

setwritemode(1);

line(320, 140, 320, 340);

setwritemode(1);

setlinestyle(0, 0, 1);

setcolor(2);

line(220, 240, 420, 240);

line(320, 140, 320, 340);

getch();

return 0;

}

四、填充函数

1.填充式样颜色设置函数:setfillstyle(int pattern, int color);

关于填充式样pattern的规定

━━━━━━━━━━━━━━━━━━━━━━━━━━━

符号常数 数值 含义

───────────────────────────

EMPTY_FILL 0 以背景颜色填充

SOLID_FILL 1 color指定单色填充

LINE_FILL 2 以直线填充

LTSLASH_FILL 3 以斜线填充(阴影线)

SLASH_FILL 4 以粗斜线填充(粗阴影线)

BKSLASH_FILL 5 以粗反斜线填充(粗阴影线)

LTBKSLASH_FILL 6 以反斜线填充(阴影线)

HATCH_FILL 7 以直方网格填充

XHATCH_FILL 8 以斜网格填充

INTTERLEAVE_FILL 9 以间隔点填充

WIDE_DOT_FILL 10 以稀疏点填充

CLOSE_DOS_FILL 11 以密集点填充

USER_FILL 12 以用户定义式样填充 (另有函数)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━

USER_FILL(用户定义填充式样)以外,其它填充式样均可由setfillstyle() 函数设置。当选用USER_FILL时,该函数对填充图模和颜色不作任何改变。 之所以定义USER_FILL主要因为在获得有关填充信息时用到此项。例句:setfillstyle(1,8);

2.设置用户定义的填充图模及颜色函数:setfillpattern(char * upattern,int color);

upattern是一个指向8个字节的指针。这8个字节定义了8x8点阵的图形。每个字节的8位二进制数表示水平8点,8个字节表示8行,然后以此为模型向整个封闭区域填充。例句:char str[8]={0x18,0x24,0x42,0x81,0x81,0x42,0x24,0x18}; /*用户定义图模*/

setfillpattern(str, RED);

7.函数setfillpattern应用

#include

main()

{

int driver,mode;

static char diamond[8]={0x10,0x38,0x7c,0xfe,0x7c,0x38,0x10,0x00};

driver=DETECT;

mode=0;

initgraph(&driver,mode,"");

setcolor(GREEN);

rectangle(80,200,220,300);

setfillpattern(diamond,RED);

floodfill(160,260,GREEN);

getch();

restorecrtmode();

}

3.对任意封闭图形填充的函数:floodfill(x,y,border);

8floodfill应用border为边界颜色

#include

main()

{

int driver,mode;

driver=DETECT;

mode=0;

initgraph(&driver,&mode,"");

setbkcolor(9);

setcolor(14);

circle(100,100,10);

circle(100,100,20);

circle(100,100,30);

setfillstyle(1,12);

floodfill(100,125,14);

circle(100,100,40);

circle(100,100,50);

circle(100,100,60);

setfillstyle(1,4);

floodfill(100,135,14);

getch();

restorecrtmode();

}

变式练习

#include

#include

main()

{

int gdriver, gmode;

struct fillsettingstype save;

gdriver=DETECT;

initgraph(&gdriver, &gmode, "");

setbkcolor(BLUE);

setlinestyle(0,0,3);

setcolor(5);

bar3d(100,200,400,350,200,1); /*画长方体并填充*/

setfillstyle(1,11);

floodfill(450,300,5);

setfillstyle(1,14);

floodfill(250,150,5);

setfillstyle(1,8);

floodfill(200,300,5);

getch();

closegraph();

}

4.矩形窗口函数:bar(x1,y1,x2,y2); 无边框,

例句:setfillstyle(1,8);bar(100,150,200,50);

5.bar3d(x1,y1,x2,y2,depth,topflag);

topflag为非0, 画出一个三维的长方体。当topflag0时,三维图形不封顶,实际上很少这样使用。长方体第三维的方向始终为45度的方向。

6.pieslice(x,y,stangle,endangle,radius);

画一个以(x, y)为圆心,radius为半径,stangle为起始角度,endangle 为终止角度的扇形,再按规定方式填充。当stangle=0,endangle=360 时变成一个实心圆,并在圆内从圆点沿X轴正向画一条半径。

7.sector(x,y,stanle,endangle,xradius,yradius);

画一个以(x, y)为圆心分别以xradius, yradiusx轴和y轴半径,stangle 为起始角,endangle为终止角的椭圆扇形,再按规定方式填充。

8.获得现行图模数及颜色数函数:

getfillsetings(struct fillsettingstype far * fillinfo);

其中fillsettingstype结构定义如下:

struct fillsettingstype

{

int pattern; /* 现行填充模式 * /

int color; /* 现行填充模式 * /

};

9.函数getfillsetings应用

#include

main()

{

char str[8]={10,20,30,40,50,60,70,80}; /*用户定义图模*/

int gdriver,gmode,i;

struct fillsettingstype save;/*定义一个用来存储填充信息的结构变量*/

gdriver=DETECT;

initgraph(&gdriver,&gmode,"c:\\caic\\bgi");

setbkcolor(BLUE);

cleardevice();

setcolor(14);

setfillpattern(str, RED);

bar(100,150,200,50);

pieslice(200,300,0,360,90);

sector(500,300,0,360,100,50);

getch();

getfillsettings(&save);/*获得用户定义的填充模式信息*/

clrscr();

cleardevice(); /*清除图形屏幕内容*/

printf("\n");

printf("\n");

printf("\n");

printf("The pattern is %d, The color of filling is %d",save.pattern, save.color);/*输出目前填充图模和颜色值*/

getch();

}

9.获取用户图样设置函数:getfillpattern(char*pattern);

函数getfillpattern()返回上一次调用setfillpattern()设置的用户定义的填充图样,把定义当前用户填充图样的8个字节填入pattern所指向的数组,该数组必须至少8字节长,用户图样以88位字节的模式排列,如果还没有调用setfillpattern()设置用户定义的填充图样,那么函数将填入数组元素的值全为0xff。例句:

char fp[8];

getfillpattern(fp);

for(i=0;i<8;i++)printf(" %x\t",fp[i]);

10.自定义填充并读取

#include

main()

{

char fp[8];

int i,gd=DETECT,gm;

char str[8]={0x18,0x24,0x42,0x81,0x81,0x42,0x24,0x18}; /*用户定义图模*/

initgraph(&gd,&gm,"");

cleardevice();

setbkcolor(BLUE);

setfillpattern(str, RED);

bar(100,150,200,50);

getch();

clrscr();

cleardevice();

getfillpattern(fp);

printf("\n");

printf("\n");

printf("\n");

for(i=0;i<8;i++)printf(" %x\t",fp[i]);

getch();

closegraph();

}

10.fillpoly()填充多边形函数:fillpoly(intpointnum,int*points);

用当前绘图色、线型及线宽画出给定点的多边形,然后用当前填充图样和填充色填充这个多边形。与drawpoly()的一样,其参数含义相同。该函数中pointnum为所填充多边形的顶点数,points指向存放所有顶点坐标的整型数组。fillpoly()是通过连接起点和终点将图形封闭起来,然后填充被包围的区域。与floodfill()不同的是,fillpoly()所用的填充方法不依靠边界连续的轮廓来确定填充区域。这样间断的线型是允许的,并且可以很简单地填充多边形确定的区域,包括在新的边界范围内任何其它图形上重画。如果出错,graphresult()函数将返回错误代码-6(Scan填充内存不足)。头文件为graphics.h返回值:无
11:用红色间隔点填充一个等腰直角三角形:
#include

main()

{

int driver,mode;

static int points[]={100,100,100,200,200,200,100,100};

driver=DETECT;

mode=0;

initgraph(&driver,mode,"");

setfillstyle(INTERLEAVE_FILL,RED);

fillpoly(4,points);

getch();

restorecrtmode();

}

五、图形窗口操作函数

图形方式下也可以在屏幕上某一区域设定窗口,只是设定的为图形窗口而已,其后的有关图形操作都将以这个窗口的左上角(0, 0)作为坐标原点,而且可以通过设置使窗口之外的区域为不可接触。这样,所有的图形操作就被限定在窗口内进行。

1.setviewport(xl,yl,x2,y2,clipflag);

设定一个以(xl,yl)象元点为左上角,(x2,y2)象元为右下角的图形窗口,其中x1,y1,x2,y2是相对于整个屏幕的坐标。若 clipflag为非0,则设定的图形以外部分不可接触,若clipflag0,则图形窗口以外可以接触。

2.clearviewport(); 清除现行图形窗口的内容。

3.getviewsettings(struct viewporttype far * viewport);

获得关于现行窗口的信息,并将其存于viewporttype定义的结构变量viewport中,其中viewporttype的结构说明如下:

structviewporttype{

int left, top, right, bottom;

int cliplag;};

注意:

a.窗口颜色的设置与前面讲过的屏幕颜色设置相同,但屏幕背景色和窗口背景色只能是一种颜色,如果窗口背景色改变,整个屏幕的背景色也将改变。

b.可以在同一个屏幕上设置多个窗口,但只能有一个现行窗口工作,要对其它窗口操作,通过将定义那个窗口的setviewport()函数再用一次即可。

c.前面讲过图形屏幕操作的函数均适合于对窗口的操作。

12.

#include

main()

{

int gdriver, gmode, i;

gdriver=DETECT;

initgraph(&gdriver, &gmode, "");

setbkcolor(BLUE);

for(i=0;i<440;i++)

{

clearviewport();

setviewport(1.35*i,i,40+1.35*i,40+i,0);

setcolor(5);

setfillstyle(1,5);

circle(20,20,18);

floodfill(20,20,5);

delay(8000);

}

getch();

closegraph();

}

变式练习1

#include

#include

int main()

{

int gdriver, gmode, i;

int arw[22]={100,0,76,73,0,73,62,118,32,190,100,145,162,190,138,118,200,73,124,73,100,0};

gdriver=DETECT;

initgraph(&gdriver, &gmode, "");

setbkcolor(BLUE);

cleardevice();

for(i=0;i<200;i++)

{

clearviewport();

setviewport(1.35*i,i,200+1.35*i,200+i,0);

setcolor(5);

drawpoly(11, arw);

setfillstyle(1,5);

floodfill(100,100,5);

delay(800);

}

getch();

closegraph();

return 0;

}

变式练习2

#define N 0.2

#include

#include

int main()

{

int gdriver, gmode, i;

int arw[22]={100,0,76,73,0,73,62,118,32,190,100,145,162,190,138,118,200,73,124,73,100,0};

gdriver=DETECT;

initgraph(&gdriver, &gmode, "");

setbkcolor(BLUE);

cleardevice();

for(i=0;i<23;i++)arw[i]=arw[i]*N;

for(i=0;i<450;i++)

{

clearviewport();

setviewport(1.35*i,i,200*N+1.35*i,200*N+i,0);

setcolor(5);

drawpoly(11, arw);

setfillstyle(1,5);

floodfill(100*N,100*N,5);

delay(8000);

}

getch();

closegraph();

六、屏幕图像操作函数

1.测图像大小函数:unsigned far imagesize (xl,yl,x2,y2);

imagsize()返回存储一块屏幕图像所需的内存大小,若字节数大于64KB,则返回-1.

2.将指定区域图像存到指定内存函数:getimage(xl,yl,x2,y2,*buf);

3.将指定内存图像输出的屏幕指定位置函数:putimage (x,y,*buf,op);

左上角为点(x, y),参数op=0(复制)

━━━━━━━━━━━━━━━━━━━━━━━━━━

符号常数 数值

──────────────────────────

COPY_PUT 0 复制

XOR_PUT 1 与屏幕图像异或的复制

OR_PUT 2 与屏幕图像或后复制

AND_PUT 3 与屏幕图像与后复制

NOT_PUT 4 复制反像的图形

━━━━━━━━━━━━━━━━━━━━━━━━━━

例句: void *buf; int size;

size=imagesize(0,0,100,100);

buf=malloc(size);

if(!buf) return -1;

getimage(0,0,100,100,buf);

putimage(300, 200, buf, 0);

13.下面程序模拟两个小球动态碰撞过程。

#include

#include

#include

int main()

{

int i, gdriver, gmode, size;

void *buf;

gdriver=DETECT;

initgraph(&gdriver, &gmode, "");

setbkcolor(BLUE);

cleardevice();

setcolor(LIGHTRED);

setlinestyle(0,0,1);

setfillstyle(1, 10);

circle(100, 200, 30);

floodfill(100, 200, 12);

size=imagesize(69, 169, 131, 231);

buf=malloc(size);

if(!buf) return -1;

getimage(69, 169, 131, 231,buf);

putimage(500, 269, buf,0);

for(i=0; i<185; i++){

putimage(70+i, 170, buf, 0);

putimage(500-i, 170, buf,0);

delay(500);

}

for(i=0;i<185; i++){

putimage(255-i, 170, buf,0);

putimage(315+i, 170, buf,0);

}

getch();

closegraph();

}

变式练习1

#include

#include

#include

int main()

{

int i, gdriver, gmode, size;

void *buf;

gdriver=DETECT;

initgraph(&gdriver, &gmode, "");

setbkcolor(BLUE);

setcolor(5);

setlinestyle(0,0,2);

setfillstyle(1, 5);

circle(100, 200, 30);

floodfill(100, 200, 5);

size=imagesize(69, 169, 131, 231);

buf=malloc(size);

if(!buf) return -1;

getimage(69, 169, 131, 231,buf);

for(i=0; i<600; i=i+2){

putimage(10+i, 170, buf, COPY_PUT);

delay(5000);

}

getch();

closegraph();

}

变式练习2

#include

#include

#include

main()

{

int driver,mode;

unsigned size;

void *buf;

driver=DETECT;

mode=0;

initgraph(&driver,&mode,"");

rectangle(20,20,200,200);

setcolor(RED);

line(20,20,200,200);

setcolor(GREEN);

line(20,200,200,20);

getch();

size=imagesize(20,20,200,200);

if(size!=-1){

buf=malloc(size);

if(buf){

getimage(20,20,200,200,buf);

putimage(100,100,buf,0);

putimage(300,50,buf,0);

}

}

outtext("pressakey");

getch();

restorecrtmode();

}

附:操作页面函数

1.setvisualpage(pagenum)

页面从0开始(Turbo C默认页)1,23。使指定的页面变成可见页函数,只用于EGA,VGA 以及HERCULES图形适配器。EGA/3/EGALO/0/16640*2004page,VGA/9/VGAMED/1/16640*3502page,/VGAHI/2/16640*480只有1 page.所以无效不可用。

2.setactivepage(pagenum);

如果先用setactivepage() 函数在不同页面上画出一幅幅图像,再用函数交替显示,就可以实现一些动画的效果。(见变式练习)

14.不同的页面地址不同不可用(目前电脑上)

#include

main()

{

int i,gd,gm;

gd=DETECT;

initgraph(&gd,&gm,"");

cleardevice();

for(i=0;i<3;i=i+1)

{

setvisualpage(0);

cleardevice();

setbkcolor(0);

setfillstyle(1,5);

bar(0,0,320,240);

setfillstyle(1,9);

bar(320,0,640,240);

setfillstyle(1,12);

bar(0,240,320,480);

setfillstyle(1,14);

bar(320,240,640,480);

delay(50000);

getch();

setvisualpage(1);

cleardevice();

setbkcolor(0);

setfillstyle(1,5);

bar(0,0,320,240);

setfillstyle(1,9);

bar(320,0,640,240);

setfillstyle(1,12);

bar(0,240,320,480);

setfillstyle(1,14);

bar(320,240,640,480);

delay(50000);

getch();

setvisualpage(2);

cleardevice();

setbkcolor(0);

setfillstyle(1,5);

bar(0,0,320,240);

setfillstyle(1,9);

bar(320,0,640,240);

setfillstyle(1,12);

bar(0,240,320,480);

setfillstyle(1,14);

bar(320,240,640,480);

delay(50000);

getch();

setvisualpage(3);

cleardevice();

setbkcolor(0);

setfillstyle(1,5);

bar(0,0,320,240);

setfillstyle(1,9);

bar(320,0,640,240);

setfillstyle(1,12);

bar(0,240,320,480);

setfillstyle(1,14);

bar(320,240,640,480);

delay(50000);

getch();

}

getch();

closegraph();

}

变式练习1

#include

#include

#include

#include

int main(void)

{

/*选择驱动程序和支持的模式多个页面*/

int gdriver=EGA,gmode=EGAHI,errorcode;

int x, y, ht;

/*图形和局部变量初始化*/

initgraph(&gdriver, &gmode, "");

/*读取初始化的结果*/

errorcode = graphresult();

if (errorcode!=grOk)

/*出现了一个错误*/

{

printf("Graphics error: %s\n", grapherrormsg(errorcode));

printf("Press any key to halt:");

getch();

exit(1);

/*终止一个错误代码*/

}

x=getmaxx()/2;

y=getmaxy()/2;

ht=textheight("W");

/*选择关闭屏幕为绘图页*/

setactivepage(1);

/*绘制一条直线在#1页上*/

line(0,0,getmaxx(),getmaxy());

/*输出消息#1*/

settextjustify(CENTER_TEXT, CENTER_TEXT);

outtextxy(x, y, "This is page #1:");

outtextxy(x, y+ht, "Press any key to halt:");

/*选择绘图页#0*/

setactivepage(0);

/*输出一个#0页上的信息*/

outtextxy(x, y, "This is page #0.");

outtextxy(x, y+ht, "Press any key to view page #1:");

getch();

/*选择作为可见页面的页面#1*/

setvisualpage(1);

/*清理*/

getch();

closegraph();

return 0;

}

变式练习2

#include

#include

#include

#include

#include

#include

main()

{

int gdriver,gmode;

gdriver=DETECT;/*gmode=EGAHI;*/

initgraph(&gdriver,&gmode,NULL);

printf("\n\t%d\t%d",gmode,gdriver);

setbkcolor(0);

setactivepage(0);

rectangle(2,2,190,110);

setactivepage(1);

setcolor(4);

moveto(0,0);

linerel(450,490);

getch();

setvisualpage(0);

getch();

setvisualpage(1);

getch();

closegraph();

}

变式练习3

#include

#include

#include

#include

#include

#include

main()

{

int gdriver,gmode;

gdriver=DETECT;

initgraph(&gdriver,&gmode,"");

printf("\n\n\n\t%d\t%d",gmode,gdriver);

setbkcolor(4);

setactivepage(0);

rectangle(20,20,190,110);

setactivepage(1);

setcolor(4);

moveto(0,0);

linerel(450,490);

getch();

setvisualpage(0);

getch();

setvisualpage(1);

getch();

closegraph();

}

附:图形驱动器、模式的符号常数及数值:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

图形驱动器(gdriver) 图形模式(gmode)

────────────────────────── 色调 分辨率

符号常数 数值 符号常数 数值

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

CGA 1 CGAC0 0 C0 320*200

CGAC1 1 C1 320*200

CGAC2 2 C2 320*200

CGAC3 3 C3 320*200

CGAHI 4 2 640*200

───────────────────────────────────────

MCGA 2 MCGAC0 0 C0 320*200

MCGAC1 1 C1 320*200

MCGAC2 2 C2 320*200

MCGAC3 3 C3 320*200

MCGAMED 4 2 640*200

MCGAHI 5 2 640*480

───────────────────────────────────────

EGA 3 EGALO 0 16 640*200

EGAHI 1 16 640*350

───────────────────────────────────────

EGA64 4 EGA64LO 0 16 640*200

EGA64HI 1 4 640*350

───────────────────────────────────────

EGAMON 5 EGAMONHI 0 2 640*350

───────────────────────────────────────

IBM8514 6 IBM8514LO 0 256 640*480

IBM8514HI 1 256 1024*768

───────────────────────────────────────

HERC 7 HERCMONOHI 0 2 720*348

───────────────────────────────────────

ATT400 8 ATT400C0 0 C0 320*200

ATT400C1 1 C1 320*200

ATT400C2 2 C2 320*200

ATT400C3 3 C3 320*200

ATT400MED 4 2 320*200

ATT400HI 5 2 320*200

───────────────────────────────────────

VGA 9 VGALO 0 16 640*200

VGAMED 1 16 640*350

VGAHI 2 16 640*480

───────────────────────────────────────

PC3270 10 PC3270HI 0 2 720*350

───────────────────────────────────────

DETECT 0 用于硬件测试

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

图形操作信息名称   代码   含义  
grOK 0 成功

grNoInitGraph -1 没有图形初始化

grNoDetected -2 没有检测到图形硬件

grFileNoFound -3 没有找到图形驱动文件

grInvalidDriver -4 无效图形驱动程序

grNoLoadMem -5 没有足够内存装入图形驱动程序

grNoScanMem -6 Scan填充内存不足

grNoFloadMem -7 Flood填充内存不足

grFontNotFound -8 没有找到字体文件

grNoFontMem -9 没有足够内存用于装字体文件

grInvalidMode -10 无效图形模式

grError -11 一般图形错误

grIOerror -12 输入输出错误

grInvalidFont -13 无效字体文件

-14 无效字体号

grInvalidDeviceNum -15 无效设备号

本文来源:https://www.2haoxitong.net/k/doc/95d2cbfe770bf78a652954fe.html

《TC图形函数.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式