背景图像颜色检测与Android油漆。

时间:2022-11-21 16:23:19

When I start painting , it colors the whole background , I mean it should only paint the white spots. Application screenshot is as follows. Using Android Paint ,I want to paint only white spots on background-drawable[Panda] and skip any other color.

当我开始画的时候,它会给整个背景上色,我的意思是它应该只画那些白色的点。应用程序截图如下。使用Android绘制,我希望只在后台绘制的[熊猫]上绘制白点,并跳过任何其他颜色。

onDraw() function is:

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

and onTouchEvent function is:

和onTouchEvent函数是:

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

背景图像颜色检测与Android油漆。

1 个解决方案

#1


6  

The thing you're describing is called masking. You need a mask (white areas) and a masked image (your strokes). When drawing, you have to use the mask to cut your strokes to a shape of the mask. It can be done using PorterDuff modes. See the pseudocode:

你描述的东西叫做掩蔽。你需要一个蒙版(白色区域)和一个蒙版图像(你的笔画)。当你画画时,你必须用蒙版把你的笔画剪成蒙版的形状。它可以使用波特达夫模式。伪代码:

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

See the link for more info: http://ssp.impulsetrain.com/porterduff.html

更多信息请参见链接:http://ssp.impulse setrain.com/porterduff.html


EDIT: Here's an image how it works. Blue areas should be transparent. Multiplication between the mask and the strokes is what's called masking.

编辑:这是它如何工作的图片。蓝色区域应该是透明的。面具和笔画之间的乘法就是所谓的掩蔽。

背景图像颜色检测与Android油漆。

#1


6  

The thing you're describing is called masking. You need a mask (white areas) and a masked image (your strokes). When drawing, you have to use the mask to cut your strokes to a shape of the mask. It can be done using PorterDuff modes. See the pseudocode:

你描述的东西叫做掩蔽。你需要一个蒙版(白色区域)和一个蒙版图像(你的笔画)。当你画画时,你必须用蒙版把你的笔画剪成蒙版的形状。它可以使用波特达夫模式。伪代码:

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

See the link for more info: http://ssp.impulsetrain.com/porterduff.html

更多信息请参见链接:http://ssp.impulse setrain.com/porterduff.html


EDIT: Here's an image how it works. Blue areas should be transparent. Multiplication between the mask and the strokes is what's called masking.

编辑:这是它如何工作的图片。蓝色区域应该是透明的。面具和笔画之间的乘法就是所谓的掩蔽。

背景图像颜色检测与Android油漆。