2015-01-23 3 views
0

Я создал простую программу рисования в 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; 
      } 

     } 
     }); 
+0

Что вы рисуете? Откуда появляется графический адаптер? – MadProgrammer

+1

Я не думал, что это важно, но это Buffered Image и graphics2D = Buffered Image.createGraphics(); –

+0

Это было потому, что я думал, что вы нарушаете цепочку рисования;) – MadProgrammer

ответ

0

Вот очень гибкое решение, которое может работать:

  1. Создать graphics, который является полностью прозрачным и тем же размером, как изображение
  2. Нарисовать черные линии на ней подчистки
  3. Петля через графику. Для каждого черного пикселя скопируйте пиксель с изображения на graphics в том же месте.
  4. Рендер, что графика на оригинальной графики

Вы также сможете нарисовать стирания прямоугольники, круги и т.д. с этим. Однако вы не должны использовать его каждый раз, когда мышь перемещается, потому что это займет слишком много времени. Вы можете временно нарисовать какой-то цвет в этих местах, чтобы компенсировать это.

+0

Мне нравится этот ответ! Есть ли какая-то особая причина, по которой мой код не будет работать? Я что-то упускаю? –

+0

@ ZacheryUtt Вы пробовали этот путь еще? Я запутался, какой код не будет работать – FlyingPiMonster

+0

@ZacheryUtt Я еще не запускал код, но похоже, что вы рисуете цвет вместо фона по графике. – FlyingPiMonster

Смежные вопросы