2017-09-22 84 views
0

我试图制作一个填充图片的android应用程序。这里是洪水的白色区域中的代码:Android Flood填充 - 适用于一个图像,但不适用于不同的图像

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图像,它只是罚款罢了(蓝色是它在填写。)

然而,当我使用this像它一样。没有填满一切。

我怎么能得到这个工作,所以它就像第一张照片一样填充所有内容?谢谢!

回答

0

您的代码将只填写100%白色,rgb(255, 255, 255),或#FFFFFF,在这里看到:

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

由于角度和抗锯齿,也许有些压缩失真—一些形象的东西—并非所有白ISH地区实际上是白色的。
在图像编辑器中打开你的第二张图片(油漆会做)并放大那些未填充的区域,使用颜色选择器来查看它是什么颜色。这不会是纯白的。

为了使您的填充填充方法奏效,您必须对填充的区域不太严格,例如,

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

这将填补所有明亮领域。

+0

谢谢!你帮了很多忙。 –