IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Comment accelerer le GradientPaint


Sujet :

AWT/Swing Java

  1. #1
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut Comment accelerer le GradientPaint
    Arg je me suis trompé de forum... Si un modérateur voulait bien mettre cette question dans le forum SWING... merci, et désolé.

    Bonjour,

    Dans un JScrollPane, j'ai mis un assez grand JPanel avec plein de rectangles que je dessine avec des GradientPaint ; je trouve que ça fait joli.

    Malheureusement, j'observe qu'ils ralentissent beaucoup le défilement par les ascenseurs, qui n'est plus très fluide ; je le vois parce que lorsque je les enlève, les ascenseurs glissent beaucoup mieux.

    Existe-t-il des combines particulières pour dessiner plus vite avec ces choses ?... Je m'occupe déjà du clip ; pour chaque portion je refais un GradientPaint, et je fais le fillRect qui va bien... (d'après mes essais c'est le fillRect qui prend du temps...). À partir de là que faire ?

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Direction le blog de Gfx sur java.net: http://weblogs.java.net/blog/gfx/arc..._gradient.html


    Grosso modo tu crées une petite image de ton gradient (enfintout ça marche si ton gradient est horizontal ou vertical, s'il est diagonal tu peux toujours en créer l'image entière puis utiliser celle ci à chaque repaint, ce sera déjà un poil moins lourd que de recalculer un gradient), puis dans le paintComponent tu remplis ta shape avec x drawImage de l'image que tu as en mémoire...

  3. #3
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    Oui, très intéressant, merci.

    Cependant, si je vois bien le principe, je ne comprends pas très bien les règles pour déterminer la taille du BufferedImage. Il parle d'un image de 1 pixel horizontalement ou verticalement, dans l'exemple je comprends qu'il y en a 2 horizontalement et la taille du panel verticalement... mais même avec deux pixels, je ne comprends pas comment le système arrive à former un dégradé !??

    Et puis, une bonne âme pourrait-elle me dire ce que sont ces OpenGL, Direct3D, DirectDraw et software, que tout le monde à l'air de connaître, sauf moi ?

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    OpenGL et Direct3D sont les deux Toolkits 3D prédominants sur l'informatique actuellement: Direct3d étonnemmant pour Microsoft et OpenGL (comme son nom l'indique) et une initiative libre. Ils proposent également des méthodes de rendus pour la 2D en hardware (vu que les cartes vidéos collent plus ou moins ou inversement aux specs de ces deux bestiaux).

    DirectDraw est la méthode de rendu 2D de Microsoft utilisant également les possibilités de la carte vidéo.

    Quand à software: ça veut dire tout faire à la mimine dans ton prog, donc pas de pipeline, pas d'accélération hardware (cad matérielle => carte vidéo).


    Sinon pour son ségradé, un ou deux pixels faut pas chipotter non plus, le principe reste le même.
    Dans son exemple le dégradé est vertical donc il lui suffit de créer l'image d'un dégradé de 1 pixel de large et de la hauteur du panel et de le répéter sur toute la largeur, c'est une technique communément employée dans les CSS pour faire des bandes de titre toutes zolies au dessus de boites par exemple, un bon exemple est le bandeau Répondre à la discussion qui se trouve juste au dessus de la boite ou je tappe.

  5. #5
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    Suis-je complètement idiot ! Bien sûr que il faut garder la longueur du dégradé, et juste mettre un pixel dans le sens qui reste identique !

    ... mais, cependant, quand c'est un dégradé en diagonale, le système ne fonctionne pas, je crois ?... Or, bien sûr, pour me distinguer, j'ai mis des dégradés diagonale ; donc cela m'oblige à prendre un BufferedImage de la même taille que mon rectangle ; heureusement il n'est pas très grand. Je ne sais pas s'il existe une combine mathématique pour les diagonales ?...

Discussions similaires

  1. comment accelerer la recherche dans une table
    Par chekkal dans le forum Débuter
    Réponses: 29
    Dernier message: 30/10/2013, 09h00
  2. Comment mettre sur le graphisme le code de gradientPaint
    Par pasfree dans le forum Interfaces Graphiques en Java
    Réponses: 0
    Dernier message: 29/08/2013, 11h19
  3. Comment accelerer une fonction?
    Par Jeane dans le forum C++
    Réponses: 14
    Dernier message: 16/03/2007, 20h55
  4. Vista : Comment accelerer le réseau et Internet
    Par Cazaux-Moutou-Philippe dans le forum Windows Vista
    Réponses: 3
    Dernier message: 10/02/2007, 19h53
  5. Réponses: 5
    Dernier message: 20/08/2002, 18h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo