graphics.h在C语言中如何使用?

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

graphics.h 是一个非常经典的、用于在 C 语言中进行图形编程的头文件,它由 Borland 公司在其 Turbo C/C++ 编译器中推广,因此也常被称为 Turbo C GraphicsBGI (Borland Graphics Interface)

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

尽管它现在被认为是一个过时的库(主要用于教学和怀旧),但因其简单直观的 API,至今仍然是许多初学者学习图形编程的入门选择。


核心特点

  • 简单易学:函数命名直观,如 circle() 画圆,rectangle() 画矩形。
  • 底层控制:直接操作像素,提供了对图形模式、颜色、坐标系统等的底层控制。
  • 平台依赖性强:它不是一个标准 C 库,而是特定于编译器的,它主要在 DOS 和 Windows 的旧版本(通过 winbgim 等模拟)上工作,在现代的 Linux、macOS 或新版本的 Windows (如 VS Code, MinGW) 上,直接使用 graphics.h 会非常困难或不可能。
  • 过时:在现代游戏开发、UI 设计等领域,它已被 OpenGL、DirectX、SDL、Qt、SFML 等更强大、更现代的库所取代。

如何使用 graphics.h (以 Windows + Dev-C++ 为例)

要在现代环境中使用,通常需要下载一个 graphics.h 的兼容库,winbgim,这里以一个常见的配置为例:

步骤 1:下载 winbgim.hwinbgim.lib 你需要从网上下载这两个文件,通常可以搜索 "BGI for Windows" 或 "Dev-C++ graphics.h" 找到资源。

步骤 2:配置 Dev-C++

c语言 graphics.h
(图片来源网络,侵删)
  1. winbgim.h 文件放入 Dev-C++ 的 include 目录下。
  2. winbgim.lib 文件放入 Dev-C++ 的 lib 目录下。
  3. 在 Dev-C++ 的菜单栏选择 工具 -> 编译选项 -> 目录 -> C++包含文件,确保路径指向了你的 include 目录。
  4. 同样,在 链接器 -> 中,确保路径指向了你的 lib 目录,并且勾选了 winbgim.lib

步骤 3:编写代码 现在你就可以在你的 C 代码中包含 graphics.h 并开始编程了。


编程基本流程

使用 graphics.h 编写图形程序通常遵循以下固定步骤:

  1. 包含头文件#include <graphics.h>
  2. 初始化图形模式:调用 initgraph() 函数,从默认驱动程序和模式中初始化图形系统。
  3. 进行图形绘制:使用各种绘图函数(如 line, circle, rectangle 等)在屏幕上画图。
  4. 关闭图形模式:程序结束时,调用 closegraph() 函数,释放图形系统占用的资源,并返回到文本模式。

核心函数详解

1 初始化与关闭

  • void initgraph(int *driver, int *mode, char *path);

    • 作用:初始化图形系统。

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

      • driver: 指向图形驱动程序类型的指针,常用 DETECT,它会自动检测硬件并使用最高分辨率的可用模式。
      • mode: 指向图形模式的指针。driverDETECT,此参数会被 initgraph 自动设置。
      • path: 指向 BGI 文件(如 *.BGI, *.CHR)所在路径的字符串,如果文件在程序当前目录,可以设为空字符串 。
    • 示例

      #include <graphics.h>
      #include <conio.h> // 用于 getch()
      int main() {
          int gd = DETECT, gm; // gd = driver, gm = mode
          initgraph(&gd, &gm, ""); // 初始化图形模式
          // ... 在这里画图 ...
          getch(); // 等待用户按键,防止窗口一闪而过
          closegraph(); // 关闭图形模式
          return 0;
      }
  • void closegraph();

    • 作用:关闭图形模式,释放所有内存,并恢复屏幕为调用 initgraph() 之前的状态。
    • 示例:见上面的 main 函数。

