bonjour,
j'utilise une bufferedimage et je trace à l'intérieur des lignes, le problème c'est que l'image s'efface à chaque nouvel appel pour dessiner des lignes ? ça peut venir d'où ?
Merci
Greg
bonjour,
j'utilise une bufferedimage et je trace à l'intérieur des lignes, le problème c'est que l'image s'efface à chaque nouvel appel pour dessiner des lignes ? ça peut venir d'où ?
Merci
Greg
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
Que la force de la puissance soit avec le courage de ta sagesse.
où trouve t-on une boule de cristale ? j'en veux une !!!! lol
sinon je crois que je me plante complètement de méthode, je dois dessiner des lignes au fur et à mesure avec cadence à l'écran, je dessine zone par zone, un peu comme des lettres... je sais pas si je suis bien clair !!
à l'écran je n'ai que soit la dernière partie soit rien du tout ! j'ai simplifié abcd c'est calculé en fait
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 public void paintComponent(Graphics g) { super.paintComponent(g); Dimension dim = getSize(); int w = dim.width; int h = dim.height; bi = (BufferedImage)createImage(w, h); big = bi.createGraphics(); big.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); big.setColor(Color.RED); for (int t= 1; t< nblines; t++){ big.draw(new Line2D.Double(a,b,c,d); g.drawImage(bi,a,b,c,d,a,b,c,d,this); } } }
merci
à chaque passage dans paint j'ai de nouvelle ligne à afficher, je ne désire pas effacer les anciennes
Procédure générale, parmi d'autres :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 1. créer une image (BufferedImage par exemple) 2. extraire l'objet Graphics associé à l'image 3. dans un Thread, faire successivement : 3.1 afficher un trait sur le Graphics 3.2 appel de repaint sur l'objet contenant la méthode "paintComponent" 3.3 faire une pause 3.4 a la fin du Thread, faire un "dispose" sur le Graphics 4. dans paintComponent, afficher uniquement l'image créée à l'étape 1.
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
Que la force de la puissance soit avec le courage de ta sagesse.
je comprends pas à quoi sert le Thread ? tu as un lien pour exemple ?
Pense à la FAQ du site![]()
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
Que la force de la puissance soit avec le courage de ta sagesse.
cela veut dire qu'il faut enregistrer toutes les formes dans des éléments comme des taleaux puis les afficher ? on ne peut pas écrire dans une bufferedimage sans qu'elle ne s'efface ?
L'image ne peut pas s'effacer sauf si tu la reinitialises ou si tu effaces son contenu manuellement. Au nouveau pas de temps, tu te contentes de dessiner la nouvelle ligne. A priori la seule chose que tu as besoin de stocker c'est l'endroit ou dessiner la nouvelle ligne (voir carrement pas du tout si ceci peut se calculer en fonction du pas de temps et du temps actuel).
La Thread sert a faire l'ajout de ligne a un pas de temps regulier, ce qui est ce que tu demandes dans la description de ton probleme.
je dois dessiner des lignes au fur et à mesure avec cadence à l'écran
Merci de penser au tagquand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
Voici un exemple trivial. Un clic dans la fenêtre démarre le dessin, un autre clic met l'animation en pause. Comme tu peux le voir, toute la logique de construction du dessin se trouve dans le Thread (méthode "run") :
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 import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import javax.swing.JFrame; import javax.swing.JPanel; public class Dessin extends JPanel implements Runnable { public static void main( String[] arg ) { Dessin inter = new Dessin(); JFrame frame = new JFrame(); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); frame.getContentPane().add( inter ); frame.pack(); frame.setVisible( true ); } private Thread animator; private BufferedImage image; private Graphics2D graph; private final static int largeur = 800; private final static int hauteur = 600; private boolean pause = true; public Dessin() { animator = new Thread( this ); image = new BufferedImage( largeur, hauteur, BufferedImage.TYPE_INT_ARGB ); graph = image.createGraphics(); graph.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON ); animator.start(); addMouseListener( new MouseAdapter() { public void mouseClicked( MouseEvent event ) { swap(); } }); } @Override public Dimension getPreferredSize() { return new Dimension( largeur, hauteur ); } public synchronized void swap() { pause = !pause; notify(); } public void run() { Thread current = Thread.currentThread(); int x = 0; int xOld = 0; int y = 0; int yOld = 0; graph.setColor( Color.BLACK ); while( animator == current ) { if( pause ) { synchronized( this ) { while( pause ) { try { wait(); } catch( InterruptedException ex ) {} } } } x = (int) ( Math.random() * largeur ); y = (int) ( Math.random() * hauteur ); graph.drawLine( xOld, yOld, x, y ); repaint(); xOld = x; yOld = y; try { Thread.sleep( 200 ); } catch( InterruptedException exc ) {} } } public void paintComponent( Graphics g ) { super.paintComponent( g ); g.drawImage( image, 0, 0, this ); } }
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
Que la force de la puissance soit avec le courage de ta sagesse.
c'est super sympa, je galère depuis 3 jours là dessus ...![]()
Partager