43、C语言图形函数图型模式、画点、画线、位置函数

 

   Turbo C 提供了非常丰富的图形函数,所有图形函数的原型均在graphics. h 中,本节主要介绍图形模式的初始化、独立图形程序的建立、基本图形功能、图形窗口以及图形模式下的文本输出等函数。另外,使用图形函数时要确保有显示器图形驱动程序*BGI,同时将集成开发环境Options/Linker中的Graphics lib选为on,只有这样才能保证正确使用图形函数。图形模式的初始化不同的显示器适配器有不同的图形分辨率。即是同一显示器适配器,在不同模式下也有不同分辨率。因此,在屏幕作图之前,必须根据显示器适配器种类将显示器设置成为某种图形模式,在未设置图形模式之前,微机系统默认屏幕为文本模式(80列,25行字符模式),此时所有图形函数均不能工作。设置屏幕为图形模式,可用下列图形初始化函数:

  void far initgraph(int far *gdriver, int far *gmode,char*path);

  其中gdriver和gmode分别表示图形驱动器和模式,path是指图形驱动程序所在的目录路径。有关图形驱动器、图形模式的符号常数及对应的分辨率见如下叙述。

 

一、图形模式

1、函数名:initgraph

功  能:gdriver和gmode分别表示图形驱动器和图形模式,path是指图形驱动程序所在的目录路径。

用  法:voidfar initgraph(int far *gdriver, int far *gmode, char *path);

在这里必须在path目录下找到一个对应于gdriver的文件扩展名为.BGI的图形驱动程序(c语言编译器提供了对应各类适配器的不同图形驱动程序),然后对其设置模式gmode。

图形驱动器通常在TC根目录下或者根目录下面的BGI目录,以下给出一些图形驱动文件列表:

       ATT.BGI

       CGA.BGI(CGA模式)

       EGAVGA.BGI(EGAVGA模式)

       HERC.BGI

       IBM8514.BGI

       PC3270.BGI

    事实上现在我们最常用的是EGAVGA.BGI图形驱动文件,相对于其它几个图形驱动文件它出现的时间比较晚,因此所能达到的图形模式分辨率和色彩相对就更加高。以下给出图形驱动器、模式的符号常数及数值:

2、函数名:closegraph

功能:关闭图形模式

用法:voidfar closegraph(viod)

调用该函数后即退出图形状态而进入文本方式,并释放用于保存图形驱动程序和字体的系统内存。

还需要补充一点的是我们可以采用另一个函数同样达到让硬件自动检测图形驱动器和模式的效果,其调用格式为:

3、函数名:detectgraph

功能: 通过检测硬件确定图形驱动程序和模式

用法: void far detectgraph( int far *graphdriver, int far *gmode)

二、画点函数

 

     在图形模式下, 是按象元来定义坐标的。对VGA适配器, 它的最高分辨率为640x480,其中640为整个屏幕从左到右所有象元的个数, 480 为整个屏幕从上到下所有象元的个数。屏幕的左上角坐标为(0, 0), 右下角坐标为(639, 479), 水平方向从左到右为x轴正向, 垂直方向从上到下为y轴正向。TURBO C 的图形函数都是相对于图形屏幕坐标, 即象元来说的。

 

1、函数名:putpixel

       功 能: 在指定位置画一像素

       用 法: void farputpixel (int x, int y, int pixelcolor);

2、函数名:getpixel

       功 能: 取得指定像素的颜色

       用 法: int fargetpixel(int x, int y);

三、坐标位置的函数 

1、函数名:getmaxx

       功 能: 返回屏幕的最大x坐标

       用 法: int fargetmaxx(void);

       函数名: getmaxy

       功 能: 返回屏幕的最大y坐标

       用 法: int fargetmaxy(void);

       函数明: getx

       功 能: 返回当前图形位置的x坐标

       用 法: int fargetx(void);

       函数名: gety

       功 能: 返回当前图形位置的y坐标

       用 法: int fargety(void);

       函数名: moveto

       功 能: 将CP移到(x, y)

       用 法: void farmoveto(int x, int y);

       函数名: moverel

       功 能: 将当前位置(CP)移动一相对距离

       用 法: void farmoverel(int dx, int dy);

四、画线函数

1、函数名:line

       功 能: 在指定两点间画一直线

       用 法: void farline(int x0, int y0, int x1, int y1);

2、函数名:lineto

       功能:画一作从现行光标到点(x, y)的直线

    用法:void far lineto(int x, int y);

3、函数名:linerel

       功 能: 从当前位置点(CP)到与CP有一给定相对距离的点画一直线

       用 法: void farlinerel(int dx, int dy);

4、函数名:circle

       功 能: 在给定半径以(x, y)为圆心画圆

       用 法: void farcircle(int x, int y, int radius);

5、函数名:arc

       功 能: 画一弧线

       用 法: void fararc( int x,int y,int stangle,int endangle, int radius );

    以(x,y)为圆心, radius为半径, 从stangle开始到endangle结束(用度表示)画一段圆弧线。在TURBO C中规定x轴正向为0度, 逆时针方向旋转一周,依次为90, 180, 270和360度(其它有关函数也按此规定, 不再重述)。

6、函数名:ellipse

       功 能: 画一椭圆

       用 法: void farellipse( int x, int y, int stangle, int endangle, int xradius, int yradius);

    以(x, y)为中心, xradius, yradius为x轴和y轴半径, 从角stangle 开始到endangle结束画一段椭圆线, 当stangle=0, endangle=360时, 画出一个完整的椭圆。

7、函数名:rectangle

       功 能: 画一个矩形

       用 法: void farrectangle( int left, int top, int right, int bottom );

8、函数名:drawpoly

       功 能: 画多边形

       用 法: void fardrawpoly( int numpoints, int far *polypoints );

    画一个顶点数为numpoints,各顶点坐标由polypoints 给出的多边形。polypoints整型数组必须至少有2倍顶点数个无素。每一个顶点的坐标都定义为x,y, 并且x在前。值得注意的是当画一个封闭的多边形时, numpoints 的值取实际多边形的顶点数加一, 并且数组polypoints中第一个和最后一个点的坐标相同。

 

 

例1、使用图形初始化函数设置VGA高分辨率图形模式

     #include 

     int main()

     {

          int gdriver, gmode;

          gdriver=VGA;

          gmode=VGAHI;

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

          bar3d(100, 100, 300, 250, 50,1);       /*画一长方体*/

          getch();

          closegraph();

          return 0;

     }

例2、自动进行硬件测试后进行图形初始化

     #include 

     int main()

     {

          int gdriver, gmode;

          detectgraph(&gdriver,&gmode);     /*自动测试硬件*/

          printf("the graphics driver is%d, mode is %d\n", gdriver,

                 gmode);       /*输出测试结果*/

          getch();

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

                               /* 根据测试结果初始化图形*/

          bar3d(10, 10, 130, 250, 20, 1);

          getch();

          closegraph();

          return 0;

      }

上例程序中先对图形显示器自动检测, 然后再用图形初始化函数进行初始化

设置, 但Turbo C提供了一种更简单的方法,  即用gdriver= DETECT 语句后再跟

initgraph()函数就行了。采用这种方法后, 上例可改为:

     #include 

     int main()

     {

          int gdriver=DETECT, gmode;

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

          bar3d(50, 50, 150, 30, 1);

          getch();

          closegraph();

          return 0;

     }

例3:

    #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;

          registerbgidriver(EGAVGA_driver);

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

          setbkcolor(BLUE);

          cleardevice();

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

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

          getch();

          closegraph();

          return 0;

     }

 

 

  • 8
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值