[Java] lenteur de scroll

lenteur de scroll [Java] - Java - Programmation

Marsh Posté le 04-12-2008 à 15:24:00    

Bonjour j'aimerais avoir votre avis :
 
Je crée une renderedImage qui fait 400*2000 pixels.
Elle se situe dans un scrollPane, et le scroll se fait normalement. La zone affichée de l'image doit correspondre à peu près à 400*600 pixels. (si vous suivez bien, il y a une barre de scroll verticale à cause des 2000 pixels, mais pas de barre horizontale à cause des 400 pixels qui rentrent dans l'écran)
 
Ensuite je fais un zoom, genre x5, on a donc une image de 2000*10 000 pixels.
Et là ca merde. La zone affichée doit représenter 1600*600 pixels environ, à ça scrolle lentement.
 
Le PC que j'utilise n'est pas une foudre de guerre.
A mon avis, ça ne vient pas du fait que l'image est énorme (une raison pour cela : quand je redimensionne ma fenêtre pour que la zone affichée à l'écran prenne moins de pixels, ça va beaucoup mieux)
 
Donc je pense que ça vaut le coup d'essayer le double buffering hardware, non ?
J'ai lu les tutos de Sun et une FAQ sur le net qui explique dans un exemple simple comment implementer cela, mais ca me parait super compliqué, surtout quand ton prog est déjà fini.
 
En gros je veux juste que quand Java doit dessiner l'image (à la rigueur tout mon scrollPane) il utilise un double buffer hardware pour que ca ne ralentisse pas.
Je veux pas l'implémenter sur tout mon prog, ca sert à rien.
 
Il y a surtout un truc qui m'échappe :
Dans les exemples que j'ai vu, il y a souvent ça :
 

Code :
  1. mainFrame.createBufferStrategy(numBuffers);
  2.             BufferStrategy bufferStrategy = mainFrame.getBufferStrategy();
  3.                 for (int i = 0; i < numBuffers; i++) {
  4.                     Graphics g = bufferStrategy.getDrawGraphics();
  5.                     if (!bufferStrategy.contentsLost()) {
  6.                         // do what you want with g (draw, setColor, etc etc)
  7.                         bufferStrategy.show();
  8.                         g.dispose();
  9.                     }
  10.                }


 
Je n'utilise pas d'objet Graphics moi.
J'utilise setSample sur une tiledImage, que je transforme en renderedImage.
Du coup je suis un peu paumé, si quelqu'un qui connait le schmilblick peut m'aider, ca serait génial.
d'avance merci !
 

Reply

Marsh Posté le 04-12-2008 à 15:24:00   

Reply

Marsh Posté le 04-12-2008 à 16:29:08    

Le double-buffering ne t'aidera pas à rendre ton programme plus rapide, ça sert à le faire paraître plus fluide en évitant de montrer les opérations de peinture successives, mais en fait c'est plus lent que de peindre directement ton image.
 
Enfin bon si tu veux scroller une image de 1600x600, tu es condamné à la lenteur je pense (mais ma dernière expérience sur le sujet était sur pentium III 500mhz, donc c'est à vue de nez). Après je n'ai pas trop compris, quand tu zoomes, la zone d'affichage change de taille ou pas ? Si tu as toujours 400x600 pixels, ça ne devrait pas être beaucoup plus lent que sans zoom, à moins que ton programme soit codé avec les pieds (par exemple tu fais des calculs qui ne te servent pas, genre tu génères une grande image dont tu ne peints qu'une petite partie).


---------------
Any sufficiently complex bug is indistinguishable from magic.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed