c语言graphics.h

99ANYc3cd6
预计阅读时长 21 分钟
位置: 首页 C语言 正文

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

c语言graphics.h
(图片来源网络,侵删)

尽管在现代开发中(如 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 最简单、最推荐的方式,无需任何本地配置。

  1. 访问在线 C 编译器TutorialsPoint Online C CompilerReplit
  2. 包含头文件:在代码中 #include <graphics.h>
  3. 注意:这些在线编译器通常已经预装了 graphics.h 的模拟环境,你可以直接编写和运行代码。

使用 DOSBox 模拟器(最经典)

如果你想体验最原汁原味的 Turbo C 环境,这是最好的方法。

c语言graphics.h
(图片来源网络,侵删)
  1. 安装 DOSBox:从 DOSBox 官网 下载并安装。
  2. 获取 Turbo C/C++:在网上搜索 "Turbo C++ 3.0 for DOS" 或类似关键词,下载其安装文件(通常是 install.exe)。
  3. 在 DOSBox 中安装和运行
    • 将 Turbo C 的安装文件拖入 DOSBox 窗口,它会自动开始安装,安装路径建议设置为 C:\TC
    • 安装完成后,在 DOSBox 中输入:
      mount c c:\tc  // 将你的 C 盘映射到 DOSBox 的 C 盘
      c:             // 切换到 C 盘
      tc             // 运行 Turbo C 编译器
    • 在 Turbo C 的集成环境中,你就可以编写包含 graphics.h 的代码并编译运行了。

使用第三方库(如 WinBGIm)

如果你想在现代的 Windows C/C++ 开发环境(如 Visual Studio, Code::Blocks)中使用,可以使用 WinBGIm 库,它是 graphics.h 在 Windows 下的一个移植版本。

  1. 下载 WinBGIm:从 Colorado State University 的官网 下载 winbgim.zip
  2. 配置开发环境(以 Code::Blocks 为例):
    • 解压 winbgim.zip,你会得到 winbgim.hlibbgi.a 等文件。
    • winbgim.h 复制到你的 Code::Blocks 的 include 文件夹。
    • libbgi.a 复制到你的 Code::Blocks 的 lib 文件夹。
    • 在 Code::Blocks 中创建一个新的项目,在项目设置(Build options -> Linker settings)中,将 libbgi.a 添加到链接器选项中。
  3. 编写代码:代码写法和经典 graphics.h 基本一致。

核心概念和常用函数

graphics.h 的编程通常遵循一个固定的流程。

核心概念

  1. 图形模式:与文本模式相对,在文本模式下,屏幕只能显示字符;在图形模式下,屏幕由像素点组成,可以绘制各种图形。
  2. 显示器驱动:不同的显卡需要不同的驱动程序。graphics.h 需要一个特定的驱动(如 EGAVGA.BGI)来工作。
  3. 坐标系统:屏幕的左上角是坐标原点 (0, 0),X 轴向右为正,Y 轴向下为正。

编程基本流程

  1. 包含头文件#include <graphics.h>
  2. 初始化图形模式:使用 initgraph() 函数。
  3. 进行图形绘制:使用各种绘图函数。
  4. 关闭图形模式:使用 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, DirectXQt 等现代图形库,它们虽然学习曲线更陡峭,但功能更强大、性能更优,并且是业界标准。

-- 展开阅读全文 --
头像
织梦图集生成自动打包,如何实现高效批量处理?
« 上一篇 03-21
C语言中int与double有何区别?
下一篇 » 03-21

相关文章

取消
微信二维码
支付宝二维码

目录[+]