Dibujo sobre una imagen en Java

Muneeb Mughal:

Estoy desarrollando una aplicación para un cliente y me obliga a extraer algunas líneas sobre una imagen. He buscado sobre stackoverflow un poco de ayuda y logró llamar la línea utilizando JLayeredPane pero las líneas anteriores se desvanecen cada vez que haga clic para hacer nuevas líneas. He aquí el fragmento de código (no es exactamente la mía).

public class Test2
{
private JFrame frame = new JFrame();
private JLayeredPane lpane = new JLayeredPane();
private JPanel panel1 = new MyPanel("C:\\Users\\mumm\\Desktop\\map.jpg");
private JPanel panel2 = new JPanel();

public Test2()
{
    frame.setPreferredSize(new Dimension(600, 400));
    frame.setLayout(new BorderLayout());
    frame.add(lpane, BorderLayout.CENTER);
    lpane.setBounds(0, 0, 600, 400);
    panel1.setBounds(0, 0, 600, 400);
    panel1.setOpaque(true);

    panel2.setBounds(200, 100, 100, 100);
    panel2.setOpaque(false);
    lpane.add(panel1, 0, 0);
    lpane.add(panel2, 1, 0);
    frame.pack();
    frame.setVisible(true);
}


class MyPanel extends JPanel  implements MouseListener, MouseMotionListener 
{
    private String imageFile;
    private int index = 0;
    private Point[] arr = new Point[100000];

    public MyPanel(String imageFile) 
    {
        this.imageFile = imageFile;
        this.addMouseListener(this);
        this.addMouseMotionListener(this);
    }
    @Override
    protected void paintComponent(Graphics g) {

        Image img = new ImageIcon(imageFile).getImage();
        g.drawImage(img, 0, 0, this);

        for (int i = 0; i < index - 1; i++)

            g.drawLine(arr[i].x, arr[i].y, arr[i + 1].x, arr[i + 1].y);
    }


    @Override
    public void mousePressed(MouseEvent e)
    {
        arr[index] = new Point(e.getX(), e.getY());
        index++;
        System.out.println(index);
        repaint();
    }

    @Override
    public void mouseReleased(MouseEvent e)
    {
        arr = new Point[100000];
        index = 0;
    }

    @Override
    public void mouseDragged(MouseEvent e)
    {
        arr[index] = new Point(e.getX(), e.getY());
        index++;
        System.out.println(index);
        repaint();
    }

}


public static void main(String[] args) {
    new Test2();
}

Básicamente lo que quiero es algo como esto.

Necesario

Cualquier tipo de ayuda será apreciada.

Johan periodo:

Creo que es debido a que limpie la matriz en mouseReleasedque se desencadena después de que el último evento de arrastre ha dibujado la línea.

Se podría ver esto si se llama a partir de repintado mouseReleased.

Detener la limpieza de la matriz y que debería estar bien.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=389515&siteId=1
Recomendado
Clasificación