2012-03-09 14 views
1

どのようにアンドロイドでフラッドフィルアルゴリズムを実装するのですか?コードはc言語で書かれています。アンドロイドのアルゴリズムを実装しています。オープンソースコードがありますか、ウェブサイトのチュートリアルリンクアンドロイドでflood-fillアルゴリズムを実装する方法は?

+0

詳細を教えてください。 – PearsonArtPhoto

+0

私はアンドロイドの白いイメージビューを持っています。このalgorthim'Flood-fill "を使用して色を塗りつぶす –

+0

ndkはAndroidでcを使用するために使用できますhttp://developer.android.com/sdk/ndk/index.html –

答えて

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を使用します。

パラメータ

  1. ユーザタッチ(X、Y cordinates)の使用は、
  2. カラー交換するにタッチピクセルの

  3. カラー
  4. ポイントを充填するbitamp。

    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); 
    } 
        } 
        } 
    
+0

私はアンドロイドプログラムで実装する必要がありますどのような例のlittlebitですか? –

+3

私はいくつかの再帰の後にStackOverflowErrorを期待したい;)より良い非再帰的なアルゴでしょう。 –

関連する問題