Bonjour.
J'ai un soucis avec mon canvas, je souhaiterai enregistrer ce qu'il y a dedans dans un fichier .jpeg.
Mais, lorsque j'ouvre mon fichier .jpeg, ça me met un dessin tout noir (avec les dimensions de mon canvas)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.geom.Rectangle2D;
import java.awt.geom.Ellipse2D;
import java.io.*; //File et IOException
 
 
 
public class Main extends JFrame implements MouseListener, MouseMotionListener {
	int x0=0, y0=0,taille=4;
    Canvas c;
	public static void main(String[] args){
		new Main();
	}
 
	public Main(){
		super("Dessin");
	    //Frame
		this.setSize(850,600);
		this.setVisible(true);
 
		//Radios taille du trait
		JRadioButton petit = new JRadioButton("Petit");
		petit.addChangeListener(new ChangeListener(){
			public void stateChanged(ChangeEvent e){
				taille = 2;}});
		JRadioButton moyen = new JRadioButton("Moyen");
		moyen.addChangeListener(new ChangeListener(){
			public void stateChanged(ChangeEvent e){
				taille = 4;}});
		JRadioButton grand = new JRadioButton("Grand");
		grand.addChangeListener(new ChangeListener(){
			public void stateChanged(ChangeEvent e){
				taille = 6;}});
 
		//JToolBar
		JToolBar bar = new JToolBar();
		this.getContentPane().add(bar,BorderLayout.PAGE_START);
		bar.setFloatable(true);
		bar.add(petit);
		bar.add(moyen);
		bar.add(grand);
 
		//Groupement des radios tailles
		ButtonGroup bg = new ButtonGroup();
		bg.add(petit);
		bg.add(moyen);
		bg.add(grand);
		moyen.setSelected(true);
 
		//Sauvegarder
		JButton sauvegarde = new JButton("Sauvegarder");
		bar.add(sauvegarde);
		sauvegarde.addActionListener(new SauvegardeListener());
 
		//Canvas du dessin
		c = new Canvas();
		this.getContentPane().add(c);
		c.setBackground(Color.WHITE);
		c.addMouseListener(this);
	        c.addMouseMotionListener(this);
 
 
	}
 
	public void saveImage(Component component, File destination){
		BufferedImage image = new BufferedImage(component.getWidth(), component.getHeight(), BufferedImage.TYPE_INT_RGB);
 
		Graphics2D g2d = image.createGraphics();
		component.paint(g2d);
		g2d.dispose();
 
		try {
			ImageIO.write(image, "jpeg", destination);
		} catch (IOException e) {      
			e.printStackTrace();
		} 
	}
 
	private class SauvegardeListener implements ActionListener{
		public void actionPerformed(ActionEvent e){
			File f = new File("C:/Documents and Settings/Administrateur/Bureau/test.jpeg");
			saveImage(c, f);
		}
	}
 
 
	//Lorsqu'on presse la souris
	public void mousePressed(MouseEvent e){
		x0 = e.getX();
		y0 = e.getY();
	}
 
	//Lorsqu'on bouge la souris avec le curseur enfoncé
	public void mouseDragged(MouseEvent e){
		int x,y;
 
		Graphics2D g = (Graphics2D) e.getComponent().getGraphics();
		x = e.getX();
		y = e.getY();
 
		g.setStroke(new BasicStroke(taille)); //Epaisseur du trait
		g.drawLine(x0, y0, x, y);
		x0=x; y0=y;
	}
 
	public void mouseEntered(MouseEvent e) {}
	public void mouseExited(MouseEvent e) {}
	public void mouseReleased(MouseEvent e) {}
	public void mouseMoved(MouseEvent e) {}
	public void mouseClicked(MouseEvent e) {}
 
	public void windowClosed(WindowEvent e){ System.exit(0);} //Terminer le processus lors de la fermeture
}

Je n'ai pas redéfini la méthode paint(), ça vient peut être de ça, mais quand je l'a redéfinie en mettant un trait dedans, ça ne marche quand même pas ..

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
    public void paint(Graphics g) {
    	// Tracer une ligne rouge entre les points (x=5, y=30) et (x=50, y=70)
    	Graphics2D g2d = (Graphics2D) g;
    	g2d.setColor(Color.red);
    	g2d.drawLine(5, 30, 50, 70);
    }

Merci d'avance pour votre aide, car je ne comprend pas mon problème.