图形基本知识.docx

上传人:b****6 文档编号:5965805 上传时间:2023-01-02 格式:DOCX 页数:18 大小:29.62KB
下载 相关 举报
图形基本知识.docx_第1页
第1页 / 共18页
图形基本知识.docx_第2页
第2页 / 共18页
图形基本知识.docx_第3页
第3页 / 共18页
图形基本知识.docx_第4页
第4页 / 共18页
图形基本知识.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

图形基本知识.docx

《图形基本知识.docx》由会员分享,可在线阅读,更多相关《图形基本知识.docx(18页珍藏版)》请在冰豆网上搜索。

图形基本知识.docx

图形基本知识

图形函数

    TurboC提供了非常丰富的图形函数,所有图形函数的原型均在graphics.h

中,本节主要介绍图形模式的初始化、独立图形程序的建立、基本图形功能、图

形窗口以及图形模式下的文本输出等函数。

另外,使用图形函数时要确保有显示

器图形驱动程序*BGI,同时将集成开发环境Options/Linker中的Graphicslib选

为on,只有这样才能保证正确使用图形函数。

    1.图形模式的初始化

    不同的显示器适配器有不同的图形分辨率。

即是同一显示器适配器,在不同

模式下也有不同分辨率。

因此,在屏幕作图之前,必须根据显示器适配器种类将

显示器设置成为某种图形模式,在未设置图形模式之前,微机系统默认屏幕为文

本模式(80列,25行字符模式),此时所有图形函数均不能工作。

设置屏幕为图形

模式,可用下列图形初始化函数:

     voidfarinitgraph(intfar*gdriver,intfar*gmode,char*path);

    其中gdriver和gmode分别表示图形驱动器和模式,path是指图形驱动程序所

在的目录路径。

有关图形驱动器、图形模式的符号常数及对应的分辨率见表2。

    图形驱动程序由TurboC出版商提供,文件扩展名为.BGI。

根据不同的图形

适配器有不同的图形驱动程序。

例如对于EGA、VGA图形适配器就调用驱动程序

