บทที่ 5 การระบายสี (Filling)
การระบายสีนั้นมีเงื่อนไขอยู่ว่ารูปทรงที่ต้องการระบายนั้นจะต้องเป็นรูปปิด
และบาง Algorithm รูปทรงที่จะระบายนั้นจะต้องมีขอบหนาพอที่จะไม่ทำให้สีหลุดออกไปจากภาพ
ซึ่งมี Algorithm สำหรับการระบายสีอยู่หลาย Algorithm
แต่ในที่นี้จะพิจารณาเพียง Algorithm เดียวคือ
Flood Fill Algorithm
Flood
Fill Algorithm
หลักการของ Flood Fill Algorithm มีอยู่ว่า
รูปทรงที่ต้องการระบายจะต้องมีขอบที่หนาพอที่จะไม่ทำให้สีหลุดออกไปจากภาพได้ และจุดแรกที่ต้องการจะ
flll เรียกว่า seed point โดย seed
point นี้จะเป็นจุดใดก็ได้แต่ต้องอยู่ในภาพนั้น เท่านั้น
ขั้นตอนการระบายทำได้ดังนี้
1.
ระบายจุดแรก หรือ seed point
2.
ระบาย 4 จุดรอบ seed point (4_connected)
หรือ 8 จุดรอบ seed point (8_connected)
3.
จุดที่ 1 จากข้อ 2 จะกลายเป็น seed point ของรอบใหม่
โดยมีเงื่อนไขอยู่ว่า จะไม่ระบายจุดที่ระบายแล้วและจะไม่ระบายขอบของภาพ
4.
การระบายจะเป็นในลักษณะ recursive นั่นคือ
จะทำการระบายจุดที่ 1 ต่อไปเรื่อย
ๆจนกระทั่งจนถึงขอบของวัตถุแล้วจึงจะกลับมาระบายจุดที่เหลือซึ่งยังรอเป็น
seed point ต่อไป
Flood Fill Algorithm
Void Flood_Fill4(point x,y;Color fill_color,boundary_color) {
present_color = get_Pixel(x,y);
if (present_color != fill_color) &&(present_color !=
boundary_color) {
Fill(x,y,fill_color);
Flood_Fill(x-1,y,fill_color,boundary_color);
Flood_Fill(x,y+1,fill_color,boundary_color);
Flood_Fill(x+1,y,fill_color,boundary_color);
Flood_Fill(x,y-1,fill_color,boundary_color); } } |