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. #21
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Par défaut
    Citation Envoyé par yan Voir le message
    Quelle est le problème exactement? Qu'es ce qui ne marche pas?
    j'ai joins le code source ça me semble juste, je vois pas de probléme mais ça marche pas quand je clique sur la souris ça bogue et ça marche plus et mon pc se plante!!

    c'est une méthode entre autre mais le but etant toujours de mettre en rouge le pixels cliqué sur l'image!!De ce fais j'ai deux buffers disponible l'un contenant les pixels de l'image et l'autre contenant que des zeros et pour afficher je compare les deux fichiers les pixels de l'image affichée corresponde à zeros sur l'autre buffer et les pixels en rouge de l'image correspondde a 1 sur l'autre buffer et a chaque clique je modifie la valeur 0 de ce buffer à 1 et je refais une comparaison pour affcihé en rouge le pixel cliqué!!mais ça marche pas!!

    Merci d'avance j'ai besoin de votre help please!!

  2. #22
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    Citation Envoyé par lisco Voir le message
    j'ai joins le code source ça me semble juste, je vois pas de probléme mais ça marche pas quand je clique sur la souris ça bogue et ça marche plus
    Peut tu être précis?


    Citation Envoyé par lisco Voir le message
    et mon pc se plante!!
    tu plante ton pc avec un simple programme!!!!

    Première piste, vérifie la valeur de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int PosX = event->x() ;
            int PosY = event->y() ;
    pour être sure qu'ils sont dans ton images

    pourquoi
    ui->ZoneImage->setWidget(m_label) ;

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Par défaut
    Citation Envoyé par yan Voir le message
    Peut tu être précis?
    enfin je veux dire que je trouve juste ce que j'ai fait

    Citation Envoyé par yan Voir le message
    tu plante ton pc avec un simple programme!!!!
    je suis obligé de fermer l'application de force sinon aucune touche ne marche meme pas la souris.


    Citation Envoyé par yan Voir le message
    Première piste, vérifie la valeur de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int PosX = event->x() ;
            int PosY = event->y() ;
    pour être sure qu'ils sont dans ton images !!!!
    tu veux dire dans le repere de l'image?Non je pense pas mais sont dans le repere de l'ihm mais vu que je clique sur l'image et que je modifie le buffer à la position [PosX + PosY * NbColonnes] je n'avais pas pris compte de cela.
    je pense ajouté ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (m_label && event->button() == Qt::LeftButton)
    ??
    Citation Envoyé par yan Voir le message
    pourquoi
    ui->ZoneImage->setWidget(m_label) ;
    parce que vu mon algo je suis obligé de réafficher mon image à chaque pour faire apparaitre le pixel mis à 1 en rouge et en ecrasant l'ancienne image.Quelque precision ui-> : parce que ce sont des widget de mon ihm fait avec qt designer et le m_label est contenu dans un QScrollArea d'ou le setWidget!

  4. #24
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    Citation Envoyé par lisco Voir le message
    parce que vu mon algo je suis obligé de réafficher mon image à chaque pour faire apparaitre le pixel mis à 1 en rouge et en ecrasant l'ancienne image.Quelque precision ui-> : parce que ce sont des widget de mon ihm fait avec qt designer et le m_label est contenu dans un QScrollArea d'ou le setWidget!
    C'est pas la bonne solution. La bonne solution c'est de mettre une image dans ton label. Après tu récupères cette image de la modifier et de remettre l'image après modification dans ton label.
    Je pense que le principe du code que je t'ai donné fonctionne après le seul problème je pense c'est les coordonnée qui sont pas dans le repère image. Mais çà c'est a toi de voir. Ou autre solution tu crée un classe fille de QLabel et tu redéfinis l'événement mousePressEvent(QMouseEvent *event) et là normalement tu seras dans le repère du QLabel.
    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.

  5. #25
    Membre expérimenté

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2006
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 281
    Par défaut
    Bonjour,

    J'ai regardé rapidement les solutions proposées, mais il manque le changement de repère.
    Le plus simple est d'hériter une classe à partir d'un QLabel dans laquelle on surcharge la méthode de clic (pour faciliter le repérage)
    Ensuite, ll faut réadapter les coordonnées de la souris en rapport avec la taille de l'image.

    Donc dans la méthode de clique sur l'image :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    posXImage = posXSouris * largeurImage / largeurLabel;
    posYImage = posYSouris * hauteurImage / hauteurLabel;

  6. #26
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    posXImage = posXSouris * largeurImage / largeurLabel;
    posYImage = posYSouris * hauteurImage / hauteurLabel;
    Le problème c'est que ceci va dépendre de la méthode utiliser pour afficher l'image.
    Si scaledContents est à true, tu as raison
    Je lui avez montrer un code pour afficher une images et connaitre la position de la souris dans l'image
    http://www.developpez.net/forums/d72...r/#post4228537

  7. #27
    Membre expérimenté

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2006
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 281
    Par défaut
    En gros :

    CImgLabel.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
    #include <QLabel>
    #include <QImage>
    #include <QPixmap>
    #include <QMouseEvent>
     
    class CImgLabel : public QLabel
    {
    	Q_OBJECT
     
    public:
    	CImgLabel(QWidget *parent = 0);
     
    protected:
    	void mousePressEvent(QMouseEvent *event);
     
    private:
    	QImage m_img;
    };
    CImgLabel.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
    #include "CImgLabel.h"
     
    CImgLabel::CImgLabel(QWidget *parent)
    	: QLabel(parent)
    {
    	m_img.load("c:/tests/image.jpg");
    	this->setPixmap(QPixmap::fromImage(m_img));
    }
     
    void CImgLabel::mousePressEvent(QMouseEvent *event)
    {
    	int posXImage = event->pos().x() * m_img.width() / width();
    	int posYImage = event->pos().y() * m_img.height() / height();
     
     
    	m_img.setPixel(posXImage, posYImage, qRgb(255,0,0));
    	this->setPixmap(QPixmap::fromImage(m_img));
    }

  8. #28
    Membre expérimenté

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2006
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 281
    Par défaut
    Citation Envoyé par yan Voir le message
    Si scaledContents est à true, tu as raison
    Et si c'est à faux, le rapport "largeurImage / largeurLabel" vaut 1. Donc ça marche aussi non ?

    HS : ça a l'air pratique les eventFilter...

  9. #29
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    Citation Envoyé par LeGars Voir le message
    Et si c'est à faux, le rapport "largeurImage / largeurLabel" vaut 1. Donc ça marche aussi non ?
    non car le label n'est pas forcement à la taille de l'image.

    Citation Envoyé par LeGars Voir le message
    HS : ça a l'air pratique les eventFilter...
    , carrément!!!
    C'est une autre façon d'utiliser les event. Je trouve cela beaucoup plus puissante. Bien sure si tu dérive d'un widget autant réimplémenter les fonctions liées. Ca dépend ce que tu veut faire. J'ai vue plusieurs personnes voulant emettre un signal lors d'un click dans un QLabel. L'utilisation de eventfilter est beaucoup plus simple et adapter, et sans surcharger le code.

    j'en connait un ou deux qui vont encore se moquer de moi...

  10. #30
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    Citation Envoyé par yan Voir le message
    j'en connait un ou deux qui vont encore se moquer de moi...
    Je ne sais vraiment pas de qui tu parles.
    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.

  11. #31
    Membre expérimenté

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2006
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 281
    Par défaut
    Citation Envoyé par yan Voir le message
    non car le label n'est pas forcement à la taille de l'image.
    Effectivement...

    Dans ce cas, l'utilisation d'un QGraphicsView permet de faire tout le boulot :

    CImgLabel.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
    #include <QtGui>
     
    class CImgLabel : public QGraphicsView
    {
    	Q_OBJECT
     
    public:
    	CImgLabel(QWidget *parent = 0);
     
    protected:
    	void mousePressEvent(QMouseEvent *event);
     
    private:
    	QImage m_img;
    	QGraphicsScene m_scene;
    	QGraphicsPixmapItem *pixItm;
    };
    CImgLabel.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
     
    #include "CImgLabel.h"
     
    CImgLabel::CImgLabel(QWidget *parent)
    	: QGraphicsView(parent)
    {
    	m_img.load("c:/tests/image.jpg");
    	setScene(&m_scene);
    	pixItm = m_scene.addPixmap(QPixmap::fromImage(m_img));
     
    }
     
    void CImgLabel::mousePressEvent(QMouseEvent *event)
    {
    	QPointF ptScene = this->mapToScene(event->pos());
     
    	m_img.setPixel(ptScene.x(), ptScene.y(), qRgb(255,0,0));
    	pixItm->setPixmap(QPixmap::fromImage(m_img));
    }
    De cette manière peut importe la taille du QGraphicsView, l'image est contenu dans la scene créant son propre repère.

  12. #32
    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
    Par défaut
    Citation Envoyé par yan Voir le message
    J'ai vue plusieurs personnes voulant emettre un signal lors d'un click dans un QLabel. L'utilisation de eventfilter est beaucoup plus simple et adapter, et sans surcharger le code.
    Je vais pas me moquer, mais juste dire qu'un QPushButton frameless semble plus adapté

  13. #33
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    Je ne connaissais pas je me disais bien qu'il fallait que je me mette aux classes QGraphics. Merci pour l'info LeGars.

    Citation Envoyé par IrmatDen
    Je vais pas me moquer, mais juste dire qu'un QPushButton frameless semble plus adapté
    Tu veux énerver Yan ?
    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. #34
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    Citation Envoyé par IrmatDen Voir le message
    Je vais pas me moquer, mais juste dire qu'un QPushButton frameless semble plus adapté
    le but était de connaitre la position du click et non de faire un boutton

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Par défaut
    merci pour toutes les reponses apportées!J'ai hate de devenir Modérateur car dur d'etre débutant

  16. #36
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    Citation Envoyé par lisco Voir le message
    merci pour toutes les reponses apportées!J'ai hate de devenir Modérateur car dur d'etre débutant
    tu as réussi?

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Par défaut
    Citation Envoyé par yan Voir le message
    tu as réussi?
    Oui et thanks you for your help

  18. #38
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    Citation Envoyé par lisco Voir le message
    Oui et thanks you for your help
    Qu'elle etait la solution alors?

    cela peut servir à d'autre personne.

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Par défaut
    Citation Envoyé par yan Voir le message
    Qu'elle etait la solution alors?

    cela peut servir à d'autre personne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            mousePressEvent( QMouseEvent *event)
    {
            img->pixmap()->toImage() ;
            img.setPixel(PositionX, PositionY, qRgb(255, 0, 0)) ; 
            m_label->setPixmap(QPixmap::fromImage(img)) ;
            ui->ZoneImage->setWidget(m_label) ;
     
    }
    sachant que PositionX et PositionY sont les coordonnées de caque pixel pointé qui est specifié dans le repere du QLabel!

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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