EGAVGA.BGI。

               表2.图形驱动器、模式的符号常数及数值

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

     图形驱动器(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            用于硬件测试

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

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

     #include

     intmain()

     {

          intgdriver,gmode;

          gdriver=VGA;

          gmode=VGAHI;

          initgraph(&gdriver,&gmode,"c:

\\tc");

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

          getch();

          closegraph();

          return0;

     }

    有时编程者并不知道所用的图形显示器适配器种类,或者需要将编写的程序

用于不同图形驱动器,TurboC提供了一个自动检测显示器硬件的函数,  其调用

格式为:

     voidfardetectgraph(int*gdriver,*gmode);

    其中gdriver和gmode的意义与上面相同。

  

    例5.自动进行硬件测试后进行图形初始化

     #include

     intmain()

     {

          intgdriver,gmode;

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

          printf("thegraphicsdriveris%d,modeis%d\n",gdriver,

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

          getch();

          initgraph(&gdriver,&gmode,"c:

\\tc");

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

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

          getch();

          closegraph();

          return0;

      }

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

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

initgraph()函数就行了。

采用这种方法后,上例可改为:

  

    例6.

     #include

     intmain()

     {

          intgdriver=DETECT,gmode;

          initgraph(&gdriver,&gmode,"c:

\\tc");

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

          getch();

          closegraph();

          return0;

     }

    另外,TurboC提供了退出图形状态的函数closegraph(),其调用格式为:

     voidfarclosegraph(void);

    调用该函数后可退出图形状态而进入文本方式(TurboC默认方式),并释放

用于保存图形驱动程序和字体的系统内存。

    2.独立图形运行程序的建立

    TurboC对于用initgraph()函数直接进行的图形初始化程序,在编译和链接

时并没有将相应的驱动程序(*.BGI)装入到执行程序,当程序进行到intitgraph()

语句时,再从该函数中第三个形式参数char*path中所规定的路径中去找相应的

驱动程序。

若没有驱动程序,则在C:

\TC中去找,如C:

\TC中仍没有或TC不存在,

将会出现错误:

     BGIError:

Graphicsnotinitialized(use'initgraph')

    因此,为了使用方便,应该建立一个不需要驱动程序就能独立运行的可执行

图形程序,TurboC中规定用下述步骤(这里以EGA、VGA显示器为例):

    1.在C:

\TC子目录下输入命令:

BGIOBJEGAVGA

    此命令将驱动程序EGAVGA.BGI转换成EGAVGA.OBJ的目标文件。

    2.在C:

\TC子目录下输入命令:

TLIBLIB\GRAPHICS.LIB+EGAVGA

    此命令的意思是将EGAVGA.OBJ的目标模块装到GRAPHICS.LIB库文件中。

    3.在程序中initgraph()函数调用之前加上一句:

       registerbgidriver(EGAVGA_driver):

该函数告诉连接程序在连接时把EGAVGA的驱动程序装入到用户的执行程序中。

    经过上面处理,编译链接后的执行程序可在任何目录或其它兼容机上运行。

假设已作了前两个步骤,若再向例6中加registerbgidriver()函数则变成:

    例7:

     #include

     #include

     intmain()

     {

         intgdriver=DETECT,gmode;

         registerbgidriver(EGAVGA_driver):

  /*建立独立图形运行程序*/

         initgraph(gdriver,gmode,"c:

\\tc");

         bar3d(50,50,250,150,20,1);

         getch();

         closegraph();

         return0;

     }

    上例编译链接后产生的执行程序可独立运行。

    如不初始化成EGA或CGA分辨率,而想初始化为CGA分辨率,  则只需要将上述

步骤中有EGAVGA的地方用CGA代替即可。

    3.屏幕颜色的设置和清屏函数

    对于图形模式的屏幕颜色设置,同样分为背景色的设置和前景色的设置。

TurboC中分别用下面两个函数。

    设置背景色:

        voidfarsetbkcolor(intcolor);

    设置作图色:

        voidfarsetcolor(intcolor);

    其中color为图形方式下颜色的规定数值,对EGA,VGA显示器适配器,有关

颜色的符号常数及数值见下表所示。

                表3有关屏幕颜色的符号常数表

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

  符号常数      数值     含义           符号常数      数值     含义

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

  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      白色

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

    对于CGA适配器,背景色可以为表3中16种颜色的一种,但前景色依赖于不同

的调色板。

共有四种调色板,每种调色板上有四种颜色可供选择。

不同调色板所

对应的原色见表4。

               表4CGA调色板与颜色值表

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

       调色板                               颜色值

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

  符号常数    数值              0         1         2         3

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

      C0       0               背景       绿        红        黄

      C1       1               背景       青       洋红       白

      C2       2               背景      淡绿      淡红       黄

      C3       3               背景      淡青     淡洋红      白

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

    清除图形屏幕内容使用清屏函数,其调用格式如下:

     voidefarcleardevice(void);

    有关颜色设置、清屏函数的使用请看例8。

    例8:

     #include

     #include

     intmain()

     {

          intgdriver,gmode,i;

          gdriver=DETECT;

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

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

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

          cleardevice();

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

          {

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

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

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

          }

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

          {

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

             cleardevice();

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

             delay(100);

          }

          closegraph();

          return0;

     }

    另外,TURBOC也提供了几个获得现行颜色设置情况的函数。

    intfargetbkcolor(void);      返回现行背景颜色值。

    intfargetcolor(void);        返回现行作图颜色值。

    intfargetmaxcolor(void);     返回最高可用的颜色值。

    4.基本图形函数

    基本图形函数包括画点,线以及其它一些基本图形的函数。

本节对这些函数

作一全面的介绍。

    一、画点

    1.画点函数

     voidfarputpixel(intx,inty,intcolor);

    该函数表示有指定的象元画一个按color所确定颜色的点。

对于颜色color的

值可从表3中获得而对x,y是指图形象元的坐标。

    在图形模式下,是按象元来定义坐标的。

对VGA适配器,  它的最高分辨率为

640x480,其中640为整个屏幕从左到右所有象元的个数,480为整个屏幕从上到

下所有象元的个数。

屏幕的左上角坐标为(0,0),右下角坐标为(639,479),水

平方向从左到右为x轴正向,垂直方向从上到下为y轴正向。

TURBOC的图形函数

都是相对于图形屏幕坐标,即象元来说的。

    关于点的另外一个函数是:

     intfargetpixel(intx,inty);

    它获得当前点(x,y)的颜色值。

    2.有关坐标位置的函数

     intfargetmaxx(void);

    返回x轴的最大值。

     intfargetmaxy(void);

    返回y轴的最大值。

     intfargetx(void);

    返回游标在x轴的位置。

     voidfargety(void);

    返回游标有y轴的位置。

     voidfarmoveto(intx,inty);

    移动游标到(x,y)点,不是画点,在移动过程中亦画点。

     voidfarmoverel(intdx,intdy);

    移动游标从现行位置(x,y)移动到(x+dx,y+dy)的位置,移动过程中不画点。

  

    二、画线

    1.画线函数

    TURBOC提供了一系列画线函数,下面分别叙

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1