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

Discussion :

Affichage d'une image à partir d'une fonction de la classe

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Affichage d'une image à partir d'une fonction de la classe
    Bonjour à tous,

    Je suis actuellement entrain de creer un programme pour effectuer du traitement d'image.
    Mais dans un premier temps je souhaitais afficher une image a partir de ma fonction de la classe.
    Mais voila j'ai l'erreur suivant qui s'affiche :

    Cela faire plusieur jour que je cherche une solution mais aucun résultat. C'est pour cela que je me tourne vers vous.

    De plus, j'ai observé que en mode debogage, que les QImage ImageOIriginal et ImageChargee sont null lorsque je rentre dans ma fonction loadImage().
    Et j'ai mon Qlabel LabelImage qui vaut : <unavailable synchronous data>

    Je suis sous qt 4.8.

    Voici mon programme windowprocessing.cpp :

    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
    #include "windowprocessing.h"
     
    WindowProcessing::WindowProcessing(QWidget *parent) :
        QMainWindow(parent)
    {
        /* Function that handles the menu bar */
        showMaximized();
     
        //createMenus();
        QMenu *menuFichier = menuBar()->addMenu("&Fichier");
        QAction *actionOpen = new QAction("&Open", this);
        QAction *actionQuit = new QAction("&Quit", this);
        menuFichier->addAction(actionOpen);
        menuFichier->addAction(actionQuit);
     
        connect(actionQuit, SIGNAL(triggered()), this, SLOT(close()));
        connect(actionOpen, SIGNAL(triggered()), this, SLOT(openFile()));
     
        QWidget *zoneCentrale = new QWidget;
        QFormLayout *formLayout1 = new QFormLayout;
     
        QLabel *labelImage = new QLabel;
     
        formLayout1->addWidget(labelImage);
     
        QGroupBox *groupbox1 = new QGroupBox("Image Originale");
        groupbox1->setLayout(formLayout1);
     
     
        /* Control layouts */
        QHBoxLayout *layoutPrincipal = new QHBoxLayout;
        layoutPrincipal->addWidget(groupbox1);
        //layoutPrincipal->addWidget(groupbox2);
        //layoutPrincipal->addWidget(groupbox3);
        zoneCentrale->setLayout(layoutPrincipal);
        setCentralWidget(zoneCentrale);
     
    }
     
     
    /* Open File */
    void WindowProcessing::openFile()
    {
        QString fileName = QFileDialog::getOpenFileName(this, "Ouvrir un fichier", QString(), "Images (*.png *.gif *.jpg *.jpeg)");
     
        if (!fileName.isEmpty())
        {
                QImage imageChargee(fileName);
                QSize size2(imageChargee.width(), imageChargee.height());
                QSize size(this->labelImage->width(), this->labelImage->height());
     
                if (imageChargee.isNull())
                {
                     QMessageBox::critical(this, "", "L'image n'existe pas.");
                     return;
                }
     
               this->loadImage();
        }
     
    }
     
    void WindowProcessing::loadImage()
    {
     
        QSize size(this->labelImage->width(), this->labelImage->height());
        QSize size1(imageChargee.width(), imageChargee.height());
        QImage imageOriginale = imageChargee.scaled(size, Qt::KeepAspectRatio);
        labelImage->setPixmap(QPixmap::fromImage(imageOriginale));
    }
    et Voici mon programme windowprocessing.h :
    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
    #ifndef WINDOWPROCESSING_H
    #define WINDOWPROCESSING_H
     
    #include <QtGui>
     
    class WindowProcessing : public QMainWindow
    {
        Q_OBJECT
    public:
        explicit WindowProcessing(QWidget *parent = 0);
        void loadImage();
     
     
    signals:
     
    public slots:
        void openFile();
     
    private slots:
     
     
     
    private:
     
     
        QLabel *labelImage;
     
        QImage imageOriginale;
        QImage imageChargee;
     
        QMenu *menuFichier;
     
    };
     
    #endif // WINDOWPROCESSING_H

  2. #2
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    Bonjour,

    Que donne ce code, à la place de ImageChargee ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    QImage imageChargee;
    QPixmap testPixmap;
    qDebug() << imageChargee.load(fileName) << testPixmap.load(fileName);
    Bonne soirée,
    Louis
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Bonjour Louis,

    Merci pour ta réponse;
    J'ai fait comme tu m'as dis avec le qdebug mais j'ai toujours la même erreur QImage::scaled: Image is a null image
    Mais avant ce message j'ai maintenant de true qui s'affiche.
    Lorsque je rentre dans ma fonction loadImage(), j'ai mon QImage imageChargee qui devient NULL.

  4. #4
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    Bonjour,

    Je vois maintenant où est votre problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void WindowProcessing::openFile()
    {
        QString fileName = QFileDialog::getOpenFileName(this, "Ouvrir un fichier", QString(), "Images (*.png *.gif *.jpg *.jpeg)");
     
        if (!fileName.isEmpty())
        {
                QImage imageChargee(fileName);
    Ici, vous créez une variable locale nommée imageChargee. Par conséquent, la variable membre du même nom (utilisée dans le load) ne sera pas affectée. Le mieux que vous ayez à faire est de remplacer cela par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void WindowProcessing::openFile()
    {
        QString fileName = QFileDialog::getOpenFileName(this, "Ouvrir un fichier", QString(), "Images (*.png *.gif *.jpg *.jpeg)");
     
        if (!fileName.isEmpty())
        {
                imageChargee.load(fileName);
    Le reste ne bouge pas.

    Bonne journée,
    Louis
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Super, le problème viens effectivement de là.

    Grâce a cette solution, j'ai pu également régler le problème du Qlabel labelImage qui est également une variable locale.

    Je tiens donc à te remercier pour m'avoir débloqué de ce problème.

    Bonne soirée,
    Saïd

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

Discussions similaires

  1. Affichage d'une image à partir d'une autre
    Par Abc0123 dans le forum MATLAB
    Réponses: 4
    Dernier message: 30/09/2013, 15h50
  2. Saisir une image à partir d'une photo ou d'une vidéo
    Par lohengrin56 dans le forum Flash/Flex
    Réponses: 0
    Dernier message: 07/07/2009, 16h17
  3. Réponses: 7
    Dernier message: 07/07/2008, 11h18
  4. Réponses: 1
    Dernier message: 19/01/2006, 19h36
  5. afficher une image à partir d'une base de données access
    Par zidenne dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/11/2005, 11h41

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