graphics.h 是一个非常经典的、用于在 DOS 和 Windows 环境下创建图形用户界面和进行图形绘制的 C 语言函数库,它由 Borland 公司在其 Turbo C/C++ 编译器中推广,因此也常被称为 "BGI" (Borland Graphics Interface)。

尽管在现代开发中(如 Windows 10/11 的 64 位系统)直接使用 graphics.h 已经变得非常困难,但它作为学习计算机图形学基础和编程历史的入门工具,仍然有其独特的价值。
graphics.h 的核心特点
- 平台依赖性强:它主要设计用于 DOS 和早期的 Windows 系统(16/32位),在当今的 64 位系统上,标准编译器(如 MinGW, GCC, MSVC)通常不直接支持它。
- 简单易学:提供了非常直观的函数,如
circle(),line(),rectangle()等,让初学者能快速上手,理解图形编程的基本概念。 - 底层操作:它允许你直接操作像素,设置颜色,绘制基本图形,是理解图形渲染原理的好工具。
- 历史意义:它是许多程序员图形编程的启蒙库,了解它有助于理解图形学的发展。
如何在现代环境中使用 graphics.h?
由于 graphics.h 不是标准库,我们需要一些“变通”方法才能在今天的电脑上运行它。
使用在线编译器(最简单)
这是体验 graphics.h 最简单、最推荐的方式,无需任何本地配置。
- 访问在线 C 编译器:TutorialsPoint Online C Compiler 或 Replit。
- 包含头文件:在代码中
#include <graphics.h>。 - 注意:这些在线编译器通常已经预装了
graphics.h的模拟环境,你可以直接编写和运行代码。
使用 DOSBox 模拟器(最经典)
如果你想体验最原汁原味的 Turbo C 环境,这是最好的方法。

