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

(图片来源网络,侵删)
核心要点
- 并非标准 C 函数:最重要的一点是,
putpixel不是 C 语言标准库的一部分,它是由特定的图形库提供的函数,最著名的就是 Turbo C/C++ 中的graphics.h库。putpixel的使用和编译方式取决于你使用的开发环境。 - 功能:在屏幕坐标
(x, y)处,用指定的颜色color绘制一个像素。 - 坐标系统:屏幕的左上角通常是坐标原点
(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文件(drawpixel.c)。 - 打开 Turbo C/C++ IDE。
- 编译并运行程序。
- 程序会弹出一个图形窗口,并在窗口中画出三个不同颜色的点,然后等待你按任意键后退出。
在现代编译器 (如 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")。

(图片来源网络,侵删)
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,并选择像 SDL2、SFML 或 OpenGL 这样的现代图形库,它们虽然入门稍难,但能为你提供更强大、更稳定和更灵活的开发体验。
