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

Turbo C 圖形程式設計完全指南:從初始化到基本繪圖

     編輯:關於C語言

前言:Turbo C 圖形庫概覽

Turbo C 提供豐富的圖形函數,原型宣告於 graphics.h。使用前必須確認:

  1. 擁有對應顯示卡的 BGI 驅動程式(如 EGAVGA.BGI)
  2. IDE 選項 Options/Linker 中 Graphics library 設為 On

一、圖形模式初始化

initgraph 函數

void far initgraph(int far *gdriver, int far *gmode, char *path);
  • gdriver:圖形驅動器代碼
  • gmode:圖形模式代碼
  • path:BGI 驅動程式目錄路徑

常見驅動器與模式對照表(節錄)

驅動器符號常數模式符號常數色數解析度
VGA9VGAHI216640×480
EGA3EGAHI116640×350
CGA1CGAHI42640×200
自動偵測DETECT (0)由 detectgraph 自動判斷

初始化範例

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

int main() {
    int gdriver = DETECT, gmode;
    initgraph(&gdriver, &gmode, "c:\\tc");
    bar3d(100, 100, 300, 250, 50, 1); // 繪製長方體
    getch();
    closegraph();
    return 0;
}

自動偵測硬體:detectgraph

void far detectgraph(int *gdriver, int *gmode);

呼叫後自動填入對應驅動器與模式代碼,適合跨平台部署。

簡化寫法:DETECT 巨集

int gdriver = DETECT, gmode;
initgraph(&gdriver, &gmode, "c:\\tc");

結束圖形模式:closegraph

void far closegraph(void);

釋放驅動程式與字型佔用的記憶體,恢復文字模式。

二、建立獨立執行檔(無需外部 BGI)

預設編譯不會將 BGI 驅動內嵌執行檔,需手動處理:

  1. BGIOBJ EGAVGA:將 EGAVGA.BGI 轉為 EGAVGA.OBJ
  2. TLIB GRAPHICS.LIB + EGAVGA:加入圖形庫
  3. 程式碼加入 registerbgidriver(EGAVGA_driver); 於 initgraph 之前
#include <graphics.h>
#include <stdio.h>

int main() {
    int gdriver = DETECT, gmode;
    registerbgidriver(EGAVGA_driver);
    initgraph(&gdriver, &gmode, "");
    bar3d(50, 50, 250, 150, 20, 1);
    getch();
    closegraph();
    return 0;
}

三、色彩設定與清螢幕

色彩函數

  • setbkcolor(int color):設定背景色
  • setcolor(int color):設定繪圖色(前景色)

EGA/VGA 16 色常數表

常數值顏色常數值顏色
BLACK0黑DARKGRAY8深灰
BLUE1藍LIGHTBLUE9亮藍
GREEN2綠LIGHTGREEN10淡綠
CYAN3青LIGHTCYAN11淡青
RED4紅LIGHTRED12淡紅
MAGENTA5洋紅LIGHTMAGENTA13淡洋紅
BROWN6棕YELLOW14黃
LIGHTGRAY7淡灰WHITE15白

清螢幕:cleardevice

void far cleardevice(void);

綜合範例:同心圓漸變色

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

int main() {
    int gdriver = DETECT, gmode, i;
    registerbgidriver(EGAVGA_driver);
    initgraph(&gdriver, &gmode, "");
    setbkcolor(BLACK);
    cleardevice();
    for (i = 0; i <= 15; i++) {
        setcolor(i);
        circle(320, 240, 20 + i * 10);
        delay(100);
    }
    for (i = 0; i <= 15; i++) {
        setbkcolor(i);
        cleardevice();
        circle(320, 240, 20 + i * 10);
        delay(100);
    }
    closegraph();
    return 0;
}

取得目前色彩狀態

  • getbkcolor():背景色值
  • getcolor():繪圖色值
  • getmaxcolor():最大可用色值

四、基本圖形函數大全

畫點

  • putpixel(int x, int y, int color):在 (x,y) 畫指定色點
  • getpixel(int x, int y):取得 (x,y) 點色值

座標相關

  • getmaxx()、getmaxy():最大 X/Y 座標
  • getx()、gety():目前游標位置
  • moveto(int x, int y):移動游標並畫點
  • moverel(int dx, int dy):相對移動游標不畫點

畫線與曲線

  • line(x0,y0,x1,y1):兩點連線
  • lineto(x,y):從游標連線至 (x,y)
  • linerel(dx,dy):相對位移連線
  • circle(x,y,radius):圓
  • arc(x,y,stangle,endangle,radius):圓弧(角度制,X 軸正向 0°,逆時針)
  • ellipse(x,y,stangle,endangle,xradius,yradius):橢圓弧
  • rectangle(x1,y1,x2,y2):矩形框
  • drawpoly(numpoints, polypoints):多邊形,頂點陣列需首尾相連

線型設定:setlinestyle

void far setlinestyle(int linestyle, unsigned upattern, int thickness);
線型常數值說明
SOLID_LINE0實線
DOTTED_LINE1虛線
CENTER_LINE2中心線
DASHED_LINE3點畫線
USERBIT_LINE4使用者自訂(upattern 16 位元控制)
寬度常數值說明
NORM_WIDTH11 像素
THIC_WIDTH33 像素

畫模式:setwritemode

  • mode=0 (COPY_PUT):覆蓋模式(預設)
  • mode=1 (XOR_PUT):異或模式,同樣線畫兩次等於消失,適合動畫游標

線型設定範例

setlinestyle(SOLID_LINE, 0, THIC_WIDTH); // 3像素實線
setlinestyle(USERBIT_LINE, 0xAAAA, NORM_WIDTH); // 自訂虛線

五、封閉圖形填充

直接繪製並填充

  • bar(x1,y1,x2,y2):填充矩形(無邊框)
  • bar3d(x1,y1,x2,y2,depth,topflag):3D 長方體,topflag=1 封頂
  • pieslice(x,y,stangle,endangle,radius):填充扇形
  • sector(x,y,stangle,endangle,xradius,yradius):填充橢圓扇形

多邊形填充流程

  1. 設定填充樣式:setfillstyle(pattern, color)
  2. 繪製輪廓:drawpoly 或 rectangle 等
  3. 填充內部:fillpoly(numpoints, polypoints) 或 floodfill(x,y,border)

總結

掌握 Turbo C 圖形庫的初始化、色彩控制、基本繪圖與填充函數,即可開發豐富的 DOS 圖形應用。後續章節將深入探訂圖形模式下的文字輸出、視窗管理與進階動畫技巧。

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