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 :

Dessiner sur une image : assez complexe


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 Dessiner sur une image : assez complexe
    Bonjour, j'ai un besoin assez complexe et j'espere bien que c'est faisable en Qt:
    j'affiche une image dans un QLabel ; et je voudrais créer une methode qui me permettra quand j'active un bouton que je puisse cliquer avec la souris sur l'image et chaque point cliquer doit devenir rouge!ou meme mettre toute une ligne sur l’image en rouge !
    J'ai essayer avec QPainter que j'ai jamais utiliser mais ça marche pas!
    Si vous pouvez m'aider svp?
    Voici une petite idée que j'ai de la methode:


    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
    void Maclass::CrerPointRouge(QObject *obj, QEvent *ev)
    {
        QPainter singlePoint ;//Pour pouvoir dessiner le point rouge!
        QLabel *label = qobject_cast<QLabel *>(obj) ;
         if (label && ev->type() == QEvent::MouseMove)
            {
     
                QMouseEvent * mouseEvent = static_cast<QMouseEvent *>(ev) ;
                if(mouseEvent->KeyPress) //A chaque fois qu'on clique sur l'image!
                {
                   singlePoint.drawPoint(mouseEvent->x(), mouseEvent->y()) ;//Pour relier la position de la souris avec le pixel cliqué
     
    //Pour rendre le point cliqué en rouge j'ai pensé à faire ça mais ça marche pas , enfin c'est n'importe quoi:oops:
                   //img =  m_label->pixmap()->toImage().setPixel(mouseEvent->x(), mouseEvent->y(), QRgb(255,0,0)) ;
     
     
                }
     
            }
     
     
    }

  2. #2
    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
    Ya personne pour m'aider?

  3. #3
    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
    ...
    Commence par regarder ce tuto
    http://qt.developpez.com/tutoriels/introduction-qt/

    On ne peut tout expliquer et reexpliquer à chaque fois, il faut que tu y mette du tiens...

  4. #4
    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
    ...
    Commence par regarder ce tuto
    http://qt.developpez.com/tutoriels/introduction-qt/

    On ne peut tout expliquer et reexpliquer à chaque fois, il faut que tu y mette du tiens...
    Merci pour ta reponse....
    Ps:c'est en forgeant qu'on devient forgeron et que chacun est passé par là!Chaque chose à son temps!

  5. #5
    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
    Citation Envoyé par lisco Voir le message
    Ps:c'est en forgeant qu'on devient forgeron et que chacun est passé par là!Chaque chose à son temps!
    Bien sure, mais on ne peut tous reprendre depuis le début à chaque fois. Sinon ça démotive de te répondre. De plus, si tu nous dit pas ce que tu ne comprend pas dans nos réponses, on ne peut pas le savoir et cela tourne en boucle. Tu as bien du le constater ici ou sur les autres forums.

    Qt est quand même un assez gros framework et pas toujours évident à comprendre. Je te conseil fortement de reprendre à zéro avec le tuto que je t'ai donné. Et petit à petit aller vers ton besoin.

    Ce que je peut te dire, vue ce que tu veut faire, l'utilisation des QGraphics* semble bien plus adapté. Mais commence par bien prendre les bases avant d'aller plus loin.

    bon courage

  6. #6
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Citation Envoyé par yan Voir le message
    Ce que je peut te dire, vue ce que tu veut faire, l'utilisation des QGraphics* semble bien plus adapté.
    Pas forcément, le problème est trop mal expliqué. Si c'est directement modifier l'image, c'est overkill et il peut rester avec sa solution d'affichage actuel. Par contre, pour le comment, ça lui a déjà été expliqué dans une question précédente.

  7. #7
    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
    Citation Envoyé par IrmatDen Voir le message
    Pas forcément, le problème est trop mal expliqué. Si c'est directement modifier l'image, c'est overkill et il peut rester avec sa solution d'affichage actuel. Par contre, pour le comment, ça lui a déjà été expliqué dans une question précédente.
    c'est pour ça le semble.
    En gros ce que j'ai pu comprendre c'est :
    -affichage de plusieurs couches
    -édition/création par point clickable

  8. #8
    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 Manipulation de buffer et clique souris
    Bonjour, je vous expose mon probléme: j'affiche une image et j'affiche tous les pixels differents de 0 en rouge.et Je voudrais que à chaque clique de ma souris sur l'image qu'il me met ce pixel cliqué en rouge.Je procede comme suit: à chaque clique sur mon image, je remplit les coordonnées du pixel cliqué par 1 et je reaffiche l'image avec le nouveau buffer en ecrasant l'ancienne image!C'est l'idée que je veux developper, mais ça marche pas car ça me mets toute l'image en rouge ou ça m'affiche une image assez bizarre!!


    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
    void Maclass::mousePressEvent(QMouseEvent *event)
     {
     
         QImage img(1500, 1800, QImage::Format_RGB32) ;
             float min =  1582 ;
             float max =  1582.2 ;
     
         if (event->button() == Qt::LeftButton)
        {
     
            int PosX = event->x() ;
            int PosY = event->y() ;
         int x, y;
                for(y = 0; y < 1000; y++)
                {
                    for(x = 0; x < 1000; x++)
                    {
     
                        if(event->button() == Qt::LeftButton)
                        {
     
                          BufferImage[PosX + PosY * NbColonnes] = 1 ;
                        }
     
                           if(BufferImage[x + y * NbColonnes] == 0)
                         {
                           float pixel = 255 *(BufferImage[x + y * NbColonnes] ) - min)
                                                 /(max- min) ;
     
                           img.setPixel(x, y, qRgb(pixel, pixel, pixel)) ;
                          }
                   else
                   {
     
                       img.setPixel(x, y, qRgb(255, 0, 0)) ;
     
                   }
               }
             }
         }
    Mon gros probléme c'est comment mettre à 1 un pixel de l'image par simple clique de la souris?c'est à dire recupere les coordonnées du pixel cliqué dans l'image et mettre ce pixel à 1 dans le buffer de l'image??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            int PosX = event->x() ;
            int PosY = event->y() ;
             if(event->button() == Qt::LeftButton)
                        {
     
                          BufferImage[PosX + PosY * NbColonnes] = 1 ;
                        }
    Est ce que ça me mets le pixels cliqué à 1 au niveau du buffer?
    Merci d'avance

  9. #9
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut
    Le résultat de "PosX + PosY * NbColonnes" est :

    res = 0
    res = PosX + Posy
    res = res * NbColonnes

    Dans ton cas, il me semble que tu souhaites plutôt faire PosX + (PosY * NbColonnes)
    Un clavier Azerty en vaut deux.

  10. #10
    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
    Citation Envoyé par Ryo2468 Voir le message
    Le résultat de "PosX + PosY * NbColonnes" est :

    res = 0
    res = PosX + Posy
    res = res * NbColonnes

    Dans ton cas, il me semble que tu souhaites plutôt faire PosX + (PosY * NbColonnes)
    PosX + PosY * NbColonnes == PosX + (PosY * NbColonnes)

  11. #11
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Citation Envoyé par yan Voir le message
    PosX + PosY * NbColonnes == PosX + (PosY * NbColonnes)
    C'est beau de C++ ça marche comme les maths...
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  12. #12
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut
    Au temps pour moi, balèze la bête ^^
    Un clavier Azerty en vaut deux.

  13. #13
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Si tu veux juste changer la valeur d'un pixel passe par setPixel directement je ne comprend pas trop ce que tu fait avant.

    Est ce que cela fonctionne par exmple (je n'ai pas testé ce code)?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void Maclass::mousePressEvent(QMouseEvent *event)
    {
            int PosX = event->x() ;
            int PosY = event->y() ;
    QImage img = m_label->pixmap().toImage();
    img.setPixel(x,y,qRgb(255,0,0));
     
    m_Label->setPixmap(QPixmap::fromImage(img)); 
    }
    Juste un question c'est quoi BufferImage[] exactement ?
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  14. #14
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut
    J'ai du mal à comprendre ton problème, je m'y connais assez peu en images. Je ne vois pas ce que représente un pixel à 1 ou à 0. Un pixel n'est il pas une superposition de couches de couleurs ? (RVB dans le cas le plus classique)

    As tu songé à utiliser un système de masques ou de couches? A la manière de Photoshop, tu créés un calque transparent aux dimensions de ton image, tu l'initialise avec les pixels rouges (ceux à 0, d'après ton post), puis à chaque clic, tu passes à rouge le pixel du calque correspondant aux coordonnées de la sours. Et tu affiche bien entendu les deux images superposées.
    Un clavier Azerty en vaut deux.

  15. #15
    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 superjaja Voir le message
    Juste un question c'est quoi BufferImage[] exactement ?
    en fait j'appel buffer image la memoire dynamique dans laquelle je stoque les pixels quand je lis le fichier avant d'afficher mon image!!ben c'est la memoire alloué avec new ou malloc
    Je vais tester le bout de code que tu m'as filé!!merci

  16. #16
    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 Qt et image:
    J'affiche une image dans un QLabel et j'aimerais a chaque clique souris sur mon image mettre en rouge le pixel clique et mettre aussi sa valeur à 1.
    J'ai pensé à mettre dabord à 1 la valeur du pixel cliqué c'est a dire a chaque clique je modifie le buffer de l'image et je reaafiche l'iamge a nouveau. Mais ça bug car je tente de reafficher l'image a chaque clique souris!!!
    J'ai besoin de votre aide svp pour pouvoir avancé!!



    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
    void Maclass::mousePressEvent(QMouseEvent *event)
     {
     
         QImage img (1000, 1000, QImage::Format_RGB32) ;
             float minimUS =  3000 ;
             float maximUS =  8800 ;
     
         if (event->button() == Qt::LeftButton)
        {
     
            int PosX = event->x() ;
            int PosY = event->y() ;
            BufferImage[PosX + PosY * 1500 ] = 1 ;//A chaque click de souris je mets à 1 le pixel correspondant à cette position.
     
        }
     
            for (int y = 0; y < 1000; y++)
            {
               for (int x = 0; x < 1000; x++)
               {
     
     
     
                   if(BufferImage[y * 1500 + x ] != 1)
                   {
                     float  pixel = 255 *((BufferImage[y * 1500 + x] ) - minim)
                                                 /(maxim - minim) ;
                      pixel = abs(pixel - 255) ;
                      img.setPixel(x, y, qRgb(pixel, pixel, pixel)) ;
                   }
                   else
                   {
     
                       img.setPixel(x, y, qRgb(255, 0, 0)) ;
     
                   }
     
         }
     
     
     
                  m_label->setPixmap(QPixmap::fromImage(img)) ;
                  ui->ZoneImage->setWidget(m_label) ;
     
     
          }
    }
    En resumé je veux rendre rouge chaque pixel cliqué sur l'image
    Thanks you!

  17. #17
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Le code que je t'ai donné hier ne fait pas ça ?
    Pourquoi tu crées un nouveau poste pour le même problème ?
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  18. #18
    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 superjaja Voir le message
    Le code que je t'ai donné hier ne fait pas ça ?
    Pourquoi tu crées un nouveau poste pour le même problème ?
    Non le code que tu m'a filé hier ne fait pas ça , j'ai testé mais ça marche pas!!
    j'ai crée un nouveau poste parce que tout simplement j'ai redefinis la question plus clairement et je vois un peux plus ce que je veux faire!

    En gros c'est quand je clique sur l'image ce point devient rouge et derriere dans le buffer je change cette valeur de l'image en 1 sachant que je conné les coordonnées du pixels clique!

    Si tu peux m'aider je suis preneur ça fait plus de 2 jours je suis dessus!!
    merci

  19. #19
    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
    Citation Envoyé par lisco Voir le message
    j'ai crée un nouveau poste parce que tout simplement j'ai redefinis la question plus clairement et je vois un peux plus ce que je veux faire!
    Malheureusement, faire ceci, complique tout. A chaque fois, on repart de zéro, alors que tu as déjà eu des réponses.
    Merci, de ne pas créer plusieurs thread pour le même problème à l'avenir.

    [edit]
    j'ai fusionné tes trois threads sur le même problème

  20. #20
    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
    Quelle est le problème exactement? Qu'es ce qui ne marche pas?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. comment dessiner sur une image
    Par baracouda dans le forum Graphisme
    Réponses: 2
    Dernier message: 26/05/2006, 00h21
  2. Dessiner sur une image
    Par cquadjul dans le forum C++Builder
    Réponses: 2
    Dernier message: 19/04/2006, 10h44
  3. Dessiner sur une image
    Par alex6891 dans le forum Java ME
    Réponses: 1
    Dernier message: 16/04/2006, 02h45
  4. Déplacer, zoomer, dessiner (sur) une image
    Par charlito dans le forum 2D
    Réponses: 4
    Dernier message: 22/02/2006, 01h58
  5. [Servlet] [Image] Dessiner sur une image
    Par gaia_dev dans le forum 2D
    Réponses: 5
    Dernier message: 01/09/2004, 17h11

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