2017-09-22 7 views
0

画像に塗りつぶすアンドロイドアプリを作ろうとしています。ここで、白の領域をフラッディングコードです:this画像を使用してAndroidの洪水塗りつぶし - 1つの画像では動作しますが、別の画像では動作しません

public class floodfill { 

    public void flood(Bitmap bitmap, int x, int y){ 

     int color; 
     int red; 
     int green; 
     int blue; 

     color = bitmap.getPixel(x,y); 

     red = Color.red(color); 
     green = Color.green(color); 
     blue = Color.blue(color); 

     if(red == 255){ 
      if(green == 255){ 
       if(blue == 255){ 
        bitmap.setPixel(x,y,Color.BLUE); 
       } 
      } 
     }else { 
      return; 
     } 

     flood(bitmap,x+1,y); 
     flood(bitmap,x-1,y); 
     flood(bitmap,x,y+1); 
     flood(bitmap,x,y-1); 
    } 
} 

が、それだけで罰金を記入(それがで満たされたところ青がある。)

私はthis画像を使用している場合しかし、それはありません。すべてを埋めるわけではありません。

私はこれを最初の画像のようにすべてを埋めるように機能させるにはどうすればいいですか?ありがとうございました!

答えて

0

のみ白100%rgb(255, 255, 255)、または#FFFFFFを記入しますあなたのコード、ここを参照してください:

if(red == 255){ 
    if(green == 255){ 
     if(blue == 255){ 
      bitmap.setPixel(x,y,Color.BLUE); 
     } 
    } 
} 

により角度とアンチエイリアシング、おそらくいくつかの圧縮アーチファクト—いくつかの画像のもの—ないすべての白っぽいへ領域は実際には白です。
イメージエディタ(ペイントが行う)で2番目のイメージを開き、塗りつぶされていない領域を拡大し、カラーピッカーを使用してその色を確認します。それは純粋な白ではありません。

フラッドフィルのアプローチを機能させるには、どの領域を塗りつぶすのが厳しくなくてはなりません。すべて明るい領域を埋めるだろう

if (red >= 245 || green == 245 || blue == 245) { /* ... */ } 

+0

ありがとうございました!あなたは大いに助けてくれました。 –

関連する問題