⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 图形处理.01

📁 经典C教程,带所有ANSI C的库函数说明及例子
💻 01
📖 第 1 页 / 共 4 页
字号:
始化函数:
     void far initgraph(int far *gdriver, int far *gmode,
			       char *path);
    其中gdriver和gmode分别表示图形驱动器和模式,path是指图形
驱动程序所在的目录路径。有关图形驱动器、图形模式的符号常数及
对应的分辨率见下表。
    图形驱动程序由Turbo C出版商提供,文件扩展名为.BGI。 根据
不同的图形适配器有不同的图形驱动程序。例如对于EGA、 VGA 图形
适配器就调用驱动程序EGAVGA.BGI。	    图形驱动器、模式的符号常数及数值
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
图形驱动器(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            用于硬件测试
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    使用图形初始化函数设置VGA高分辨率图形模式#include <graphics.h>
int main()
{
  int gdriver, gmode;
  gdriver=VGA;
  gmode=VGAHI;
  initgraph(&gdriver, &gmode, "c:\\caic\\bgi");
  bar3d(100, 100, 300, 250, 50, 1);   /*画一长方体*/
  getch();
  closegraph();
  return 0;
 }
    有时编程者并不知道所用的图形显示器适配器种类,或者需要将
编写的程序用于不同图形驱动器,Turbo C 提供了一个自动检测显示
器硬件的函数,其调用格式为:     void far detectgraph(int *gdriver, *gmode);    其中gdriver和gmode的意义与上面相同。    自动进行硬件测试后进行图形初始化#include <graphics.h>
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:\\caic\\bgi");
			  /* 根据测试结果初始化图形*/
  bar3d(10, 10, 130, 250, 20, 1);
  getch();
  closegraph();
  return 0;
 }
    上例程序中先对图形显示器自动检测,然后再用图形初始化函数
进行初始化设置,但Turbo C提供了一种更简单的方法, 即用
gdriver=DETECT 语句后再跟initgraph()函数就行了。采用这种方法
后,上例可改为:#include <graphics.h>
int main()
{
  int gdriver=DETECT, gmode;
  initgraph(&gdriver, &gmode, "c:\\caic\\bgi");
  bar3d(50, 50, 150, 30, 50, 1);
  getch();
  closegraph();
  return 0;
 }
    另外,Turbo C 提供了退出图形状态的函数closegraph(),其调
用格式为:    void far closegraph(void);    调用该函数后可退出图形状态而进入文本方式( Turbo C 默认方
式),并释放用于保存图形驱动程序和字体的系统内存。独立图形运行程序的建立
    Turbo C对于用initgraph()函数直接进行的图形初始化程序,在
编译和链接时并没有将相应的驱动程序(*.BGI) 装入到执行程序,当
程序进行到intitgraph()语句时,再从该函数中第三个形式参数
char *path中所规定的路径中去找相应的驱动程序。若没有驱动程序,
则在C:\TC中去找,如C:\TC中仍没有或TC不存在,将会出现错误:
    BGI Error: Graphics not initialized (use 'initgraph')    因此,为了使用方便,应该建立一个不需要驱动程序就能独立运
行的可执行图形程序,Turbo C中规定用下述步骤(这里以EGA、VGA显
示器为例):
    1. 在C:\TC子目录下输入命令:BGIOBJ EGAVGA
       此命令将驱动程序EGAVGA.BGI转换成EGAVGA.OBJ的目标文件。
    2. 在C:\TC子目录下输入命令:TLIB LIB\GRAPHICS.LIB+EGAVGA
       此命令的意思是将EGAVGA.OBJ的目标模块装到GRAPHICS.LIB库文
       件中。
    3. 在程序中initgraph()函数调用之前加上一句:       registerbgidriver(EGAVGA_driver):
    该函数告诉连接程序在连接时把EGAVGA的驱动程序装入到用户的
执行程序中。
    经过上面处理,编译链接后的执行程序可在任何目录或其它兼容
机上运行。假设已作了前两个步骤,若再向例6中加
    registerbgidriver()函数则变成:#include<stdio.h>
#include<graphics.h>
int main()
{
  int gdriver=DETECT,gmode;
  registerbgidriver(EGAVGA_driver);
			  /*建立独立图形运行程序 */
  initgraph(gdriver, gmode,"c:\\caic\\bgi");
  bar3d(50,50,250,150,20,1);
  getch();
  closegraph();
  return 0;
 }
    上例编译链接后产生的执行程序可独立运行。
    如不初始化成EGA或CGA分辨率,而想初始化为CGA分辨率, 则只
需要将上述步骤中有EGAVGA的地方用CGA代替即可。屏幕颜色的设置和清屏函数
    对于图形模式的屏幕颜色设置,同样分为背景色的设置和前景色
