Java - 使用 Line2D 擦除



我用java创建了一个简单的绘画程序。我在使用擦除工具时遇到了问题。我不能允许用户只用白色油漆来擦除,因为我希望背景是图片。无论如何,每当用户用油漆绘制时,我都会尝试解决这个问题,试图让它将 Line2D 添加到数组列表中。然后,我希望用户在程序上画一条白线来显示正在擦除的内容。当白线进入图形时,我想得到一个结果。这是我的代码:

 al = new ArrayList<Line2D>();

    addMouseMotionListener(new MouseMotionAdapter(){
        public void mouseDragged(MouseEvent e){
            if(graphics2D != null && paint.erase==false)
            {
                currentX = e.getX();
                currentY = e.getY();
                graphics2D.setStroke(new BasicStroke(size));
            graphics2D.drawLine(oldX, oldY, currentX, currentY);

            repaint();
            oldX = currentX;
            oldY = currentY;

        Line2D test=new Line2D.Float(oldX, oldY, currentX, currentY);
        al.add(test);
            //New system
        }
            if (paint.erase==true)
            {
                currentX = e.getX();
                currentY = e.getY();
                graphics2D.setStroke(new BasicStroke(size));
                graphics2D.drawLine(oldX, oldY, currentX, currentY);
                repaint();

                for( Line2D name : PadDraw.al ) {
                    boolean result = Line2D.linesIntersect(oldX,oldY,currentX,currentY,name.getX1(),name.getY1(),name.getX2(),name.getY2());
                    if (result==true)
                    {
                        System.out.println("paint found");
                    }
                    }

                oldX = currentX;
                oldY = currentY;
            }
        }
        });

这是一个非常灵活的解决方案,可能会起作用:

  1. 创建一个完全透明且大小与图片相同的graphics
  2. 在其上绘制黑线以进行擦除
  3. 循环浏览图形。对于每个黑色像素,将图像中的像素复制到同一位置的graphics上。
  4. 将该图形渲染到原始图形上

您还可以使用它绘制擦除矩形、圆形等。但是,您不应该在每次鼠标移动时都使用它,因为它会花费太长时间。您可以暂时在这些斑点上绘制一些颜色来弥补这一点。

相关内容

  • 没有找到相关文章

最新更新