C 標準庫(C89/C99/C11)不包含任何圖形界面或繪圖函數。所有繪圖均依賴平台相關 API 或第三方庫。
| 方案 | 適用場景 | 學習曲線 | 跨平台 | 備註 |
|---|---|---|---|---|
| EasyX / graphics.h (BGI) | Windows 教學、簡單作業、入門演示 | 極低 | ❌ 僅 Windows | 非標準,Turbo C 遺產,現代項目勿用 |
| Windows GDI / GDI+ | Windows 原生桌面應用 | 中 | ❌ | 需掌握 DC、筆刷、路徑等概念 |
| Qt Charts / QCustomPlot | 跨平台桌面應用(C++,但可 C 調用) | 中高 | ✅ Win/Linux/macOS/嵌入式 | 功能豐富,商業授權需注意 |
| Cairo | 矢量繪圖、PDF/圖片輸出、GTK 集成 | 中 | ✅ | 純 C 庫,PostScript 繪圖模型 |
| SDL2 + SDL2_gfx / Skia | 遊戲、多媒體、實時渲染 | 中高 | ✅ | 需自行實現坐標系、坐標軸、圖例 |
| Web 方案:C/C++ 後端 + ECharts/Chart.js 前端 | 現代 Web 應用、數據大屏 | 分離 | ✅ | C 僅負責數據計算/接口,繪圖交給 JS |
| Python 繪圖嵌入:C 調用 Python (matplotlib/plotly) | 科學計算、數據分析項目 | 中 | ✅ | 利用 Python 豐富生態,C 負責高性能計算 |
#include <graphics.h>
#include <math.h>
int main() {
initgraph(800, 600);
setbkcolor(WHITE); cleardevice();
// 坐標軸
line(50, 550, 750, 550); // X 軸
line(50, 50, 50, 550); // Y 軸
// 正弦波
for (int x = 0; x < 700; x++) {
double rad = (x / 100.0) * 2 * 3.14159;
int y = 300 - (int)(200 * sin(rad));
putpixel(x + 50, y, BLUE);
}
getch();
closegraph();
return 0;
}
C 語言本身不繪圖,選擇合適的庫/架構才是關鍵。教學用 EasyX,產品用 Qt/Cairo/LVGL,Web 端採用「C 算數據 + JS 畫圖」分離架構,才是專業工程實踐。