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

C++Builder Discussion :

Chargement d'images un peu long


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 115
    Par défaut Chargement d'images un peu long
    Bonjour a tout le monde,

    besoin d'un petit coup de main pour le chargement d'images.

    Le pricipe simplifié de mon programme :
    Une FormPrincipale (active) et une FormDocuments (cachée)

    Sur ma FormPrincipale un bouton qui charge 5 images sur la FormDocuments avec de rendre la forme visible.

    Le code de mon bouton sur la FormPrincipale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FormDocuments->DocumentsAfficher();
    FormDocuments->Visible = true;
    FormPrincipale->Enabled = false;
    La fonction qui charge les images sur la FormDocument
    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
     
      AnsiString asDocuments = ExtractFilePath(Application->ExeName) + "lib\\Documents\\";
      AnsiString asDocumentsNo = ExtractFilePath(Application->ExeName) + "lib\\Images\\DocumentsNo.jpg";
      AnsiString asImage;
     
     //---------------------------------------------------------------------------
      for(int iCompte = 1; iCompte <= 5; iCompte++)
      {
        if(FileExists(asDocuments+IntToStr(iCompte)+".jpg"))
        {
          switch(iCompte)
          {
            case 1 : ImageHdV1->DrawStyle = suiStretch;
                     ImageHdV1->Picture->LoadFromFile(asDocuments+IntToStr(iCompte)+".jpg");
                     ImageHdV1->Cursor = crHandPoint;
                     break;
            case 2 : ImageHdV2->DrawStyle = suiStretch;
                     ImageHdV2->Picture->LoadFromFile(asDocuments+IntToStr(iCompte)+".jpg");
                     ImageHdV2->Cursor = crHandPoint;
                     break;
            case 3 : ImageHdV3->DrawStyle = suiStretch;
                     ImageHdV3->Picture->LoadFromFile(asOpexDocuments+IntToStr(iCompte)+".jpg");
                     ImageHdV3->Cursor = crHandPoint;
                     break;
            case 4 : ImageHdV4->DrawStyle = suiStretch;
                     ImageHdV4->Picture->LoadFromFile(asDocuments+IntToStr(iCompte)+".jpg");
                     ImageHdV4->Cursor = crHandPoint;
                     break;
            case 5 : ImageHdV5->DrawStyle = suiStretch;
                     ImageHdV5->Picture->LoadFromFile(asDocuments+IntToStr(iCompte)+".jpg");
                     ImageHdV5->Cursor = crHandPoint;
                     break;
          }
        }
        else
        {
          switch(iCompte)
          {
            case 1 : ImageHdV1->DrawStyle = suiNormal;
                     ImageHdV1->Picture->LoadFromFile(asDocumentsNo);
                     ImageHdV1->Cursor = crDefault;
                     break;
            case 2 : ImageHdV2->DrawStyle = suiNormal;
                     ImageHdV2->Picture->LoadFromFile(asDocumentsNo);
                     ImageHdV2->Cursor = crDefault;
                     break;
            case 3 : ImageHdV3->DrawStyle = suiNormal;
                     ImageHdV3->Picture->LoadFromFile(asDocumentsNo);
                     ImageHdV3->Cursor = crDefault;
                     break;
            case 4 : ImageHdV4->DrawStyle = suiNormal;
                     ImageHdV4->Picture->LoadFromFile(asDocumentsNo);
                     ImageHdV4->Cursor = crDefault;
                     break;
            case 5 : ImageHdV5->DrawStyle = suiNormal;
                     ImageHdV5->Picture->LoadFromFile(asOpexDocumentsNo);
                     ImageHdV5->Cursor = crDefault;
                     break;
          }  
        }
      }
      //---------------------------------------------------------------------------
    Pour simplifier, mon code vérifie si le fichier existe si c'est le cas il le charge, si il existe pas il charge une image de stop.

    Sa va vous sembler bizarre mais mon code fonctionne très bien :-) lol

    Le seul soucis c'est que je veux que les images s'affichent avant que la forme s'ouvre. Car pour l'instant la forme s'ouvre et le temps que tout les images se chargent une par une sa met du temps. Alors que les images en elles ne pèsent que 600ko.

    Je voulais donc savoir si y avait pas un moyen de chargement plus rapide des images ?
    Car pour moi avec un ordi assez puissant qu'il mette quasi 4secondes à charger 5images de 600ko sa fait un peu long.

    Merci a tous en tout cas

  2. #2
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 138
    Billets dans le blog
    5
    Par défaut
    Il faut savoir que les accès au disque sont long par rapports à ceux de la mémoire vive. C'est comme ça et il faut faire avec a moins d'avoir des disques SSD ou de très haute performance.
    Maintenant une solution possible pour afficher les images avant d'afficher la Fiche. C'est de charger les images avant d'afficher la Fiche.
    S'il s'agit d'images qui ne vont pas changer durant l'exécution du programme une autre solution consiste a charger toutes les images dans des listes d'images puis de les afficher. Mais ça prend de la place mémoire et ça ralenti le temps de lancement de l'application.

Discussions similaires

  1. Chargement d'images chiffrées trop long
    Par iBen68 dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 27/11/2012, 12h00
  2. chargement d'image
    Par bakonu dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 20/06/2005, 22h40
  3. [JLabel] Chargement d'image dans une JFrame
    Par mr.t dans le forum Composants
    Réponses: 10
    Dernier message: 27/01/2005, 18h32
  4. Réponses: 21
    Dernier message: 29/04/2004, 15h45

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