찾다

 >  Q&A  >  본문

Android 图片涂鸦橡皮擦功能

最近在做一个画板功能,大致的不同颜色画笔、不同粗细已经实现。
参照的是该教程:android-drawing-app

现在要做的功能是,从相册或者相机导入图像,然后在上面涂涂画画,由于橡皮擦的功能其实是一个白色的paint来实现的。因此用了橡皮擦,底层的图像也被画上白色了。想要的效果是橡皮擦只对新画上去的线条有作用,并不影响导入的图像。

网上大致查找资料,好像可以使用两个图层来实现,导入的图像作为最底层,新画的线条在上一层,因此橡皮擦也不会影响到最底层的图像。

导入的图片(bitmap为导入的图片):

 drawCanvas.drawBitmap(bitmap, 0, 0, null);

橡皮擦功能:

public void setErase(boolean isErase) {
        this.isErase = isErase;
        if (isErase) {
            drawPaint.setColor(Color.WHITE);
//            drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
        } else {
            drawPaint.setColor(tempColor);
            drawPaint.setXfermode(null);
        }

请问如何设置两个图层,并让后续的线条只操作在第二个图层上?这里有点卡住了。或者有类似功能的demo吗?
十分感谢

PHP中文网PHP中文网2771일 전955

모든 응답(1)나는 대답할 것이다

  • 天蓬老师

    天蓬老师2017-04-17 17:26:19

    레이어를 언급하셨으니 이미지를 레이어로 그려보시면 어떨까요?
    1. 겹치는 뷰가 있는 레이어를 만들고, 레이어의 터치 이벤트를 처리하고, 이미지를 내보낼 때 비트맵 데이터를 병합할 수 있습니다.
    2. 마찬가지로 각 레이어의 이미지 데이터를 결합하는 데에도 하나의 뷰만 사용할 수 있습니다. 모두 목록에 저장되며, 그릴 때 순서대로 그려지며, 맨 위 레이어가 수정 가능합니다. 마지막으로 이미지를 내보낼 때 데이터가 병합됩니다.

    소위 이미지 처리는 데이터 수집입니다. 계층적으로 처리하려면 각 데이터 조각을 다른 저장 단위에 독립적으로 저장해야 나중에 데이터 단위를 수정할 때 영향을 미치지 않습니다. 이전 데이터. 저도 그런 드로잉 보드를 만들었지만 예제를 찾을 수 없는 것 같지만 이것이 아이디어입니다. 행운을 빕니다

    회신하다
    0
  • 취소회신하다