2017-09-22 5 views
0

J'essaie de créer une application Android qui remplit l'image. Voici le code qui inonde la zone blanche:Android flood fill - Fonctionne sur une image mais ne fonctionne pas sur une image différente

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

En utilisant this image, il remplit très bien (Le bleu est où il rempli.)

Cependant quand j'utilise this l'image qu'il fait. ne pas remplir tout.

Comment puis-je faire en sorte que cela fonctionne tout comme dans la première image? Je vous remercie!

Répondre

0

Votre code ne remplir 100% blanc, rgb(255, 255, 255) ou #FFFFFF, voir ici:

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

En raison de l'angle et anti-aliasing, peut-être quelques artefacts de compression — certains trucs image — pas tout-ish blanc les zones sont en fait blanches.
Ouvrez votre deuxième image dans un éditeur d'image (Paint fera l'affaire) et zoomez sur ces zones non remplies, utilisez le sélecteur de couleurs pour voir de quelle couleur il s'agit. Ce ne sera pas blanc pur.

Pour que votre approche de remplissage d'inondation fonctionne, vous devez être moins strict quant aux zones à remplir, par ex.

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

qui comblerait tous lumineux zones.

+0

Merci! Vous avez aidé beaucoup. –