gpt4 book ai didi

java - 将 Jpanel 上的绘图保存为图像

转载 作者:太空宇宙 更新时间:2023-11-04 07:53:49 26 4
gpt4 key购买 nike

我正在使用java套接字开发一个绘图程序。多个用户可以绘制并将其保存为 jpeg。目前我的保存图像功能仅保存空白 Canvas 。无法保存绘制的坐标。

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

我没有在 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();
}

}

}

最佳答案

保存空白 Canvas 是因为 massDraw() 从未被调用,尤其是当您在 saveJpegOP 中调用 canvas.paint(bufImage.createGraphics()) 时不会调用它。

paint() 基本上重绘整个组件,并且由于您决定不覆盖它(或 paintComponent()),因此永远不会调用 drawMass() 并绘制空 Canvas 。

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

关于java - 将 Jpanel 上的绘图保存为图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13934734/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com