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 :

Zoomer et DeZoomer une image en Qt


Sujet :

Qt

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Points : 131
    Points
    131
    Par défaut Zoomer et DeZoomer une image en Qt
    Bonjour, j'affiche une image dans ihm via un QScrollArea. Ensuite j'ai decidé de faire des applications de Zoom et de DeZoom de l'image.
    Ce que j'ai compris pour faire un Zoom :il faut recuperer chaque pixmap et faire le "scale".Mais là ça marche pas , et je vois pas ce qui m'echappe!!
    Si vous pouvez m'aider svp.

    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
    /*=========================================================================================================================*/
    /* Methode qui gere le facteur de zoom de l'image et les l'apparition des scrollBar quand la taille de l'image depasse     */
    /* les dimensions de l'ihm.                                                                                                */
    /*=========================================================================================================================*/
     
    void DManual2::scaleImage(double factor1, double factor2)   
     {
     //Recuperation de chaque pixmap qu'on va "scale" dans cette methode.
     
        Q_ASSERT(id->pixmap()) ;//Macro qui permet d'acceder à une variable d'une autre methode, ici au sdifferents pixmap de l'image.
     
     
         id->pixmap()->scaled(factor1, factor2) ;
    }
     
     
     void DManual2::ZoomIn()
     {
     // On doit recuperer chaque pixmap et on fait le scale.
     
         id->pixmap()->scaled(factor1, factor2) ;
     
         scaleImage(100, 200) ;
     }
     
     
     
    /*========================================================================================================================*/
    /* Cette methode fait un Zoom Out de l'image apres un Zoom In,,,,???                                                      */
    /*========================================================================================================================*/
     
    void DManual2::ZoomOut()
     {
     
        scaleImage(0.5,0.5) ;//Factor de dezoom qui joue sur le QLabel contenant l'image.
     
     
     }
    Merci d'avance.

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    scaled ne modifie pas la pixmap.
    Il retourne une QPixmap à la taille voulue

    Tu devrais plus tôt garder en mémoire ton image à taille normale et toujours partir de cette image pour faire les scaled.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Points : 131
    Points
    131
    Par défaut
    Citation Envoyé par yan Voir le message
    Tu devrais plus tôt garder en mémoire ton image à taille normale et toujours partir de cette image pour faire les scaled.
    Je pige pas trop là car dans ce cas on zoom avant d'afficher l'image!!
    Alors ce que j'aimerais c'est a partir de l'image initiale affichée de cliquer sur un bouton pour zoomer et sur un autre bouton pour dezoomer ou meme avec la molette de la souris!
    Voici ce que j'ai reessayé mais ça marche pas!!Je capte pas trop comment modifier mes pixmap avec la fonction scale??
    I need help please

    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
     
     ImageBuffer.resize(bufferSize); 
            for ( int i = 0; i < bufferSize; ++i)
            {
     
                    in >> f;
                    if (f > max) max = f; 
                    if (f < min) min = f;  
     
                    ImageBuffer[i] = f;    //stockage des pixels dans le buffer.
     
            }
     
     
            QImage img(fxd.NbColumns , fxd.NbRows,QImage::Format_RGB32);
            for (int y = 0; y < fxd.NbRows; y++)
            {
                     for (int x = 0; x < fxd.NbColumns; x++)
                      {
     
                            pixel = 255
                                     *
                                     (ImageBuffer[y * fxd.NbColumns + x] - min)
                                     /
                                     (max - min);
                                       pixel = abs(pixel - 255) ;
     
                                       img.setPixel(x , y , qRgb(pixel , pixel, pixel ));
     
     
                       }
              }
     
            m_label->setPixmap(QPixmap::fromImage(img)) ;//.scaled(800, 500)) ;
     
     
     
    /*========================================================================================================================*/
    /* Cette methode permet de Zoomer l'image en partant des dimensions initiales ou a  partir d'un Zoom moins,,,????         */
    /*========================================================================================================================*/
     
     void DManual2::ZoomIn()
     {
    m_label->setPixmap(QPixmap::fromImage(img)).scaled(200, 100)) ;
     
     
     }
     
     
     
    /*========================================================================================================================*/
    /* Cette methode fait un Zoom Out de l'image apres un Zoom In,,,,???                                                      */
    /*========================================================================================================================*/
     
    void DManual2::ZoomOut()
     {
     
     
    m_label->setPixmap(QPixmap::fromImage(img)).scaled(1000, 800)) ;
     
     
     }
    Au passage Yan est ce que je pouvais pas afficher mes images sans faire cette regle de 3 car j'aimerais conserver mes valeurs initiales de l'image.??

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Je pige pas trop là car dans ce cas on zoom avant d'afficher l'image!!
    Si tu ne garde pas l'originale :
    1- tu dezoom => perte d'information car image plus petite
    2- tu dézoom => idem
    3- tu zoom => tu as une image mais avec moins de détaille

    Si tu garde l'originale et que tu utilise cella pour les scale, tu n'as plus ce problème.


    Citation Envoyé par lisco Voir le message
    Voici ce que j'ai reessayé mais ça marche pas!!Je capte pas trop comment modifier mes pixmap avec la fonction scale??
    scaled ne modifie pas la pixmap.
    Il retourne une QPixmap à la taille voulue
    donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_label->setPixmap( m_pixmap.scaled(...,...) ) ;


    Au passage Yan est ce que je pouvais pas afficher mes images sans faire cette regle de 3 car j'aimerais conserver mes valeurs initiales de l'image.??
    Malheureusement non. Qt ne peut pas savoir pour toi comment convertir des float en unsigned char.

    Pour récupérer la valeur d'un pixel, tu as deux choix :
    1- tu créé une structure image qui va contenir ton buffer image. A n'utiliser que si les image sont petite

    2- tu te positionne dans le fichier et lie la valeur.

Discussions similaires

  1. [GD] Zoomer une partie d'une image
    Par zetta dans le forum Bibliothèques et frameworks
    Réponses: 12
    Dernier message: 09/08/2007, 09h45
  2. zoomer sur une image
    Par lekooto dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 05/02/2007, 19h15
  3. Zoomer sur une image
    Par Lynecoln dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 02/09/2006, 22h56
  4. Déplacer, zoomer, dessiner (sur) une image
    Par charlito dans le forum 2D
    Réponses: 4
    Dernier message: 22/02/2006, 01h58

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