Turbo C 提供豐富的圖形函數,原型宣告於 graphics.h。使用前必須確認:
EGAVGA.BGI)Options/Linker 中 Graphics library 設為 Onvoid far initgraph(int far *gdriver, int far *gmode, char *path);
gdriver:圖形驅動器代碼gmode:圖形模式代碼path:BGI 驅動程式目錄路徑| 驅動器 | 符號常數 | 模式 | 符號常數 | 色數 | 解析度 |
|---|---|---|---|---|---|
| VGA | 9 | VGAHI | 2 | 16 | 640×480 |
| EGA | 3 | EGAHI | 1 | 16 | 640×350 |
| CGA | 1 | CGAHI | 4 | 2 | 640×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;
}
void far detectgraph(int *gdriver, int *gmode);
呼叫後自動填入對應驅動器與模式代碼,適合跨平台部署。
int gdriver = DETECT, gmode;
initgraph(&gdriver, &gmode, "c:\\tc");
void far closegraph(void);
釋放驅動程式與字型佔用的記憶體,恢復文字模式。
預設編譯不會將 BGI 驅動內嵌執行檔,需手動處理:
BGIOBJ EGAVGA:將 EGAVGA.BGI 轉為 EGAVGA.OBJTLIB GRAPHICS.LIB + EGAVGA:加入圖形庫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):設定繪圖色(前景色)| 常數 | 值 | 顏色 | 常數 | 值 | 顏色 |
|---|---|---|---|---|---|
| BLACK | 0 | 黑 | DARKGRAY | 8 | 深灰 |
| BLUE | 1 | 藍 | LIGHTBLUE | 9 | 亮藍 |
| GREEN | 2 | 綠 | LIGHTGREEN | 10 | 淡綠 |
| CYAN | 3 | 青 | LIGHTCYAN | 11 | 淡青 |
| RED | 4 | 紅 | LIGHTRED | 12 | 淡紅 |
| MAGENTA | 5 | 洋紅 | LIGHTMAGENTA | 13 | 淡洋紅 |
| BROWN | 6 | 棕 | YELLOW | 14 | 黃 |
| LIGHTGRAY | 7 | 淡灰 | WHITE | 15 | 白 |
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):多邊形,頂點陣列需首尾相連void far setlinestyle(int linestyle, unsigned upattern, int thickness);
| 線型常數 | 值 | 說明 |
|---|---|---|
| SOLID_LINE | 0 | 實線 |
| DOTTED_LINE | 1 | 虛線 |
| CENTER_LINE | 2 | 中心線 |
| DASHED_LINE | 3 | 點畫線 |
| USERBIT_LINE | 4 | 使用者自訂(upattern 16 位元控制) |
| 寬度常數 | 值 | 說明 |
|---|---|---|
| NORM_WIDTH | 1 | 1 像素 |
| THIC_WIDTH | 3 | 3 像素 |
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):填充橢圓扇形setfillstyle(pattern, color)drawpoly 或 rectangle 等fillpoly(numpoints, polypoints) 或 floodfill(x,y,border)掌握 Turbo C 圖形庫的初始化、色彩控制、基本繪圖與填充函數,即可開發豐富的 DOS 圖形應用。後續章節將深入探訂圖形模式下的文字輸出、視窗管理與進階動畫技巧。