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 :

Raffraichissement d'image trop lourd


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 30
    Par défaut Raffraichissement d'image trop lourd
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gdbi.drawImage(V.ligneBase, 0, 0, this);
    mais je ne sais pas comment améliorer le rendement de mon application.
    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é.

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 907
    Billets dans le blog
    54
    Par défaut
    Pas de solution concrete au vu du code poste mais divers conseils et pistes de recherches en vrac :

    - surcharger paintComponent() plutot que paint().

    - essayer de dessiner directement dans le graphics fournis dans la methodes plutot que dans le graphics d'une image intermedaire. Si besoin mettre un flag permettant de passer d'une methode de rendu a l'autre (offscreen <-> onscreen) pour voir si l'une des 2 est plus rapide que l'autre.

    - utiliser une VolatileImage (image dans la memoire de la carte video) plutot qu'une BufferedImage (image en memoire centrale) pour ton image intermediaire (eventuellement modifier le code pour permettre de tester les 2 types de rendu offscreen).

    - si ton image est entierement chargee en memoire, tu peux passer null plutot que this lors de l'appel de drawImage() cela peut eventuellement chunter une partie du mecanisme d'evenements/obervable-observateur lie a ImageObserver.

    - tu parles de zoom. Que se passe-t'il quand tu zoomes ? Recrees-tu une image intermediaire aux dimensions zoomees (gourmand en memoire et en performances) ou utilises-tu au contraire la primitive scale() du graphics ou encore une AffineTransform.getScaleInstance() ?

    - as-tu essayer de faire V.ligneBase.subimage() de maniere a extraire uniquement la partie zoomee de ton image initiale ou redessines-tu entierement ton image a chaque fois (meme en mode zoom) ?

    - Quels sont les indices de rendu utilises ?

    - Pourrait'on egalement voir le code traitant de la partie des evenements.

    - Quelle JVM ?

    - Quelle machine ?

    - Quelles sont les dimensions de l'image ?

    - Quel est le type de tes BufferedImage (certains types supportent peu ou prou l'acceleration materielle ou sont peu adaptes a certaines platformes) ?
    Merci de penser au tag quand 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

  3. #3
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    - surcharger paintComponent() plutot que paint().
    et
    - si ton image est entierement chargee en memoire, tu peux passer null plutot que this lors de l'appel de drawImage() cela peut eventuellement chunter une partie du mecanisme d'evenements/obervable-observateur lie a ImageObserver.
    devraient largement suffire.

    L'utilisation d'une VolatileImage est peu recommandee dans ce cas car l'image a une longue duree de vie, tu vas donc monopoliser la memoire video pour rien (et le code pour gerer une VolatileImage est chiant . Le gain ne sera pas suffisant par rapport aux inconvenients.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 30
    Par défaut
    Bon j'ai surcharger paintComponent() à la place de paint(),
    j'ai utilisé le graphique de paintComponent() plutot que de dessiner dans une BufferedImage
    et j'ai virer l'ImageObserver dans mon drawImage().
    Ca a l'air d'être légérement plus rapide mais je ne m'avance pas trop. De toute façon je doute que sur un ordi moins puissant le rendu ne soit pas saccadé vu qu'il l'est déjà un peu sur le mien.
    Vu que le programme est destiné à des chercheurs, je ne pense pas qu'ils auront des ordinateurs très puissant, le mien étant un athlon 3500+ qui a déjà du mal a avoir un rendu correct.

    Sinon mon bufferedImage était créé via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bi = new BufferedImage ( getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB );
    Si cela peut t'en dire plus sur son type. (pas torp compris la question).

    Je tourne sur JVM 1.5.

    Mon image à les dimensions de ma fenetre (donc au max, ~1200x1000).
    Lorsque je draganddrop, je ne crée pas d'image. Je ne fais qu'appeler une image créer précédemment via le graphique de la méthode paintComponent() et je dessine le rectangle en plus.
    Lorsque je relache, je redessine entierement dans l'image précédente puis j'affiche. Donc je ne recrée pas d'image, je réutilise la précédente qui à déjà les bonnes dimensions.

    Le zoom ne pose pas de problème. Il dessine suffisament rapidement la courbe dans l'image vu qu'il ne le fais qu'une seule fois. Le problème vient du raffraichissement lors du draganddrop. A ce moment là, le temps pour redessiner l'image n'est plus négligeable vu que dès que c'est affiché, il faut redessiner afin d'avoir une animation fluide.


    Bon je doute que cela serve mais voici le code du paintComponent() avec les listener
    Ne faut il pas que je sorte l'ajout des listener de la méthode paint ?

    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
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    public void paintComponent (Graphics g) {
     
     
     
    (int)V.pcDim.getWidth(),0,/**/       0, (int)(k * (V.Ymin -V.VminC)), (int)V.courbeDim.getWidth(), (int)(k * (V.Ymax-V.VminC)), this );
             g.drawImage(V.ligneBase,/**/      0,(int)V.pcDim.getHeight(),(int)V.pcDim.getWidth(),0,/**/       0, 0, (int)V.courbeDim.getWidth(), (int)V.courbeDim.getHeight(), null );  
            
             if ( md==1 ) { //en cas de drag on dessine le rectangle de selection
                g.setColor(Color.BLUE);
                g.drawLine (Zx1, Zy1, Zx2, Zy1);
                g.drawLine (Zx2, Zy1, Zx2, Zy2);
                g.drawLine (Zx2, Zy2, Zx1, Zy2);
                g.drawLine (Zx1, Zy2, Zx1, Zy1);
             }
             
            
            //Ecoute souris
             MouseListener ml = 
                    new MouseListener() {
                    
                       public void mouseClicked(MouseEvent e){
                         System.out.println("hopla");
                         mx1 = e.getX();
                         my1 = e.getY();
                      
                      }
                    
                       public void mouseEntered(MouseEvent e){}
                       public void mouseExited(MouseEvent e){}
                       public void mousePressed(MouseEvent MEmp) {}
                          
                       public void mouseReleased(MouseEvent e) {
                            
                         if ( md==1) {
                            
                            
                            //renderingThread.suspend();
                            System.out.println("SOURIS LACHEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE");
                            md =0;
                            
                            V.Xpmin = V.Xmin;
                            V.Xpmax = V.Xmax;
                            V.Ypmin = V.Ymin;
                            V.Ypmax = V.Ymax;
                         
                               
                            //Zx2=e.getX();//inutile normalement car défini dans le drag
                            //Zy2=e.getY();//inutile normalement car défini dans le drag
                            
                                                       
                            
                            if ( Zx1<Zx2 ) {
                               V.Xmin = Zx1;
                               V.Xmax = Zx2;
                            }
                            else { 
                               V.Xmin = Zx2;
                               V.Xmax = Zx1;
                            }
                         
                            if ( Zy1>Zy2 ) {
                               V.Ymin =Zy1;
                               V.Ymax =Zy2;
                            }
                            else { 
                               V.Ymin =Zy2;
                               V.Ymax =Zy1;
                            }
                            
                            V.Xmin = ( V.Xmin * ( V.Xpmax - V.Xpmin ) / getWidth() ) + V.Xpmin;
                            V.Xmax = ( V.Xmax * ( V.Xpmax - V.Xpmin ) / getWidth() ) + V.Xpmin;
                            V.Ymin = ( V.Ymin * ( V.Ypmin - V.Ypmax ) / getHeight() ) + V.Ypmax;
                            V.Ymax = ( V.Ymax * ( V.Ypmin - V.Ypmax ) / getHeight() ) + V.Ypmax;
                            //V.Ymin = ( (getHeight() - V.Ymin) * ( V.Ypmax - V.Ypmin ) / getHeight() ) + V.Ypmin;
                            //V.Ymax = ( (getHeight() - V.Ymax) * ( V.Ypmax - V.Ypmin ) / getHeight() ) + V.Ypmin;
                         
                         
                            //System.out.println(V.Xmin+"  "+ V.Ymin+"  "+ V.Xmax+"  "+ V.Ymax);
                            //System.out.println(V.Xpmin+"  "+ V.Ypmin+"  "+ V.Xpmax+"  "+ V.Ypmax);
                         
                            PanneauCourbe();
                                
                            V.pg.repaint();
                                
                         }
                                                   
                        
                         
                         
                      }
                   };
             this.addMouseListener(ml);
             
          
            
            
            
             MouseMotionListener mml = 
                    new MouseMotionListener() {
                       public void mouseMoved(MouseEvent e) {
                               
                         V.pos_x = e.getX();
                         V.pos_y = e.getY();
                            
                            //Si le pointeur sort du graphique courbe
                         if ( V.pos_x < 0 )
                            V.pos_x = 0;
                         if ( V.pos_x > (V.pcDim).getWidth()-1 )
                            V.pos_x = (int)(V.pcDim).getWidth()-1;
                         if ( V.pos_y < 0 )
                            V.pos_y = 0;  
                         if ( V.pos_y > (V.pcDim).getHeight()-1 )
                            V.pos_y = (int)(V.pcDim).getHeight()-1;
                                    
                         //V.pi.repaint();
                            
                            
                            
                            
                         //Pour le drag (coordonnées initiales)
                         Zx1 = e.getX();
                         Zy1 = e.getY();
                            
                         //Si le pointeur sort du graphique courbe
                         if ( Zx1 < 0 )
                            Zx1 = 0;
                         if ( Zx1 > (V.pcDim).getWidth()-1 )
                            Zx1 = (int)(V.pcDim).getWidth()-1;
                         if ( Zy1 < 0 )
                            Zy1 = 0;  
                         if ( Zy1 > (V.pcDim).getHeight()-1 )
                            Zy1 = (int)(V.pcDim).getHeight()-1;
                      }
                            
                       public void mouseDragged(MouseEvent e) {
                         
                      //Position du pointeur
                         V.pos_x = e.getX();
                         V.pos_y = e.getY();
                            
                            //Si le pointeur sort du graphique courbe
                         if ( V.pos_x < 0 )
                            V.pos_x = 0;
                         if ( V.pos_x > (V.pcDim).getWidth()-1 )
                            V.pos_x = (int)(V.pcDim).getWidth()-1;
                         if ( V.pos_y < 0 )
                            V.pos_y = 0;  
                         if ( V.pos_y > (V.pcDim).getHeight()-1 )
                            V.pos_y = (int)(V.pcDim).getHeight()-1;
                         //V.pi.repaint();
                         
                         
                         
                         
                         
                         //Drag
                         Zx2 = e.getX();
                         Zy2 = e.getY();                   
                            //Si le pointeur sort du graphique courbe
                         if ( Zx2 < 0 )
                            Zx2 = 0;
                         if ( Zx2 > (V.pcDim).getWidth()-1 )
                            Zx2 = (int)(V.pcDim).getWidth()-1;
                         if ( Zy2 < 0 )
                            Zy2 = 0;  
                         if ( Zy2 > (V.pcDim).getHeight()-1 )
                            Zy2 = (int)(V.pcDim).getHeight()-1;
                         
                         md = 1;
                         repaint();
                         //if (timer.isRunning() == false)
                            //timer.start();
                            
                            
                         //renderingThread.getState();
                         /*if (renderingThread.getState() != Thread.State.RUNNABLE) {
                            System.out.println("Thread.State.RUNNABLE");
                            renderingThread.start();
                            
                            try { renderingThread.wait(); }
                                catch (InterruptedException ie) {}
                         }*/
     
                         //if (renderingThread.isInterrupted() == true) 
                         //renderingThread.resume();
     
                      }
     
     
                   };
             this.addMouseMotionListener(mml);  
     
     
     
     
     
     
     
          }

  5. #5
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Il ne faut surtout pas ajouter les listeners dans la methode paintComponent() ! Tu en ajoute un nouveau a chaque fois que la fenetre est redessinee !

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 907
    Billets dans le blog
    54
    Par défaut
    Et bonjour le bazar et les ralentissement apres seulement qq secondes d'affichage. Puis probablement plantage apres un certain temps (qui peut etre qq heures certes) pour cause de depacement de capacite du tableau stockant les listeners.

    Astuce (rien a voir avec les perfs) : tu peux sans pb heriter de 2 interfaces differentes, pas la peine donc de faire 2 classes separees (sauf si besoin lisibilite) pour chacun des 2 types d'evenement, une seule suffit.
    Voir egalement l'interface javax.swing.event.MouseInputListener et la classe adapter associee.
    Merci de penser au tag quand 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

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 30
    Par défaut
    Comment puis-je créer un unique listener pour la souris ? Création d'une class interne ? Méthode ? J'ai du mal a voir comment régler ce probleme.

  8. #8
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 907
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 907
    Billets dans le blog
    54
    Par défaut
    Oui soit une classe interne soit une classe anonyme (ailleurs que dans le rendu comme indique par Gfx) mais avec l'interface/adapter approprie.

    Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    MouseListener ml = new MouseListener() { 
      ...
    };
    addMouseListener(ml); 
    MouseMotionListener mml = new MouseMotionListener() { 
      ...
    };
    addMouseMotionListener(mml);
    Tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    MouseInputListener mil = new MouseInputListener() { 
      ...
    };
    addMouseListener(mil); 
    addMouseMotionListener(mil);
    Sinon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    MyMouseListener mil = new MyMouseListener() { 
    addMouseListener(mil); 
    addMouseMotionListener(mil);
    avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    private class MyMouseListener implements MouseListener, MouseMotionListener {
    ...
    ou alors (c'est exactement pareil) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    private class MyMouseListener implements MouseInputListener {
    ...
    Encore une fois ce n'est que pour la lisibilite, ca ne change absolument rien pour les perfs.
    Merci de penser au tag quand 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

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 30
    Par défaut
    Merci pour le listener. Sinon aucune amélioration niveau performance.

    Serait il possible de créer une seconde image au dessus de ma courbe ? Sur cette image je ne dessinerais que le rectangle et le reste serait transparant et l'on aurait donc la courbe derriere. Je pose la question car j'ai essayer de dessiner le rectangle sans la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g.drawImage(V.ligneBase,/**/      0,(int)V.pcDim.getHeight(),(int)V.pcDim.getWidth
    et cela fonctionne parfaitement meme en plein écran (aucune saccade, le rectangle est toujours sur le pointeur de la souris).

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 30
    Par défaut
    Bon je n'arrive pas à obtenir un raffraichissement plus rapide.

    Par contre est-il possible de dessiner sur un GlassPane ? Je n'arrive pas en fait à le rajouter à ma JFrame. Comment peut on modifier cet élément ?

  11. #11
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Oui on peut. Il suffit de creer une classe qui derive de JComponent, de faire maframe.setGlassPane(monComposant) et de faire monComposant.setVisible(true) (un glass pane est cache par defaut).

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 30
    Par défaut
    Ok merci, ça fonctionne bien.

    Sinon pour revenir à mon problème de base, n'y a t il pas des objets qui sont spécialisés pour un rendu rapide ? tel pour les jeux et qui permette d'obtenir un raffraichissement correct de la fenetre pour qu'il y ai une fluidité minimale ?

  13. #13
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Sans voir ton code, je ne peux pas repondre a cette question.

Discussions similaires

  1. [MySQL] Suppression des données sql si image trop lourde
    Par DarkLeek94 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 07/11/2014, 16h19
  2. Chargement trop lourd d'images
    Par yul57 dans le forum Flex
    Réponses: 4
    Dernier message: 09/02/2010, 10h42
  3. Réponses: 23
    Dernier message: 05/09/2007, 11h53
  4. [CGI] variable de session trop lourde ????
    Par LE NEINDRE dans le forum Web
    Réponses: 2
    Dernier message: 07/10/2005, 09h12
  5. Réponses: 11
    Dernier message: 22/03/2005, 01h04

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