1
我在java中製作一個像素藝術編輯器,只是爲了好玩,而我遇到了一個問題。當我嘗試填充函數時發生問題。這裏是代碼如何製作照片編輯器的填充方法?
private void fill(int x, int y){
Color beforeColor = img[x][y];
img[x][y] = foregroundColor;
if(x-1 >= 0){
if(img[x-1][y] == beforeColor){
fill(x-1, y);
}
}
if(x+1 >= 0){
if(img[x+1][y] == beforeColor){
fill(x+1, y);
}
}
if(y-1 >= 0){
if(img[x][y-1] == beforeColor){
fill(x, y-1);
}
}
if(y+1 >= 0){
if(img[x][y+1] == beforeColor){
fill(x, y+1);
}
}
}
img是awt Color對象的數組。
該方法基本上檢查相同顏色的像素的指定像素周圍,然後再次運行該方法進行下一個和下一個,直到整個區域被填充。
如果你知道計算機中的堆棧和遞歸的任何內容,那麼你可能會意識到這將很快導致stackoverflowror並暫停程序。我試圖弄清楚的是圍繞遞歸的方式。有人能請我指出正確的方向圍繞遞歸和stackoverflowerror?預先感謝能夠幫助的人。
這是非常有幫助的,因爲我通常不會使用列表,並會有從來沒有想過這個。我確實改變了一些東西,因爲我需要的東西存在一些錯誤/誤解,但它效果很好。另外,爲什麼基本上使用Point對象的新類? – pokeyOne
好吧,說實話,我從來沒有找到那個班,當我需要它。除此之外,我經常想用座標來存儲額外的數據,在這種情況下,一個輔助類很容易實現 - 但是對於這種情況,Java Point類很好用。 – sleepy42