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

Qt Discussion :

Affichage basique d'une image


Sujet :

Qt

  1. #1
    Membre confirmé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Points : 528
    Points
    528
    Par défaut Affichage basique d'une image
    Bonjour,

    Malgré la documentation et les sources que j'ai pu trouver sur internet, je n'arrive pas à afficher tout bêtement une image au format png ou jpg sur une fenêtre.

    J'ai essayé les codes suivants sans succès (ça compile mais aucune image ne s'affiche):

    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
    #include <QApplication>
    #include <QtGui>
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
    
        QWidget fenetre;
    
        QLabel *label = new QLabel(&fenetre);
        label->setPixmap(QPixmap("image.png"));
        fenetre.show();
    
        return app.exec();
    }
    ou encore en changeant les lignes bleues par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    QLabel *labelImage = new QLabel(&fenetre); 
    QImage image("image.jpg"); 
    labelImage->setPixmap(QPixmap::fromImage(image));
    Mes images image.png|image.jpg sont bien dans le repertoire debug du .exe

    J'éspère que vous pourrez me donner un petit coup de main !

    Merci !

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 617
    Points
    15 617
    Par défaut
    Bonjour

    Pas besoin d'un QWidget, tu peux directement faire un show() avec QLabel (comme avec tous QWidget en fait)

    Après avoir ouvert ton image, affiche la taille pour voir si elle est bien lue.

  3. #3
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Points : 8 140
    Points
    8 140
    Par défaut
    Vérifie que les formats des images ont bien été compilés pour ta version de qt ou de déplacer le répertoire "imagesformat" avec les dll spécifiques à tes formats dans ton répertoire.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 58
    Points : 65
    Points
    65
    Par défaut
    Essaye une image png avec un chemin absolu si ce n'est pas juste un problème d'accès fichier.

  5. #5
    Membre confirmé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Points : 528
    Points
    528
    Par défaut
    Bonjour,

    Tout d'abord, je vous remercie pour vos réponses !

    Citation Envoyé par gbdivers
    Après avoir ouverte ton image, affiche la taille pour voir si elle est bien lue.
    Pour afficher la taille, je dois regarder dans la doc les méthodes de l'objet QImage ou QPixmap ? Parce que en jetant un coup d'oeil, QImage a l'air d'avoir surtout des méthodes pour gérer les pixels de l'image.

    Citation Envoyé par johnlamericain
    Vérifie que les formats des images ont bien été compilés pour ta version de qt ou de déplacer le répertoire "imagesformat" avec les dll spécifiques à tes formats dans ton répertoire.
    A vrai dire johnlamericain, je ne vois pas vraiment comment m'y prendre :s Tout d'abord, je n'ai pas eu à gérer les dll lorsque j'ai configuré Qt pour Visual Studio 2008 avec le plugin adapté qui permet à VS de trouver tous les dll nécessaires directement. Après, bien sûr, je peux retrouver ou sont ces dlls mais je ne sais pas vraiment lesquels gèrent les formats d'images.
    Aussi, je n'ai pas trouvé dans mon projet de repertoire "imagesformat".

    Citation Envoyé par nosleduc
    Essaye une image png avec un chemin absolu si ce n'est pas juste un problème d'accès fichier.
    Le problème ne semble pas venir d'ici :s

    Je vous remercie !

  6. #6
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 617
    Points
    15 617
    Par défaut
    Pour afficher la taille, je dois regarder dans la doc les méthodes de l'objet QImage ou QPixmap ? Parce que en jetant un coup d'oeil, QImage a l'air d'avoir surtout des méthodes pour gérer les pixels de l'image.
    fonctions size()

    Le problème ne semble pas venir d'ici :s
    C'at à dire ? Ca donne quoi ?

    J'ai testé ton code chez moi, ça fonctionne sans problème.
    Par contre, la taille de la fenêtre par défaut est de (0, 0). Il faut donc l'agrandir à la main ou ajouter le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        QLabel *label = new QLabel(&fenetre);
        QPixmap pixmap("/home/gbdivers/Bureau/Capture.png");
        label->setPixmap(pixmap);
        label->resize(pixmap.size());
        fenetre.show();

  7. #7
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Points : 8 140
    Points
    8 140
    Par défaut
    Citation Envoyé par betsprite Voir le message
    gbdivers :


    Pour afficher la taille, je dois regarder dans la doc les méthodes de l'objet QImage ou QPixmap ? Parce que en jetant un coup d'oeil, QImage a l'air d'avoir surtout des méthodes pour gérer les pixels de l'image.
    Regarde cette fonction : http://qt.developpez.com/doc/4.6/qimage/#size

    Tu peux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include <QtCore/QDebug>
    #include <QtGui/QImage>
     
    QImage monImage("chemin/nomfichier.png");
    qDebug() << monImage.size().width() << "x" << monImage.size().height()
    pour tester la taille de ton image.

    Citation Envoyé par betsprite Voir le message
    johnlamericain :

    A vrai dire johnlamericain, je ne vois pas vraiment comment m'y prendre :s Tout d'abord, je n'ai pas eu à gérer les dll lorsque j'ai configuré Qt pour Visual Studio 2008 avec le plugin adapté qui permet à VS de trouver tous les dll nécessaires directement. Après, bien sûr, je peux retrouver ou sont ces dlls mais je ne sais pas vraiment lesquels gèrent les formats d'images.
    Aussi, je n'ai pas trouvé dans mon projet de repertoire "imagesformat".
    Pour ma part il se trouve dans C:\Qt\4.6.3\plugins\imageformats si ça peut t'aider. C'est normal qu'il ne soit pas dans le répertoire de ton projet. Tu peux copier les dlls dont tu as besoin, qjpeg4.dll par exemple mais tu dois la placer dans un répertoire du nom imageformats à coté de ton exécutable. Pour une image png tu ne devrais pas avoir ce problème donc c'est qu'il vient d'ailleur.

    John

  8. #8
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 617
    Points
    15 617
    Par défaut
    Juste une petite remarque concernant la localisation des fichiers (j'ai déjà eu ce problème) : en fonction des paramètres de compilation, l'application est compilé dans un répertoire différent des sources. Et donc, puisque ton image est donnée avec un chemin relatif, il est possible que l'application ne le trouve pas. Il faut donc copier l'image dans le répertoire de compilation.

    Ajoute ce code pour connaître le chemin de ton image lors de l'exécution et vérifie qu'il est correcte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        QFileInfo file("image.jpg");
        qDebug() << file.absolutePath() << file.exists();

  9. #9
    Membre confirmé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Points : 528
    Points
    528
    Par défaut
    Merci gbdivers et johnlamericain pour vos réponses !

    Citation Envoyé par johnlamericain Voir le message
    Pour ma part il se trouve dans C:\Qt\4.6.3\plugins\imageformats si ça peut t'aider. C'est normal qu'il ne soit pas dans le répertoire de ton projet. Tu peux copier les dlls dont tu as besoin, qjpeg4.dll par exemple mais tu dois la placer dans un répertoire du nom imageformats à coté de ton exécutable. Pour une image png tu ne devrais pas avoir ce problème donc c'est qu'il vient d'ailleur.
    J'ai un repertoire imageformats exactement au même endroit. J'ai donc créé un dossier images à l'endroit "C:\Qt\4.6.3\plugins\images" avec dedans deux images nommées planete.jpg et planete.png (pour les tests selon le format).
    Ensuite, j'ai ajouté un dossier imageformats dans le repertoire de debug avec le .exe de mon application (avec dedans le fichier qjpeg4.dll).
    Malgré ça, le code suivant ne fonctionne toujours pas (la fenêtre s'ouvre mais aucune image ne s'affiche) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);
     
        QWidget fenetre;
        QLabel *label = new QLabel(&fenetre);
        QPixmap pixmap("C/Qt/4.6.3/plugins/images/planete.jpg");
        label->setPixmap(pixmap);
        label->resize(pixmap.size());
        fenetre.show();
     
        return app.exec();
    }
    Citation Envoyé par gbdivers Voir le message
    puisque ton image est donnée avec un chemin relatif, il est possible que l'application ne le trouve pas. Il faut donc copier l'image dans le répertoire de compilation.
    Mes images situées à l'emplacement "C:\Qt\4.6.3\plugins\images" doivent donc être copiées dans un repertoire nommé par exemple "images" dans le repertoire debug également pour qu'il puisse le trouver ?

    Si jamais vous avez des idées, je suis preneur :p

    Merci !

  10. #10
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Points : 8 140
    Points
    8 140
    Par défaut
    Oui ça ne fonctionne pas exactement comme ça.

    Tu peux mettres tes images où tu veux sur le disque tant que tu fournis le bon chemin mais en général on les mets dans le répertoire débug ou dans un sous répertoire comme ça tu peux utiliser le chemin relatif :

    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
    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);
     
        QWidget fenetre;
     
        QLabel *label = new QLabel(&fenetre);
        QPixmap pixmap("./images/planete.jpg");
        label->setPixmap(pixmap);
        label->resize(pixmap.size());
        fenetre.show();
     
     
        return app.exec();
    }
    De plus en fonction de tes paramètres de ton EDI, le répertoire courant peut être le répertoire debug mais des fois celui ou se trouve les sources. Essaye de déplacer les images relatifs à celui-là si tu exécute ton application à l'aide du bouton exécuter de ton EDI.

    Attention si tu veux utiliser un chemin absolue avec un disque windows tu dois écrire par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:/MesImage/monImage.jpg
    (n'oublis pas le ":" après la lettre du disque dur)

    Pour le répertoire imagesformat tu dois le copier tel quel à coté de ton executale dans le répertoire debug avec les dll dedans.

    Nomalement tu n'as rien à placer dans le répertoire Qt, c'était juste pour te dire où était les dll.

    As-tu essayer ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include <QtCore/QDebug>
    #include <QtGui/QImage>
     
    QImage monImage("./images/nomfichier.png");
    qDebug() << monImage.size().width() << "x" << monImage.size().height()
    Qu'est ce que cela te retourne sur ta sortie standard (output) ?

    Bon courage

  11. #11
    Membre confirmé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Points : 528
    Points
    528
    Par défaut
    Merci johnlamericain pour ton aide !

    Citation Envoyé par johnlamericain Voir le message
    en général on les mets dans le répertoire débug ou dans un sous répertoire comme ça tu peux utiliser le chemin relatif
    J'ai suivi tes conseils et créé un repertoire images dans mon repertoire debug contenant le .exe. Dans celui-ci, j'ai deux fichiers :

    - planete.jpg
    - planete.png


    Pour le jpg, j'ai également dans le repertoire debug un dossier imageformats avec dedans le fichier qjpeg4.dll.

    Ensuite, voici le code pour afficher l'image :

    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
    #include <QApplication>
    #include "FenPrincipale.h"
    #include <QtGui>
    #include <QtGui/QImage>
    #include <QtCore/QDebug>
     
    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);
     
    QWidget fenetre;
    QImage monImage("./images/planete.png");
    qDebug() << monImage.size().width() << "x" << monImage.size().height();
     
    QLabel *label = new QLabel(&fenetre);
    QPixmap pixmap("./images/planete.jpg"); // j'ai essayé également avec le fichier "planete.png"
    label->setPixmap(pixmap);
    label->resize(pixmap.size());
    fenetre.show();
     
    return app.exec();
    }
    En exécutant ce code, la fenêtre s'affiche mais est vide. Par contre, qDebug() renvoit sur la sortie standard "0 x 0" !

    C'est donc à l'objet QImage qu'il faut attribuer une taille et non à l'objet QPixmap ?

    Merci encore !

  12. #12
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Points : 8 140
    Points
    8 140
    Par défaut
    Citation Envoyé par betsprite Voir le message
    En exécutant ce code, la fenêtre s'affiche mais est vide. Par contre, qDebug() renvoit sur la sortie standard "0 x 0" !

    C'est donc à l'objet QImage qu'il faut attribuer une taille et non à l'objet QPixmap ?
    Non, si l'object QImage a pour dimension "0 x 0" c'est que l'image n'est pas correctement chargé...

  13. #13
    Membre confirmé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Points : 528
    Points
    528
    Par défaut
    Citation Envoyé par johnlamericain Voir le message
    Si l'object QImage a pour dimension "0 x 0" c'est que l'image n'est pas correctement chargé...
    Ok merci johnlamericain ! je vais continuer mes recherches alors :p

  14. #14
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Points : 8 140
    Points
    8 140
    Par défaut
    Voici un petit projet test en pièce jointe qui marcher parfaitement.

    En espérant que ça puisse t'aider !
    Fichiers attachés Fichiers attachés

  15. #15
    Membre confirmé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Points : 528
    Points
    528
    Par défaut
    Ok ! bon je viens de trouver le problème !

    D'ailleurs, tu m'avais déjà mis sur la voie :

    Citation Envoyé par johnlamericain Voir le message
    De plus en fonction de tes paramètres de ton EDI, le répertoire courant peut être le répertoire debug mais des fois celui ou se trouve les sources. Essaye de déplacer les images relatifs à celui-là si tu exécute ton application à l'aide du bouton exécuter de ton EDI.
    J'ai donc couper-coller mon repertoire images dans le repertoire nomduprojet contenant les sources et en gardant le même code, l'image s'affiche enfin

    Merci encore johnlamericain !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ETAT] Affichage conditionnel d'une image
    Par Ithilien dans le forum IHM
    Réponses: 1
    Dernier message: 03/01/2007, 19h46
  2. [VB6] Affichage centré d'une image
    Par Sophie2097 dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 12/05/2006, 14h28
  3. Erreur pour l'affichage aléatoire d'une image
    Par bellebiquette dans le forum Langage
    Réponses: 3
    Dernier message: 21/04/2006, 22h45
  4. [Conception] affichage aleatoire d'une image
    Par bellebiquette dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 24/02/2006, 22h58
  5. [Tableaux] Ajouter l'affichage dynamique d'une image
    Par leloup84 dans le forum Langage
    Réponses: 3
    Dernier message: 16/02/2006, 09h14

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