使用Android Paint的背景图像颜色检测

当我开始绘画的时候,它把整个背景都染上了,我的意思是它应该只画白点。 应用程序屏幕截图如下。 使用Android Paint,我只想绘制背景可绘制的[pandas]白色斑点,并跳过任何其他颜色。

onDraw()函数是:

 protected void onDraw(Canvas canvas) { canvas.drawPath(path, paint); canvas.drawPath(circlePath, circlePaint); for (Pair<Path,Integer> path_clr : path_color_list ){ paint.setColor(path_clr.second); canvas.drawPath( path_clr.first, paint); } for (Pair<Path,Integer> path_clr : circular_path_color_list ){ circlePaint.setColor(path_clr.second); canvas.drawPath( path_clr.first, paint); } } 

onTouchEventfunction是:

 public boolean onTouchEvent(MotionEvent event) { float pointX = event.getX(); float pointY = event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: circlePath.reset(); path.moveTo(pointX, pointY); return true; case MotionEvent.ACTION_MOVE: path.lineTo(pointX, pointY); circlePath.reset(); circlePath.addCircle(pointX, pointY, 10, Path.Direction.CW); break; case MotionEvent.ACTION_UP: circlePath.reset(); break; default: return false; } postInvalidate(); return true; } 

颜色活动

Solutions Collecting From Web of "使用Android Paint的背景图像颜色检测"

你所描述的东西叫做掩蔽。 你需要一个面具(白色区域)和一个蒙面的图像(你的笔触)。 绘画时,必须使用面具将笔触剪裁成面具的形状。 它可以使用PorterDuff模式完成。 看伪代码:

 Bitmap panda; Bitmap whiteAreas; Bitmap strokes; Canvas strokesCanvas; Paint paint; private void init() { strokesCanvas = new Canvas(strokes); paint = new Paint(); } private void addStroke(Path stroke){ paint.setXfermode(null); strokesCanvas.drawPath(stroke,paint); invalidate(); } @Override public void draw(Canvas canvas) { paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); strokesCanvas.drawBitmap(whiteAreas,0,0,paint); paint.setXfermode(null); canvas.drawBitmap(panda,0,0,paint); canvas.drawBitmap(strokes,0,0,paint); } 

请参阅以下链接了解更多信息: http : //ssp.impulsetrain.com/porterduff.html


编辑:这是一个图像如何工作。 蓝色区域应该是透明的。 蒙版和笔画之间的乘法就是所谓的蒙板。

在这里输入图像说明