看板 C_Sharp 關於我們 聯絡資訊
請問小畫家中的油漆桶 填滿顏色的功能該如何使用 看過板上的一些文章 但還是找不到解答 請教板上大大幫忙解答 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.244.25.54 ※ 編輯: AZHI 來自: 60.244.25.54 (09/07 01:11)
kangkangtm:Connected Component 09/07 23:40
as0:Flood Fill 09/08 10:13
AZHI:請問a大 我是用Picturebox來繪圖 可以達到判斷顏色這個功能 09/08 11:20
現在想先利用油漆桶填滿整個Picturebox 程式碼如下 private void flood(int x, int y)//油漆桶mouse_move所使用 { Rectangle rect2 = new Rectangle(x, y, 5, 5); if (x >= 0 && x < width && y >= 0 && y < height) { g.FillEllipse(pencil, rect2); flood(x + 1, y); flood(x - 1, y); flood(x, y + 1); flood(x, y - 5); } } 下面四個flood遞迴函式如果只用其中一個 可以填滿picturebox的 一直線的顏色 像是這樣 if (x >= 0 && x < width && y >= 0 && y < height) { g.FillEllipse(pencil, rect2); flood(x + 1, y); } 如果flood函式放一個以上 就會進入無線迴圈的情況... ※ 編輯: AZHI 來自: 60.244.25.54 (09/08 13:03)
Abbee:點下去後,應記住那點顏色,再往四角度擴張,遇到不同色要 09/08 16:14
Abbee:停止 09/08 16:14
Abbee:沒有設停止條件,會讓迴圈在區域內來回跑不停 09/08 16:17
我後來設了停止條件 if (color == original_color) { g.FillEllipse(pencil, rect2); Draw.FillEllipse(pencil, rect2); flood(x + 1, y, fill_color, original_color); flood(x - 1, y, fill_color, original_color); flood(x, y + 1, fill_color, original_color); flood(x, y - 1, fill_color, original_color); } 如果單跑一個flood函式(往右方擴張) 是可以的 但是往四方 或兩個方向以上 就會跑入無線迴圈... ※ 編輯: AZHI 來自: 60.244.25.54 (09/08 20:33)
Litfal:你最後一塊code的的color是怎麼取得的? 09/09 15:51
AZHI:可參考Draw.Imaging~ 09/11 21:40
Abbee:你還是沒判斷要畫的那個點 09/13 07:42