#include <graphics.h>
void floodfill(int x, int y, int border_color);
x, y:種子點座標。**必須位於封閉圖形內部**任意一點。border_color:邊界顏色。填充演算法遇到此顏色停止擴散。通常設為繪製圖形邊框時使用的顏色 (如 WHITE, RED 或 getcolor())。從種子點 (x,y) 開始,向四周 (上下左右或八方向) 擴散,將遇到的非邊界顏色像素替換為當前填充顏色 (由 setfillstyle / setcolor 設定),直到碰到 border_color 或畫面邊緣。
#include <graphics.h>
#include <conio.h>
#define R 50 // 圓半徑
#define GAP 15 // 圓心間距
int main() {
int gd = DETECT, gm;
initgraph(&gd, &gm, ""); // 初始化圖形模式 (Turbo C 需路徑,現代庫如 WinBGIm 可留空)
// 設定線條寬度與顏色
setlinestyle(SOLID_LINE, 0, 3); // 粗線條
// 五環顏色與圓心座標 (標準排版)
struct { int x, y, color; } rings[5] = {
{100, 100, BLUE}, {100+2*R+GAP, 100, BLACK},
{100+4*R+2*GAP, 100, RED}, {100+R+GAP/2, 100+R, YELLOW},
{100+3*R+3*GAP/2, 100+R, GREEN}
};
for (int i = 0; i < 5; i++) {
setcolor(rings[i].color); // 邊框顏色
circle(rings[i].x, rings[i].y, R); // 畫圓 (邊框)
// 關鍵:填充內部
// 種子點選圓心 (最保險在內部),邊界顏色設為當前邊框顏色
floodfill(rings[i].x, rings[i].y, rings[i].color);
}
getch(); // 等待按鍵
closegraph(); // 關閉圖形模式,恢復文本模式
return 0;
}
floodfill 判斷邊界靠像素顏色值。若繪圖時用 setcolor(RED),填充時 border_color **必須是 RED** (或 getcolor())。若邊框有抗鋸齒/漸變色,會導致填充洩漏。setfillstyle(SOLID_FILL, FILL_COLOR) 設定填充顏色/圖案。若未設定,預設用當前繪圖顏色填充。cleardevice()。graphics.h (Borland BGI) 是 90 年代產物,**現代開發請使用**:
floodfill(x, y, border):種子點在內部,邊界色精確匹配,預設填充樣式。掌握此三要素,即可在 BGI/EasyX 中實現任意封閉圖形填色。奧運五環只需循環繪圓+填充即可。