在ImageView中选择相似的彩色像素,类似于Photoshop中的魔棒工具

时间:2014-01-03 10:07:16

标签: android image bitmap selection

我也尝试过OpenCV-Sample-Color-blob检测代码,但实际上我想要的是这可以在Bitmap上工作,而不是相机视图。

我尝试过以下代码,

public boolean onTouch(View v, MotionEvent event)
    {
        int x = (int)event.getX();
        int y = (int)event.getY();

        Log.e("Test", "Touch image coordinates:"+x+" , "+y);
        Log.e("Test", "color:"+bimp.getPixel(x, y));

        int xclear = bimp.getPixel(x, y) ;

        int xclear_red = Color.red(xclear) ;
        int xclear_blue = Color.blue(xclear) ;
        int xclear_green = Color.green(xclear) ;

        if ((x < 0) || (y < 0) || (x > bimp.getWidth()) || (y > bimp.getHeight())) 
            return false;

        for(int x1=0 ; x1<bimp.getWidth() ; x1++)
        {
            for(int y1=0 ; y1<bimp.getHeight() ; y1++)
            {
                int px = bimp.getPixel(x1, y1);
                int px_red = Color.red(px) ;
                int px_blue = Color.blue(px) ;
                int px_green = Color.green(px) ;

                if((px_red+10 > xclear_red) && (px_red -10 < xclear_red))
                {
                    if((px_blue > xclear_blue) && (px_blue-10 < xclear_blue))
                    {
                        if((px_green+10 > xclear_green) && (px_green-10 < xclear_green))
                        {
                            bimp.setPixel(x1, y1, Color.TRANSPARENT);
                        }
                    }
                }
            }

            if(x1 == bimp.getWidth()-1 )
                img.setImageBitmap(bimp);
        }

        return false; // don't need subsequent touch events
    }

正在制作类似(+或 - 10)像素颜色的像素,我已触及透明。

但我真正想要的是(如下图所示)。

enter image description here

用于选择相似的彩色像素(用红色边框显示)作为Photoshop中魔杖工具的动作。这样我就可以使选定的部分透明或裁剪。

请建议我一些想法。谢谢你。

1 个答案:

答案 0 :(得分:0)

我认为你需要的是泛洪填充算法。它可能对你有用。

http://en.wikipedia.org/wiki/Flood_fill