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

MFC Discussion :

[MFC] Lenteur lors d'un chargement de bitmaps avec un timer


Sujet :

MFC

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 8
    Points : 7
    Points
    7
    Par défaut [MFC] Lenteur lors d'un chargement de bitmaps avec un timer
    Bonjour, je suis en train de programmer un casse briques sous Visual C++ avec les mfc.

    Pour l'affichage de la balle et du jeu, j'utilise un timer qui appelle une fonction affichage() (je ne passe pas par redraw) qui va via une série de buffer blit l'image du jeu sur l'écran voici les grandes étapes :


    • Chargement des bitmaps via les méthodes LoadBitmap
    • création d'un buffer virtuel pour chaque image (via CreateCompatibleDC puis selectObjet )
    • blittage des buffer sur le buffer contenant l'image du fond
    • et enfin blittage entre le buffer de l'image du fond(qui contient tous les élèments) et l'ecran
    • apres viens le moment ou je decharge via des selectObject, deleteObject,deleteDC.


    Mon problème est le suivant, lorsque le bitmap du fond est de petit taille (<100ko) le jeu tourne plutot bien, mais si je prend une grosse image (700x600 pour un poids de 1 Mo) ca devient lent (mais ca reste fluide) même avec un timer au minimum.

    J'ai essayé plusieurs pistes pour eviter que le jeu ralentisse mais je ne suis pas arriver à les mettre en places :
    • Utiliser pour le fond une textures de petite taille/poid et l'agrandir sur le buffer du fond(peut etre via strechtblt)
    • Afficher l'image du fond dans le redraw uniquement et afficher un buffer transparent (en le blittant avec transparentblt)
    • Précharger les images via une méthode différente de affichage() pour ainsi ne pas faire un loadbmp a chaque appel de affichage()


    J'ai aussi entendu parler de de 'DDB' et 'DIB', est ce que cela pourrait m'aider, en fait je ne sais pas de quoi il s'agit.

    Bref je suis grand débutant dans la programation de gdi, si quelqu'un avait des idées ou a déjà eu un probleme similaire : je suis preneur .

    ++

    SJ

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    tu utilises quel version de VC ? 6.0 .net ,2005 ?.
    a partir de .net il y une classe CImage qui te permet de manipuler les JPEG, GIF, BMP ,PNG donc la possibilité d'avoir des images moins lourdes en Ko.
    qu'un bitmap classique de 1M°.
    sinon voir :
    http://www.codeguru.com/Cpp/G-M/bitmap/article.php/c4903
    classe CPicture qui fournit a peu pres les memes services;
    exemple faq:
    http://c.developpez.com/faq/vc/?page...gndBitmapOnDlg

  3. #3
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    oui mais ... l'image en mémoire au final sera un bitmap, vu qu'on peut pas faire un bitblt autrement ...
    Utiliser des jpeg serait meme plus long non ? vu qu'il faut le temps de décompression aussi

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    il faudrait eviter de charger l'image au moment de l'afficher ..

  5. #5
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    ca c'est sur, ca n'a pas d'interet puisque l'image ne doit pas changer en cours de jeu...
    Donc un seul chargement par image et ca ira déjà plus vite

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    Citation Envoyé par nico-pyright(c)
    oui mais ... l'image en mémoire au final sera un bitmap, vu qu'on peut pas faire un bitblt autrement ...
    Utiliser des jpeg serait meme plus long non ? vu qu'il faut le temps de décompression aussi
    globalement tu dois y gagner quand meme ,lire un fichier de 1M° et un de 15 K° le reste du traitement etant en memoire .
    a verifier/mesurer ...

  7. #7
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Merci bcp pour vos réponse très rapide.

    Je suis développe effectivement sous .Net. Le problème de la classe CImage c'est que je ne pourrais plus alors charger des images venant des ressources, car je ne suis pas arriver à importer un jpeg dans mon .rc ! Je saurais alors olbiger de coder une fonction d'import d'image et j'aimerai si possible rester avec un exe seul(sans fichier image externe).

    Je vais essayer de precharger les images.

    SJ

  8. #8
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    Citation Envoyé par StreetJeopardy
    Merci bcp pour vos réponse très rapide.

    Je suis développe effectivement sous .Net. Le problème de la classe CImage c'est que je ne pourrais plus alors charger des images venant des ressources, car je ne suis pas arriver à importer un jpeg dans mon .rc ! Je saurais alors olbiger de coder une fonction d'import d'image et j'aimerai si possible rester avec un exe seul(sans fichier image externe).

    Je vais essayer de precharger les images.

    SJ
    tu as la fonction : CImage::LoadFromResource

Discussions similaires

  1. [MFC][ADO][ACCESS] temps de chargement très très long
    Par julien.nasser dans le forum Access
    Réponses: 2
    Dernier message: 12/05/2006, 15h34
  2. Réponses: 2
    Dernier message: 24/11/2005, 17h33
  3. Lenteur lors de la lecture d'une base Access
    Par Lio590 dans le forum Bases de données
    Réponses: 6
    Dernier message: 16/11/2005, 12h24
  4. lenteur lors de mes insert into
    Par shiners300 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 19/09/2005, 13h49
  5. Lenteur lors d'une insertion (sql server)
    Par shiners300 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 16/09/2005, 09h09

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