我正在使用Java。
我正在開發一個繪圖程序,「Paint Can」工具使用Flood Fill算法,但它太昂貴了。算法,洪水填充(深度優先搜索)
下面是代碼:
private int[] dx = { -1, 0, 1, 0 };
private int[] dy = { 0, 1, 0, -1 };
public void floodFill(int x, int y, Color target_color, Color replacement_color) {
Stack<Integer[]> stack = new Stack<Integer[]>();
if (imageBuffer.getRGB(x, y) == replacement_color.getRGB())
return;
stack.push(new Integer[] { x, y });
while (!stack.isEmpty()) {
Integer[] aux = stack.peek();
imageBuffer.setRGB(aux[0], aux[1], replacement_color.getRGB());
stack.pop();
for (int i = 0; i < 4; i++) {
if (imageBuffer.getRGB(aux[0] + dx[i], aux[1] + dy[i]) == target_color.getRGB())
stack.push(new Integer[] { aux[0] + dx[i], aux[1] + dy[i] });
}
}
}
有人可以幫我做這個更有效率?
需要(對於1020x700像素圖像)大約1200ms執行。
我認爲最主要的是你需要一個更好的算法。 http://en.wikipedia.org/wiki/Flood_fill是一個很好的資源。有一些微觀優化你可以做到(例如'replacement_color.getRGB()'每次評估,因爲它'target_color.getRGB()',但我不認爲這會有很大的不同。 –