2 绘图函数

  • 设置颜色

    • void setcolor(int color); 设置后续绘图的颜色。
    • void setbkcolor(int color); 设置背景色。
    • 颜色可以使用预定义的常量,如 WHITE, BLACK, RED, GREEN, BLUE, YELLOW 等。
  • 画线

    • void line(int x1, int y1, int x2, int y2);(x1, y1)(x2, y2) 画一条直线。
  • 画圆和椭圆

    • void circle(int x, int y, int radius);(x, y) 为圆心,radius 为半径画圆。
    • void ellipse(int x, int y, int startangle, int endangle, int xradius, int yradius); 画椭圆或圆弧。
  • 画矩形和多边形

    • void rectangle(int left, int top, int right, int bottom); 画一个矩形框。
    • void drawpoly(int numpoints, int *polypoints); 画一个多边形。polypoints 是一个包含所有顶点坐标的整数数组,格式为 {x1, y1, x2, y2, ..., xn, yn}numpoints 是顶点的数量。
  • 填充封闭区域

    • void floodfill(int x, int y, int bordercolor); 用当前填充颜色填充一个封闭区域。(x, y) 是区域内的任意一点,bordercolor 是区域的边界颜色。
    • void setfillstyle(int pattern, int color); 设置填充样式和颜色。
      • pattern 可以是 SOLID (实心), LINE_FILL (直线), SLASH_FILL (斜线) 等。
      • color 是填充颜色。

3 坐标与文本

  • 坐标系统:屏幕左上角是原点 (0, 0),x 轴向右为正,y 轴向下为正。
  • 获取屏幕尺寸
    • int getmaxx(); 返回 x 坐标的最大值。
    • int getmaxy(); 返回 y 坐标的最大值。
  • 输出文本
    • void outtextxy(int x, int y, char *string); 在指定坐标 (x, y) 处输出字符串。
    • void settextstyle(int font, int direction, int size); 设置文本字体、方向和大小。

完整示例代码

下面是一个完整的示例,它会初始化一个窗口,画一个填充的矩形,再画一个圆,并显示一行文字。

#include <graphics.h>
#include <conio.h> // 用于 getch()
int main() {
    // 1. 初始化图形模式
    // DETECT 表示自动检测驱动和模式
    int gd = DETECT, gm;
    initgraph(&gd, &gm, ""); // 假设 BGI 文件在当前目录
    // 2. 进行图形绘制
    // 设置背景色为浅灰色
    setbkcolor(LIGHTGRAY);
    cleardevice(); // 用背景色清屏
    // 设置填充样式为绿色实心
    setfillstyle(SOLID_FILL, GREEN);
    // 画一个填充的矩形
    rectangle(100, 100, 300, 250);
    floodfill(150, 150, GREEN); // (150,150) 是矩形内部的一个点
    // 设置线条颜色为红色
    setcolor(RED);
    // 画一个圆
    circle(400, 200, 80);
    // 设置文本颜色和样式
    setcolor(BLUE);
    settextstyle(DEFAULT_FONT, HORIZ_DIR, 2);
    // 在屏幕上显示文字
    outtextxy(200, 350, "Hello, Graphics World!");
    // 3. 等待用户按键,防止窗口立即关闭
    getch();
    // 4. 关闭图形模式,返回到文本模式
    closegraph();
    return 0;
}

现代替代方案

虽然 graphics.h 很适合入门,但如果你要进行更严肃的图形编程,应该学习现代库:

特点 适用场景
SDL (Simple DirectMedia Layer) 跨平台,轻量级,提供 2D 图形、输入、音频、线程等功能,非常适合游戏开发和多媒体应用。 2D 游戏、模拟器、多媒体工具
OpenGL 一个强大的、跨平台的图形 API,专注于 3D 渲染,但也支持 2D,需要较高的学习曲线。 3D 游戏、科学可视化、CAD 软件
SFML (Simple and Fast Multimedia Library) C++ 风格的 SDL 替代品,面向对象,更易用。 2D/3D 游戏、多媒体应用
Qt 一个全面的 C++ 应用程序框架,包含强大的 GUI 模块。 桌面应用程序开发
Raylib 一个现代的、易于使用的 C 库,专注于游戏开发。 2D/3D 游戏、原型设计

graphics.h 是一个教学工具,而不是一个工业级的开发工具,它的价值在于:

  • 简单直观:让你能快速理解图形编程的基本概念(像素、坐标、颜色、缓冲区)。
  • 快速上手:几行代码就能画出图形,容易获得成就感。
  • 历史意义:了解过去是如何进行图形编程的。

当你掌握了 graphics.h 的基本原理后,就应该转向更现代、更强大、更通用的图形库,如 SDLOpenGL,以进行更深入的学习和实践。

-- 展开阅读全文 --
头像
织梦三级四级栏目如何调用?
« 上一篇 02-17
织梦真能检测到每个站?漏洞还是夸大?
下一篇 » 02-17
取消
微信二维码
支付宝二维码

目录[+]