Bonjour,
je rencontre un problème génant de performances de l'affichage sur un début d'application graphique.
La fenêtre principale est composée d'un JPanel et d'un JSlider, le but étant d'afficher une image dans le JPanel pour chaque "cran" du JSlider.
Je possère un répertoire contenant une 40aine d'images (en bmp ou png), la taille du JSlider est donc bien sûr adaptée au nombre d'images du répertoire.
J'ai défini une classe JPanelImage qui étend JPanel et qui possède une méthode paint(Graphics) qui va bien pour afficher l'image adaptée à la taille du JPanel.
Cette classe possède aussi une méthode setImage(Image) pour changer l'image en fonction du cran du slider.
Je charge toutes les images en mémoire dans un ArrayList à la création de la fenêtre principale grâce à la méthode ImageIO.read(file), puis en fonction du cran du slider choisi, j'affiche telle ou telle image (ex: panelImage.setImage(images.get(slider.getValue())); )
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 public class JPanelImage extends JPanel { Image image; public JPanelImage() { this.image = null; } public void setImage(Image image){ this.image = image; this.repaint(); } public void paint( Graphics g ) { super.paintComponent(g); g.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), null); } }
Avec des bmp, le rafraichissement du panel est fluide (utilisation processeur ~15%) mais avec des png c'est la catastrophe, le slider "rame" et le processeur s'affole (~50% d'utilisation processeur et c'est un dual core...).
Auriez-vous des idées pour améliorer significativement les performances ?
Je précise que j'ai essayé la méthode Toolkit.getDefaultToolkit().getImage(image), mais elle ne gère pas les bmp et l'affichage des png est fluide mais l'image n'est pas chargée directement (surement à cause du fait que getImage(image) charge l'image en arrière-plan ?).
Merci d'avance pour votre aide.
Partager