将绘图保存在Jpanel上作为图像

时间:2012-12-18 14:08:28

标签: java image swing applet

我正在使用java socket开发绘图程序。多个用户可以绘制并将其保存为jpeg。目前我的保存图像功能只保存空白画布。它无法保存绘制的坐标。

我将在下面分享我的部分代码。 =)

我没有对我的Canvas类使用paint或paintComponent,因为我正在使用java套接字发送坐标错误。相反,我使用的是massDraw()。

    class Canvas extends JPanel {
    private int x, y;
    private float x2, y2;

    public Canvas() {
        super();
        this.setBackground(Color.white);
    }

    public void massDraw(int px, int py, int x, int y, int red, int green,
            int blue, int size) {
        Graphics g = canvas.getGraphics();
        Graphics2D g2d = (Graphics2D) g;
        g2d.setRenderingHints(myBrush);

        g2d.setStroke(new BasicStroke(size, BasicStroke.CAP_ROUND,
                BasicStroke.JOIN_BEVEL));
        g2d.setColor(new Color(red, green, blue));
        g.drawLine(px, py, x, y);

    }


}// end Canvas class

SaveJpegOP类

class saveJpegOP implements ActionListener {

    public void actionPerformed(ActionEvent e) {
        // Ask for file name
        String str = JOptionPane
                .showInputDialog(null, "Enter File Name : ");
        // save as jpeg
           BufferedImage bufImage = new BufferedImage(canvas.getSize().width, canvas.getSize().height,BufferedImage.TYPE_INT_RGB);  
           canvas.paint(bufImage.createGraphics());  



        try {
            ImageIO.write(bufImage, "jpg", new File(str + ".jpg"));
        } catch (IOException ex) {
            ex.printStackTrace();
        }

    }

}

1 个答案:

答案 0 :(得分:1)

保存空白画布,因为永远不会调用massDraw(),尤其是当您在canvas.paint(bufImage.createGraphics())中调用saveJpegOP时,不会调用它。

paint()基本上重绘整个组件,因为您决定不重写它(或paintComponent()),所以永远不会调用drawMass()并绘制空画布。

因此,您需要覆盖paintComponent()并使用适当的参数调用massDraw()。例如,参数值可以早先设置为Canvas类中的属性。