[問題] 小畫家油漆桶功能

看板C_Sharp (C#)作者 (songs)時間12年前 (2013/09/07 01:08), 編輯推噓3(306)
留言9則, 5人參與, 最新討論串1/1
請問小畫家中的油漆桶 填滿顏色的功能該如何使用 看過板上的一些文章 但還是找不到解答 請教板上大大幫忙解答 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.244.25.54 ※ 編輯: AZHI 來自: 60.244.25.54 (09/07 01:11)

09/07 23:40, , 1F
Connected Component
09/07 23:40, 1F

09/08 10:13, , 2F
Flood Fill
09/08 10:13, 2F

09/08 11:20, , 3F
請問a大 我是用Picturebox來繪圖 可以達到判斷顏色這個功能
09/08 11:20, 3F
現在想先利用油漆桶填滿整個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)

09/08 16:14, , 4F
點下去後,應記住那點顏色,再往四角度擴張,遇到不同色要
09/08 16:14, 4F

09/08 16:14, , 5F
停止
09/08 16:14, 5F

09/08 16:17, , 6F
沒有設停止條件,會讓迴圈在區域內來回跑不停
09/08 16:17, 6F
我後來設了停止條件 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)

09/09 15:51, , 7F
你最後一塊code的的color是怎麼取得的?
09/09 15:51, 7F

09/11 21:40, , 8F
可參考Draw.Imaging~
09/11 21:40, 8F

09/13 07:42, , 9F
你還是沒判斷要畫的那個點
09/13 07:42, 9F
文章代碼(AID): #1IAWm0fY (C_Sharp)
文章代碼(AID): #1IAWm0fY (C_Sharp)