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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    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 confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    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 expérimenté

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2006
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 43
    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 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 confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    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 expérimenté
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    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() ?

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    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
    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
    Peut tu faire un petit exemple compilable de ce que tu fait?

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    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

  9. #9
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    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 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
    Tu utilise une image indexé? puisque tu utilise setColor.

    Il te faut une image RGB

+ 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