的设置。在Turbo C中分别用下面两个函数。    设置背景色:    void far setbkcolor(int color);    设置作图色:    void far setcolor(int color);    其中color 为图形方式下颜色的规定数值,对EGA,VGA显示器适
配器,有关颜色的符号常数及数值见下表所示。
		 有关屏幕颜色的符号常数表
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 符号常数    数值     含义       符号常数    数值     含义
──────────────────────────────
 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种颜色的一种,但前景色
依赖于不同的调色板。共有四种调色板,每种调色板上有四种颜色可
供选择。不同调色板所对应的原色见下表。		   CGA调色板与颜色值表
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
       调色板                               颜色值
──────────────────────────────
 符号常数  数值            0         1         2         3
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    C0      0            背景       绿        红        黄
    C1      1            背景       青       洋红       白
    C2      2            背景      淡绿      淡红       黄
    C3      3            背景      淡青     淡洋红      白
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    清除图形屏幕内容使用清屏函数,其调用格式如下:    voide far cleardevice(void);    有关颜色设置、清屏函数的使用请看例8。#include<stdio.h>
#include<graphics.h>
int main()
{
  int gdriver, gmode, i;
  gdriver=DETECT;
  initgraph(&gdriver, &gmode, "c:\\caic\\bgi");     /*图形初始化*/
  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();
  return 0;
 }
    另外,TURBO C也提供了几个获得现行颜色设置情况的函数。    int far getbkcolor(void);      返回现行背景颜色值。    int far getcolor(void);        返回现行作图颜色值。    int far getmaxcolor(void);     返回最高可用的颜色值。基本图形函数
    基本图形函数包括画点,线以及其它一些基本图形的函数。本节
对这些函数作一全面的介绍。    一、画点
    1. 画点函数    void far putpixel(int x, int y, int color);    该函数表示有指定的象元画一个按color 所确定颜色的点。对于
颜色color的值可从表3中获得而对x, y是指图形象元的坐标。
    在图形模式下,是按象元来定义坐标的。对VGA适配器, 它的最
高分辨率为640x480,其中640为整个屏幕从左到右所有象元的个数,
480 为整个屏幕从上到下所有象元的个数。屏幕的左上角坐标为(0,
0),右下角坐标为(639, 479),水平方向从左到右为x 轴正向,垂直
方向从上到下为y轴正向。TURBO C的图形函数都是相对于图形屏幕坐
标,即象元来说的。
    关于点的另外一个函数是:    int far getpixel(int x, int y);    它获得当前点(x, y)的颜色值。    2. 有关坐标位置的函数    int far getmaxx(void);           返回x轴的最大值。    int far getmaxy(void);           返回y轴的最大值。    int far getx(void);          返回游标在x轴的位置。
    void far gety(void);         返回游标有y轴的位置。    void far moveto(int x, int y);    移动游标到(x, y)点,不是画点,在移动过程中亦画点。    void far moverel(int dx, int dy);    移动游标从现行位置(x, y)移动到(x+dx, y+dy)的位置,移动过
    程中不画点。
    二、画线
    1. 画线函数
    TURBO C提供了一系列画线函数,下面分别叙述:    void far line(int x0, int y0, int x1, int y1);    画一条从点(x0, y0)到(x1, y1)的直线。    void far lineto(int x, int y);    画一作从现行游标到点(x, y)的直线。    void far linerel(int dx, int dy);    画一条从现行游标(x,y)到按相对增量确定的点(x+dx, y+dy)的
    直线。
    void far circle(int x, int y, int radius);    以(x, y)为圆心,radius为半径,画一个圆。    void far arc(int x, int y, int stangle, int endangle,
	         int radius);    以(x,y)为圆心,radius为半径,从stangle开始到endangle结束
(用度表示)画一段圆弧线。在TURBO C中规定x轴正向为0 度,逆时针
方向旋转一周, 依次为90,180, 270和360度(其它有关函数也按此规
定,不再重述)。    void ellipse(int x, int y, int stangle, int endangle,
	         int xradius,int yradius);
    以(x, y)为中心,xradius,yradius为x轴和y轴半径,从角
stangle 开始到endangle结束画一段椭圆线,当stangle=0,
endangle=360时, 画出一个完整的椭圆。    void far rectangle(int x1, int y1, int x2, inty2);    以(x1, y1)为左上角,(x2, y2)为右下角画一个矩形框。    void far drawpoly(int numpoints, int far *polypoints);    画一个顶点数为numpoints,各顶点坐标由polypoints给出的多边
形。polypoints整型数组必须至少有2 倍顶点数个无素。每一个顶点
的坐标都定义为x,y,并且x在前。值得注意的是当画一个封闭的多边
形时,numpoints 的值取实际多边形的顶点数加一,并且数组
polypoints中第一个和最后一个点的坐标相同。
    下面举一个用drawpoly()函数画箭头的例子。#include<stdlib.h>
#include<graphics.h>
int main()
{
  int gdriver, gmode, i;
  int arw[16]={200,102,300,102,300,107,330,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -