Java - 使用Line2D擦除

时间:2015-01-23 23:50:25

标签: java graphics

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

 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 个答案:

答案 0 :(得分:0)

这是一个非常灵活的解决方案,可能有效:

  1. 创建一个完全透明且与图片大小相同的graphics
  2. 在其上绘制黑线以进行删除
  3. 循环显示图形。对于每个黑色像素,将图像中的像素复制到同一位置的graphics
  4. 将图形渲染到原始图形
  5. 您还可以使用此方法绘制擦除矩形,圆形等。但是,每次鼠标移动时都不应该使用它,因为它需要太长时间。您可以暂时在这些位置绘制一些颜色来弥补这一点。