C语言putpixel函数如何使用?

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

putpixel 是一个非常经典的图形绘制函数,它的作用是在屏幕的指定坐标处绘制一个像素点(一个单一颜色的点)。

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

核心要点

  1. 并非标准 C 函数:最重要的一点是,putpixel 不是 C 语言标准库的一部分,它是由特定的图形库提供的函数,最著名的就是 Turbo C/C++ 中的 graphics.h 库。putpixel 的使用和编译方式取决于你使用的开发环境。
  2. 功能:在屏幕坐标 (x, y) 处,用指定的颜色 color 绘制一个像素。
  3. 坐标系统:屏幕的左上角通常是坐标原点 (0, 0),X 轴向右增加,Y 轴向下增加。

在 Turbo C/C++ 中的使用(经典方式)

这是 putpixel 最常见的使用场景,通常在学校的计算机图形学课程中会遇到。

函数原型

void putpixel(int x, int y, int color);

参数说明

  • x: 要绘制像素点的 x 坐标。
  • y: 要绘制像素点的 y 坐标。
  • color: 像素点的颜色,这个值不是直接的 RGB 颜色,而是图形库中定义的颜色常量或通过 COLOR 宏计算出的值。

颜色常量

graphics.h 中,预定义了一些颜色常量,

  • BLACK (0)
  • BLUE (1)
  • GREEN (2)
  • CYAN (3)
  • RED (4)
  • MAGENTA (5)
  • BROWN (6)
  • LIGHTGRAY (7)
  • WHITE (15)
  • ... 等等。

完整示例代码 (Turbo C/C++)

这个示例会初始化图形模式,然后在屏幕上画一个红色的点。

#include <graphics.h> // 包含图形库头文件
#include <conio.h>    // 用于 getch()
int main() {
    // 1. 初始化图形驱动
    // DETECT 是一个宏,让系统自动检测合适的图形驱动和模式
    int gd = DETECT, gm;
    initgraph(&gd, &gm, "C:\\TC\\BGI"); // 指定 BGI 文件路径,根据你的安装路径修改
    // 2. 检查初始化是否成功
    if (graphresult() != grOk) {
        printf("图形初始化失败!\n");
        return 1;
    }
    // 3. 使用 putpixel 画点
    // 在坐标 (100, 100) 处画一个红色的点
    putpixel(100, 100, RED);
    // 在坐标 (200, 150) 处画一个绿色的点
    putpixel(200, 150, GREEN);
    // 在坐标 (300, 200) 处画一个蓝色的点
    putpixel(300, 200, BLUE);
    // 4. 等待用户按键
    printf("按任意键退出...");
    getch();
    // 5. 关闭图形模式,返回文本模式
    closegraph();
    return 0;
}

如何编译和运行 (在 Turbo C/C++ IDE 中):

c语言putpixel
(图片来源网络,侵删)
  1. 将代码保存为 .c 文件(drawpixel.c)。
  2. 打开 Turbo C/C++ IDE。
  3. 编译并运行程序。
  4. 程序会弹出一个图形窗口,并在窗口中画出三个不同颜色的点,然后等待你按任意键后退出。

在现代编译器 (如 GCC, MSVC) 中的使用

在现代开发环境中(如 Visual Studio, MinGW/GCC, VS Code),graphics.h 库通常不可用,你需要使用其他现代的图形库来实现类似的功能,最常用的是 WinBGIm,它是 graphics.h 在 Windows 平台上的一个移植版本。

使用 WinBGIm 的示例

你需要下载并安装 WinBGIm 库,并将其头文件和库文件正确配置到你的项目中。

#include <graphics.h> // WinBGIm 提供的
#include <conio.h>    // 用于 getch()
int main() {
    // 1. 初始化图形窗口
    // initwindow(宽度, 高度, "窗口标题");
    initwindow(640, 480, "Putpixel Example with WinBGIm");
    // 2. 使用 putpixel 画点
    // 颜色常量与 Turbo C 相同
    putpixel(100, 100, RED);
    putpixel(200, 150, GREEN);
    putpixel(300, 200, BLUE);
    // 3. 等待用户按键
    getch();
    // 4. 关闭图形窗口
    closegraph();
    return 0;
}

使用其他现代图形库(如 SDL2)

如果你是在进行新的项目开发,强烈推荐使用像 SDL2 (Simple DirectMedia Layer) 这样的现代库,它们功能更强大、跨平台性更好、社区支持也更活跃。

使用 SDL2 绘制像素点,你需要操作一个像素数组(通常称为 "surface" 或 "texture")。

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

SDL2 示例

你需要安装 SDL2 开发库。

#include <SDL2/SDL.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
    // 1. 初始化 SDL
    if (SDL_Init(SDL_INIT_VIDEO) < 0) {
        printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
        return 1;
    }
    // 2. 创建窗口
    SDL_Window* window = SDL_CreateWindow("SDL Pixel Example", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN);
    if (window == NULL) {
        printf("Window could not be created! SDL_Error: %s\n", SDL_GetError());
        return 1;
    }
    // 3. 创建渲染器
    SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
    if (renderer == NULL) {
        printf("Renderer could not be created! SDL_Error: %s\n", SDL_GetError());
        return 1;
    }
    // 4. 清空窗口为黑色
    SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); // (R, G, B, A)
    SDL_RenderClear(renderer);
    // 5. 使用 SDL_RenderDrawPoint 来画点 (SDL2 中没有 putpixel)
    // 画一个红点
    SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); // 红色
    SDL_RenderDrawPoint(renderer, 100, 100);
    // 画一个绿点
    SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255); // 绿色
    SDL_RenderDrawPoint(renderer, 200, 150);
    // 画一个蓝点
    SDL_SetRenderDrawColor(renderer, 0, 0, 255, 255); // 蓝色
    SDL_RenderDrawPoint(renderer, 300, 200);
    // 6. 更新屏幕,显示刚刚绘制的内容
    SDL_RenderPresent(renderer);
    // 7. 等待 5 秒
    SDL_Delay(5000);
    // 8. 销毁窗口和渲染器
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    // 9. 退出 SDL
    SDL_Quit();
    return 0;
}

如何编译 (使用 GCC):

gcc -o sdl_pixel sdl_pixel.c -lmingw32 -lSDL2main -lSDL2

(在 Linux/macOS 上,-lmingw32-lSDL2main 参数不需要)


总结与对比

特性 Turbo C putpixel WinBGIm putpixel SDL2 SDL_RenderDrawPoint
graphics.h (过时) WinBGIm (移植版) SDL2 (现代)
平台 DOS / 早期 Windows Windows Windows, Linux, macOS, etc.
易用性 非常简单,putpixel(x, y, color) 简单,与 TC 相同 稍微复杂,需要先设置颜色再绘制
功能 基础绘图 基础绘图 非常强大,支持2D/3D、音频、输入等
现代性 不推荐用于新项目 可用于快速移植旧代码 强烈推荐用于新项目
  • 如果你正在学习计算机图形学基础或者需要运行旧的 Turbo C 代码putpixel 是一个很好的起点。
  • 如果你正在开发一个新的、现代的、跨平台的应用程序,请忘记 putpixel,并选择像 SDL2SFMLOpenGL 这样的现代图形库,它们虽然入门稍难,但能为你提供更强大、更稳定和更灵活的开发体验。
-- 展开阅读全文 --
头像
织梦互娱工作真靠谱吗?
« 上一篇 04-15
C语言declared关键字作用是什么?
下一篇 » 04-15

相关文章

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

目录[+]