Androidでフラッドフィルアルゴリズムを実装する方法.ただし、コードはc言語で記述されています.Androidでアルゴリズムを実装できますか.利用可能なオープンソースコードまたはWebサイトのチュートリアルリンクはありますか
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 を使用して塗りつぶします。
パラメーター
- 埋められるビットアンプ
- ユーザーがタッチしたポイント (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 に答える