首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Turbo C 圖形模式編程:字體、顏色與中文顯示完全指南

     編輯:關於C語言

雖然 Turbo C 年代久遠,但其 BGI 圖形庫(graphics.h)仍是許多教學與舊專案維護的必修課。本文系統整理 Turbo C 3.0 下的字體設置、調色板操作、文本/圖形模式顏色控制,並給出中文顯示的兩條可行路徑。

一、圖形模式字體:settextstyle 與五大內建字體

Turbo C 僅在圖形模式支援字體切換,文本模式固定 8x8 點陣字體。

五種內建筆畫字體

常數索引說明
DEFAULT_FONT08x8 點陣字體
TRIPLEX_FONT1筆畫三倍字體
SMALL_FONT2筆畫小字體
SANS_SERIF_FONT3無襯線筆畫字體
GOTHIC_FONT4哥德筆畫字體

核心 API

void settextstyle(int font, int direction, int charsize);
// font: 字體常數
// direction: HORIZ_DIR(0) 橫向 / VERT_DIR(1) 縱向
// charsize: 放大倍數(1~10),0 為預設 8x8

完整範例:遍歷顯示所有字體

#include <graphics.h>
#include <conio.h>
#include <stdio.h>

int main() {
    int gd = DETECT, gm, err;
    initgraph(&gd, &gm, "C:\\TC\\BGI"); // 路徑視安裝目錄調整
    if ((err = graphresult()) != grOk) {
        printf("Error: %s\n", grapherrormsg(err));
        return 1;
    }

    char *names[] = {"Default", "Triplex", "Small", "Sans Serif", "Gothic"};
    int midx = getmaxx() / 2, midy = getmaxy() / 2;
    settextjustify(CENTER_TEXT, CENTER_TEXT);

    for (int f = DEFAULT_FONT; f <= GOTHIC_FONT; f++) {
        cleardevice();
        int sz = (f == TRIPLEX_FONT) ? 4 : 1;
        settextstyle(f, HORIZ_DIR, sz);
        outtextxy(midx, midy, names[f]);
        getch();
    }
    closegraph();
    return 0;
}

二、中文顯示:兩條艱難但可行的路

BGI 內建字體不含中文,若需顯示漢字,必須自行繪製點陣或調用外部字庫:

  1. UCDOS 虛擬字庫 + printf:在 DOS 環境下載入 UCDOS,利用其攔截 int 10h 實現漢字顯示,C 代碼只需普通 printf。缺點:強依賴 DOS 實模式環境,現代系統無法直接運行。
  2. 圖形模式 + 字庫文件 + putpixel:讀取 HZK16/24 等點陣字庫文件,解析漢字編碼(區位碼/國標碼),逐點用 putpixel 繪製。靈活但需自行實現字庫解析、編碼轉換、逐點繪製,效率較低。

推薦參考:《C 語言最新編程技巧 200 例》(魯沐浴編,電子工業出版社)中的漢字顯示專章。

三、顏色控制:文本模式 vs 圖形模式

1. 文本模式:屬性字節佈局

每個字元佔 1 字節屬性:Bit7=閃爍, Bit6-4=背景色, Bit3-0=前景色。

  • textattr(attr):一次性設置完整屬性字節。
  • textcolor(c) / textbackground(c):分別設置前景/背景(僅影響對應位)。
  • 必須用 cprintf 輸出,printf 繞過屬性設置直接寫視頻緩衝區,顏色不生效。

2. 圖形模式:調色板索引

  • setcolor(color):設置繪圖前景色(線條、文字)。
  • setbkcolor(color):設置背景色。
  • getmaxcolor():返回當前模式最大顏色索引。
  • 輸出文字用 outtextxy。

EGA/VGA 16 色調色板索引對照

0: 黑   1: 藍   2: 綠   3: 青
4: 紅   5: 洋紅 6: 棕   7: 淺灰
8: 深灰 9: 亮藍 10: 亮綠 11: 亮青
12: 亮紅 13: 亮洋紅 14: 黃  15: 白

四、常見編譯錯誤與修正

  • grok → grOk(圖形初始化成功常數)。
  • initgraph(&gdriver, &gmode, "") 路徑需指向 EGAVGA.BGI 所在目錄。
  • 缺少 graphics.h、conio.h、dos.h 頭文件。

總結

Turbo C 圖形編程雖屬歷史,但其「模式切換 → 設置屬性 → 繪製/輸出 → 還原」的框架思想貫穿現代圖形 API(OpenGL、DirectX、SDL)。理解 BGI 的字體索引、屬性字節、調色板機制,有助於建立底層圖形系統的心智模型。若需現代跨平台圖形開發,請轉向 SDL2、Raylib 或 OpenGL。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved