Je développe une interface graphique permettant de dessiner une courbe. Je peux faire un zoom en faisant un drag and drop qui dessine un rectangle de selection sur mon image.
Ma class hérite de JPanel.
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 public void paint (Graphics g) { gdbi.drawImage(V.ligneBase, 0, 0, this); //V.ligneBase est mon image if ( md==1 ) { //en cas de drag on dessine le rectangle de selection gdbi.setColor(Color.BLUE); gdbi.drawLine (Zx1, Zy1, Zx2, Zy1); gdbi.drawLine (Zx2, Zy1, Zx2, Zy2); gdbi.drawLine (Zx2, Zy2, Zx1, Zy2); gdbi.drawLine (Zx1, Zy2, Zx1, Zy1); } g.drawImage(bi,0,0,this); //Il y a ensuite les MouseListener et MouseMotionListener }
L'image pouvant etre agrandie à la taille de l'écran, j'obtiens une méthode très lourde et lorsqu'il y a un draganddrop, le rectangle de selection n'est plus fluide du tout.
J'ai ajouté un timer pour redessiner l'image mais soit la fréquence de raffraichissement est trop faible et l'animation est saccadée, soit la fréquence est suffisante mais les calculs sont trop important et le pc peine à redessiner et on obtient à nouveau des saccades.
Le problème vient du
mais je ne sais pas comment améliorer le rendement de mon application.
Code : Sélectionner tout - Visualiser dans une fenêtre à part gdbi.drawImage(V.ligneBase, 0, 0, this);
J'ai pensé à avoir mon image en arrière plan et dessiné le rectangle sur une autre couche ce qui permettrai d'éviter de manipuler une image trop lourde mais je ne sais pas comment faire.
Si vous avez la méthode ou une autre pour la gestion de grosse image, je serais intéressé.
Partager