Je développe un programme de dessin en utilisant java socket. Plusieurs utilisateurs peuvent dessiner et enregistrer en tant que jpeg. Actuellement, la fonction Enregistrer l'image enregistre uniquement un canevas vierge. Il ne peut pas enregistrer les coordonnées tracées.Enregistrer le dessin sur Jpanel comme image
Je partage une partie de mon code ci-dessous. =)
Je n'ai pas utilisé paint ou paintComponent pour ma classe Canvas à cause de l'utilisation de java socket je rencontre des erreurs de coordonnées. Au lieu de cela, j'utilise 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
classe 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();
}
}
}
Où appelez-vous 'massDraw'? Quelle est la variable 'canvas'? Vous ne devriez jamais appeler 'getGraphics()', cela conduit toujours aux problèmes que vous décrivez. Je ne peux absolument pas comprendre pourquoi vous ne pouvez pas surcharger 'paintComponent' –
1. massDraw est appelé dans l'autre fichier de classe publique (Client). Lorsque le client reçoit la coordonnée, il dessine les points sur le canevas des autres utilisateurs. –
2. canvas varible est un canevas de canvas = new Canvas(); –