- 安装 DOSBox:从 DOSBox 官网 下载并安装。
- 获取 Turbo C/C++:在网上搜索 "Turbo C++ 3.0 for DOS" 或类似关键词,下载其安装文件(通常是
install.exe)。 - 在 DOSBox 中安装和运行:
- 将 Turbo C 的安装文件拖入 DOSBox 窗口,它会自动开始安装,安装路径建议设置为
C:\TC。 - 安装完成后,在 DOSBox 中输入:
mount c c:\tc // 将你的 C 盘映射到 DOSBox 的 C 盘 c: // 切换到 C 盘 tc // 运行 Turbo C 编译器
- 在 Turbo C 的集成环境中,你就可以编写包含
graphics.h的代码并编译运行了。
- 将 Turbo C 的安装文件拖入 DOSBox 窗口,它会自动开始安装,安装路径建议设置为
使用第三方库(如 WinBGIm)
如果你想在现代的 Windows C/C++ 开发环境(如 Visual Studio, Code::Blocks)中使用,可以使用 WinBGIm 库,它是 graphics.h 在 Windows 下的一个移植版本。
- 下载 WinBGIm:从 Colorado State University 的官网 下载
winbgim.zip。 - 配置开发环境(以 Code::Blocks 为例):
- 解压
winbgim.zip,你会得到winbgim.h和libbgi.a等文件。 - 将
winbgim.h复制到你的 Code::Blocks 的include文件夹。 - 将
libbgi.a复制到你的 Code::Blocks 的lib文件夹。 - 在 Code::Blocks 中创建一个新的项目,在项目设置(Build options -> Linker settings)中,将
libbgi.a添加到链接器选项中。
- 解压
- 编写代码:代码写法和经典
graphics.h基本一致。
核心概念和常用函数
graphics.h 的编程通常遵循一个固定的流程。
核心概念
- 图形模式:与文本模式相对,在文本模式下,屏幕只能显示字符;在图形模式下,屏幕由像素点组成,可以绘制各种图形。
- 显示器驱动:不同的显卡需要不同的驱动程序。
graphics.h需要一个特定的驱动(如EGAVGA.BGI)来工作。 - 坐标系统:屏幕的左上角是坐标原点 (0, 0),X 轴向右为正,Y 轴向下为正。
编程基本流程
- 包含头文件:
#include <graphics.h> - 初始化图形模式:使用
initgraph()函数。 - 进行图形绘制:使用各种绘图函数。
- 关闭图形模式:使用
closegraph()函数,释放资源,返回文本模式。
常用函数详解
1 初始化与关闭
// 初始化图形模式 // driver: 图形驱动程序,通常使用 DETECT 让系统自动检测 // mode: 图形模式,如 VGAHI (640x480), VGAMED (640x350) 等 void initgraph(int *driver, int *mode, char *path_to_driver); // 关闭图形模式,释放所有内存,返回文本模式 void closegraph();
示例:
#include <graphics.h>
#include <conio.h> // 用于 getch()
int main() {
int gd = DETECT, gm; // gd = 图形驱动, gm = 图形模式
initgraph(&gd, &gm, ""); // 空字符串表示驱动程序在当前目录下
// ... 绘图代码 ...
getch(); // 等待用户按键,防止窗口一闪而过
closegraph();
return 0;
}
2 颜色设置
// 设置当前绘图颜色 // color: 预定义的颜色常量,如 WHITE, RED, GREEN, BLUE, YELLOW 等 void setcolor(int color); // 设置填充模式和颜色 // pattern: 填充模式,如 SOLID_FILL, LINE_FILL, X_FILL 等 // color: 填充颜色 void setfillstyle(int pattern, int color); // 获取当前背景色 int getbkcolor(); // 设置背景色 void setbkcolor(int color);
3 基本绘图函数
// 画一条从 (x1, y1) 到 (x2, y2) 的直线
void line(int x1, int y1, int x2, int y2);
// 画一个以 (x, y) 为圆心,radius 为半径的圆
void circle(int x, int y, int radius);
// 画一个矩形
// (left, top) 是左上角坐标, (right, bottom) 是右下角坐标
void rectangle(int left, int top, int right, int bottom);
// 画一个椭圆
// (x, y) 是椭圆中心, xradius 和 yradius 是横轴和纵轴半径
void ellipse(int x, int y, int start_angle, int end_angle, int xradius, int yradius);
// 画一个多边形
// points 是指向整数数组的指针,数组格式为 {x1, y1, x2, y2, ..., xn, yn}
// n 是顶点的个数
void drawpoly(int n, int *points);
// 用当前填充样式填充一个封闭区域
// (x, y) 是种子点,必须在要填充的区域内部
void floodfill(int x, int y, int boundary_color);
4 文本输出
// 在指定位置输出字符串 // (x, y) 是文本的左上角坐标 // textstring 是要输出的字符串 void outtext(char *textstring); // 在指定位置格式化输出字符串 void outtextxy(int x, int y, char *textstring); // 设置文本的对齐方式 // (horiz_align, vert_align) 可以是 LEFT_TEXT, CENTER_TEXT, RIGHT_TEXT 等 void settextjustify(int horiz_align, int vert_align); // 设置文本字体和大小 // font: 如 DEFAULT_FONT, TRIPLEX_FONT, SMALL_FONT 等 // direction: 文本方向(通常为 0) // charsize: 字符大小 void settextstyle(int font, int direction, int charsize);
完整示例代码
下面是一个完整的示例,它会创建一个窗口,画一个填充的红色圆,一个蓝色的矩形,并在中间显示 "Hello Graphics!"。
#include <graphics.h>
#include <conio.h> // 用于 getch()
int main() {
// 1. 初始化图形系统
int gd = DETECT, gm; // DETECT 表示自动检测硬件
initgraph(&gd, &gm, ""); // "" 表示驱动文件在当前工作目录下
// 2. 设置颜色和填充样式
setcolor(WHITE); // 设置边框颜色为白色
setfillstyle(SOLID_FILL, RED); // 设置填充样式为实心,颜色为红色
setbkcolor(BLACK); // 设置背景色为黑色
// 3. 绘制图形
// 画一个填充的圆
circle(200, 200, 80);
floodfill(200, 200, WHITE); // 从圆心开始填充,边界颜色为白色
// 画一个填充的矩形
setfillstyle(LINE_FILL, BLUE); // 设置填充样式为线条,颜色为蓝色
rectangle(300, 150, 450, 250);
floodfill(350, 200, WHITE); // 从矩形内部一点开始填充
// 4. 输出文本
setcolor(YELLOW);
settextstyle(DEFAULT_FONT, HORIZ_DIR, 2); // 设置字体、方向、大小
outtextxy(250, 350, "Hello Graphics!");
// 5. 等待用户按键,然后关闭
getch(); // 暂停程序,直到有按键输入
closegraph(); // 关闭图形模式,返回文本模式
return 0;
}
替代方案与现代图形编程
虽然 graphics.h 很经典,但在现代软件开发中,我们几乎不会使用它,现代图形编程依赖于更强大、更灵活的库:
-
Windows 平台:
- GDI (Graphics Device Interface): Windows API 的一部分,用于绘制 2D 图形。
- DirectX: 微软开发的一套多媒体编程接口,提供高性能的 2D/3D 图形和音频处理能力,主要用于游戏开发。
- Qt / MFC: 高级的跨平台/平台特定的 UI 框架,它们封装了底层的图形 API,让开发者更容易创建复杂的用户界面。
-
跨平台:
- OpenGL: 一个开放标准的 2D/3D 图形 API,被广泛应用于游戏、科学可视化、CAD 等领域,它提供了对图形硬件的底层控制。
- SDL (Simple DirectMedia Layer): 一个跨平台的多媒体库,提供了访问音频、键盘、鼠标、 joystick 和硬件加速图形的功能,非常适合游戏和多媒体应用的开发。
- SFML (Simple and Fast Multimedia Library): C++ 的图形库,类似于 SDL,但设计更面向对象,对 C++ 用户更友好。
graphics.h 是一个伟大的教学工具,它用最简单的方式揭示了计算机图形学的核心:像素、坐标、颜色和基本图元,如果你是编程初学者,想快速看到图形化的结果,用它入门是很好的选择。
如果你想从事专业的软件开发,尤其是游戏、UI 或科学可视化领域,就应该尽快转向 OpenGL, SDL, DirectX 或 Qt 等现代图形库,它们虽然学习曲线更陡峭,但功能更强大、性能更优,并且是业界标准。
