C语言中setcolor函数如何使用?

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

核心要点

最重要的一点是:setcolor() 并不是标准 C 语言库(ANSI C)的一部分。

c语言setcolor
(图片来源网络,侵删)

它是一个特定于图形库的函数,在不同的图形库中,它的功能和用法可能略有不同,最常见的 setcolor() 函数出现在以下两个环境中:

  1. Turbo C / Borland C++ (老式 DOS 环境)
  2. graphics.h 库 (在一些现代的跨平台图形库中,如 WinBGIM)

下面我们主要以最经典的 Turbo C 为例来讲解,因为它的使用最为广泛和典型。


在 Turbo C / DOS 环境中的 setcolor()

这个函数用于在图形模式下设置当前绘图的颜色。

函数原型

void setcolor(int color);

参数说明

  • color: 一个整数值,代表要设置的颜色,这个值不是随意的,它对应一个预定义的颜色常量或颜色编号。

颜色常量

graphics.h 头文件中,定义了一系列的颜色常量,你也可以直接使用它们的整数值。

c语言setcolor
(图片来源网络,侵删)
颜色常量 整数值 中文名称 英文名称
BLACK 0 黑色 Black
BLUE 1 蓝色 Blue
GREEN 2 绿色 Green
CYAN 3 青色 Cyan
RED 4 红色 Red
MAGENTA 5 洋红色 Magenta
BROWN 6 棕色 Brown
LIGHTGRAY 7 浅灰色 Light Gray
DARKGRAY 8 深灰色 Dark Gray
LIGHTBLUE 9 亮蓝色 Light Blue
LIGHTGREEN 10 亮绿色 Light Green
LIGHTCYAN 11 亮青色 Light Cyan
LIGHTRED 12 亮红色 Light Red
LIGHTMAGENTA 13 亮洋红色 Light Magenta
YELLOW 14 黄色 Yellow
WHITE 15 白色 White

功能

调用 setcolor() 后,之后所有绘制的图形(如 line(), circle(), rectangle() 等)都将使用这个新设置的颜色。

重要概念:背景色

setcolor() 设置的是前景色,也就是图形本身的颜色,背景色由另一个函数 setbkcolor() 设置。

示例代码

这是一个完整的 Turbo C 程序,演示了如何使用 setcolor() 来绘制不同颜色的线条。

#include <graphics.h>
#include <conio.h> // 用于 getch()
int main() {
    // 1. 初始化图形驱动
    int gd = DETECT, gm;
    initgraph(&gd, &gm, "C:\\TC\\BGI"); // 请确保你的 BGI 文件路径正确
    // 2. 设置背景色为黑色
    setbkcolor(BLACK);
    // 3. 使用 setcolor() 设置不同的颜色并绘制线条
    // 设置颜色为红色,画一条线
    setcolor(RED);
    line(50, 50, 250, 50);
    // 设置颜色为绿色,画一个矩形
    setcolor(GREEN);
    rectangle(50, 100, 250, 200);
    // 设置颜色为蓝色,画一个圆
    setcolor(BLUE);
    circle(150, 300, 50);
    // 设置颜色为黄色,画一个椭圆
    setcolor(YELLOW);
    ellipse(150, 400, 0, 360, 80, 40);
    // 4. 等待用户按键
    getch();
    // 5. 关闭图形模式,返回文本模式
    closegraph();
    return 0;
}

代码解释:

c语言setcolor
(图片来源网络,侵删)
  1. #include <graphics.h>: 包含图形库的头文件。
  2. initgraph(&gd, &gm, "path"): 初始化图形环境。DETECT 会自动检测最佳图形驱动。
  3. setbkcolor(BLACK): 将屏幕背景设置为黑色,让彩色线条更明显。
  4. setcolor(RED): 将当前绘图颜色设置为红色。
  5. line(...): 使用当前颜色(红色)画一条从 (50, 50) 到 (250, 50) 的直线。
  6. 后续的 setcolor() 调用改变了绘图颜色,所以后续图形会使用新的颜色。
  7. getch(): 暂停程序,等待用户按下任意键,以便能看到图形窗口。
  8. closegraph(): 关闭图形窗口,程序结束。

在现代 C 语言环境中的情况

在现代的 Windows、Linux 或 macOS 上,你无法直接使用 graphics.hsetcolor(),你需要使用更现代的图形库或 API。

Windows API

在 Windows 平台下,可以使用 Win32 GDI (Graphics Device Interface) 来实现类似功能,虽然没有直接叫 setcolor() 的函数,但逻辑是相通的。

#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    HWND hwnd = CreateWindow("STATIC", "GDI Color Example", WS_OVERLAPPEDWINDOW,
                            CW_USEDEFAULT, CW_USEDEFAULT, 400, 300,
                            NULL, NULL, hInstance, NULL);
    HDC hdc = GetDC(hwnd);
    // 设置画笔颜色 (类似 setcolor)
    HPEN hPen = CreatePen(PS_SOLID, 5, RGB(255, 0, 0)); // 创建一支红色画笔
    HPEN hOldPen = SelectObject(hdc, hPen); // 选中画笔
    // 画一条线
    MoveToEx(hdc, 50, 50, NULL);
    LineTo(hdc, 350, 50);
    // 设置画刷颜色 (类似设置填充色)
    HBRUSH hBrush = CreateSolidBrush(RGB(0, 255, 0)); // 创建一个绿色画刷
    HBRUSH hOldBrush = SelectObject(hdc, hBrush);
    // 画一个填充矩形
    Rectangle(hdc, 50, 100, 350, 200);
    // 清理资源
    SelectObject(hdc, hOldPen);
    SelectObject(hdc, hOldBrush);
    DeleteObject(hPen);
    DeleteObject(hBrush);
    ReleaseDC(hwnd, hdc);
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return (int)msg.wParam;
}

对比:

  • setcolor() 的功能被 CreatePen()SelectObject() 替代了。
  • 你需要创建一个对象(画笔 HPEN 或画刷 HBRUSH),然后用 SelectObject() 将它选入设备上下文 HDC 中,之后绘图操作就会使用这个对象。

其他现代图形库

对于跨平台的图形开发,通常会使用以下库,它们都有自己的颜色设置方法:

  • SDL (Simple DirectMedia Layer): SDL_SetRenderDrawColor(renderer, r, g, b, a);
  • SFML (Simple and Fast Multimedia Library): sf::CircleShape shape(50.f); shape.setFillColor(sf::Color::Red);
  • OpenGL: glColor3f(r, g, b); (现代OpenGL使用着色器,颜色设置方式不同)

特性 Turbo C setcolor() 现代 API (如 Win32 GDI)
所属库 graphics.h (非标准) Win32 API, OpenGL, SDL, SFML 等
环境 DOS / 16-bit Windows Windows, Linux, macOS 等
功能 设置当前绘图颜色 通过创建和选择对象(画笔、画刷)来设置颜色
易用性 非常简单,一个函数搞定 相对复杂,涉及设备上下文和对象管理
现状 已过时,主要用于教学和怀旧 是现代图形编程的标准做法

如果你正在学习 C 语言并且遇到了 setcolor(),那么你几乎可以肯定是在一个学习环境(如学校课程、旧版教材)或使用Turbo C / Borland C++ 编译器,对于任何现代的、严肃的 C/C++ 项目,都应该学习使用平台相关的 API(如 Win32)或跨平台图形库(如 SDL, SFML)。

-- 展开阅读全文 --
头像
织梦后台登录入口和密码怎么找?
« 上一篇 03-02
dede自增标签的使用
下一篇 » 03-02

相关文章

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

目录[+]