如何在android中实现Flood-fill算法。但是代码是用c语言编写的。我们可以在android中实现算法吗。有没有可用的开源代码或任何网站教程链接
user1254025
问问题
1831 次
1 回答
0
洪水填充算法是一种非常简单的递归算法。
//Initialize i and j to the place to start
floodFill(int arr[][], target_color, replace_color)
{
if(arr[i][j] == replace_color)
return;
replace(target_color, replace_color);
floodFill(int[i+1][j], target_color, replace_color);
floodFill(int[i][j+1], target_color, replace_color);
floodFill(int[i-1][j], target_color, replace_color);
floodFill(int[i][j-1], target_color, replace_color);
}
使用队列进行洪水填充。使用 asynctask 来填充填充。
参数
- 要填充的bitamp
- 用户触摸的点(x,y 坐标)
- 使用触摸的像素颜色
要更换的颜色。
public class FloodFill { public void floodFill(Bitmap image, Point node, int targetColor, int replacementColor) { int width = image.getWidth(); int height = image.getHeight(); int target = targetColor; int replacement = replacementColor; if (target != replacement) { Queue<Point> queue = new LinkedList<Point>(); do { int x = node.x; int y = node.y; while (x > 0 && image.getPixel(x - 1, y) == target) { x--; } boolean spanUp = false; boolean spanDown = false; while (x < width && image.getPixel(x, y) == target) { image.setPixel(x, y, replacement); if (!spanUp && y > 0 && image.getPixel(x, y - 1) == target) { queue.add(new Point(x, y - 1)); spanUp = true; } else if (spanUp && y > 0 && image.getPixel(x, y - 1) != target) { spanUp = false; } if (!spanDown && y < height - 1 && image.getPixel(x, y + 1) == target) { queue.add(new Point(x, y + 1)); spanDown = true; } else if (spanDown && y < height - 1 && image.getPixel(x, y + 1) != target) { spanDown = false; } x++; } } while ((node = queue.poll()) != null); } } }
于 2012-03-09T06:00:54.323 回答