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 :

Modifier la couleurs des pixels d'une QImage


Sujet :

Qt

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Points : 45
    Points
    45
    Par défaut Modifier la couleurs des pixels d'une QImage
    Bonjour,

    J'aurais besoin d'un petit coup de main svp
    Je viens de découvrir Qt et je voudrais faire un peu de traitement d'image. J'ai donc crée une QImage, et maitenant je voudrais lire la couleur RGB d'un pixel, et si par exemple le Red du pixel = 255 alors modifier le Green et le mettre à 200...
    C'est un exemple, mais comment je fais pour accéder a ca?

    Merci beaucoup

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Points : 45
    Points
    45
    Par défaut
    J'ai oublié j'ai testé pour un exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for(int j=0;j<this->img->heigh();j++)
    {
     
    	for(int i=0;i<this->img->width();i++)
    	{
    		this->img->setPixel(i,j, qRgb(255,0,0) );	
    	}
     
    }
    Mais il ne se passe rien, pourtant tout mes pixels devraient etre rouge...

  3. #3
    Membre averti

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

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 281
    Points : 356
    Points
    356
    Par défaut
    Bonjour et bienvenue dans le monde Qt !

    En découvrant Qt, il est presque hérétique de se passer de la doc
    A découvrir donc.

    Pour répondre à la question, il y a deux méthodes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QRgb pixel(int x, int y) // Permet de récupérer la valeur d'un pixel selon ses coordonnées
    void setPixel (int x, int y, uint index_or_rgb) // Assigne une couleur
    Plus d'infos ici : http://qt.developpez.com/doc/4.5/qimage/

    Bonne continuation !

    PS: Ne pas oublier de rafraichir l'affichage avec un update()

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Points : 45
    Points
    45
    Par défaut
    Merci de ta réponse,

    Ce qui est bizarre c'est que le traitement ci dessous marche bien.
    Il remplace le noir du blanc
    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
     
     
    for(j=0;j<this->img->height();j++)
    {
    for(i=0;i<this->img->width();i++)
    {
    	pixRgb = this->img->pixel(i,j);
     
    	if(qRed(pixRgb) == 0 && qGreen(pixRgb) == 0 && qBlue(pixRgb) == 0)
    	{
    		index = this->img->pixelIndex(i,j);
    		this->img->setColor(index, qRgb(255,255,255) );
    		break;
    	}
    }
    }
    Mais c'est vraiment le this->img->setPixel(i,j, qRgb(255,0,0) ) du traitement aprés qui ne marche pas, meme avec l'update...

  5. #5
    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 break implique que tu t'arrête à la première condition remplie rencontrée. Est-ce voulu? (1 pixel dans une fenêtre en 800x600, c'est pas easy à voir, surtout si il s'agit d'un pixel en bordure).

    EDIT : pourquoi n'utilises-tu pas setColor() ?
    Un clavier Azerty en vaut deux.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Points : 45
    Points
    45
    Par défaut
    le break implique que tu t'arrête à la première condition remplie rencontrée. Est-ce voulu? (1 pixel dans une fenêtre en 800x600, c'est pas easy à voir, surtout si il s'agit d'un pixel en bordure).

    EDIT : pourquoi n'utilises-tu pas setColor() ?
    Le break c'est normal puisque setColor va remplacer tout les pixels du tableau qui ont le meme index que celui que je viens de trouver, soit la couleur noir.
    En résumé, je cherche un pixel noir, quand je l'ai, je trouve sont index grace au coordonnée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    index = this->img->pixelIndex(i,j);
    puis je transforme tout les noirs en blanc grace a l'index :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this->img->setColor(index, qRgb(255,255,255) );
    et je sors c'est fini.

    Mais le probleme de setColor, c'est qu'il remplace tout les pixels qui seront de la meme couleur, alors que moi je voudrais remplacer qu'un seul pixel avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     this->img->setPixel(i,j, qRgb(255,0,0) )
    mais il ne prend rien en compte...

  7. #7
    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
    Tu veux dire que ceci ne marcherait pas? (je sais, ça remplacerait tous les pixels, mais c'est pour vérifier que setPixel marche).
    Vérifie que tu rentre bien dans la boucle et que setPixel est appelé (ptite trace avec qDebug() par exemple).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    for(j=0;j<this->img->height();j++)
    {
    for(i=0;i<this->img->width();i++)
    {
    	pixRgb = this->img->pixel(i,j);		
    	if(qRed(pixRgb) == 0 && qGreen(pixRgb) == 0 && qBlue(pixRgb) == 0)
    	{
    		this->img->setPixel(i,j, qRgb(255,255,255) );
    	}
    }
    }
    EDIT : t'es en 8 bits ou en 32 bits?

    http://qt.developpez.com/doc/4.5/qim...l-manipulation
    Un clavier Azerty en vaut deux.

  8. #8
    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
    Peut tu faire un petit exemple compilable de ce que tu fait?

  9. #9
    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
    Tu peux montrer comment tu crées ton objet QImage ?
    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.

  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
    Tu utilise une image indexé? puisque tu utilise setColor.

    Il te faut une image RGB

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Points : 45
    Points
    45
    Par défaut
    euh je fais comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //en global j'ai 
    QImage *img;
     
    //je construi
    this->img = new QImage(this->pathImage);
    tu parle de RGB image, ca marche comment?

    Merci de votre aide

  12. #12
    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 Twubi Voir le message
    euh je fais comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //en global j'ai 
    QImage *img;
     
    //je construi
    this->img = new QImage(this->pathImage);
    tu parle de RGB image, ca marche comment?

    Merci de votre aide
    C'est quoi le type d'image que tu charges dans le QImage ? une Image 8 bits, 32 bits....
    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.

  13. #13
    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 traitement ne se fait pas de la même façon suivant le type d'image, il existe le 8 et le 32 bits RGB.

    Regarde ceci : http://doc.qtsoftware.com/4.5/qimage...l-manipulation
    Un clavier Azerty en vaut deux.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Points : 45
    Points
    45
    Par défaut
    J'ai une image 8bits... ca marche pas alors?

  15. #15
    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
    Lis la doc, ton code ne risque pas de marcher, en effet ^^

    Les modifs à apporter sont pas énormes, tu devrais t'en sortir.
    Un clavier Azerty en vaut deux.

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

Discussions similaires

  1. Interpoler les couleurs des pixels d'une image
    Par mina777 dans le forum Langage
    Réponses: 1
    Dernier message: 14/06/2009, 19h35
  2. Réponses: 5
    Dernier message: 06/08/2008, 16h24
  3. Changer la couleur des pixels d'une image
    Par k_meleon dans le forum VBA Access
    Réponses: 0
    Dernier message: 31/03/2008, 16h22
  4. Modifier des pixels dans une image
    Par hitomigaia dans le forum wxWidgets
    Réponses: 2
    Dernier message: 15/11/2007, 18h16
  5. Réponses: 6
    Dernier message: 13/08/2007, 19h47

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