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

Discussion :

Dessiner dans une QImage

  1. #1
    Membre chevronné
    Avatar de myzu69
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 220
    Par défaut Dessiner dans une QImage
    Salut à tous

    je me suis mis dans la tête de faire l'exercice Qt mais il me donne plus de fil à retordre que prévu .

    J'arrive à obtenir l'image en pièce jointe mais malheureusement c'est pas tout à fait ça ... en haut à gauche je n'ai pas tout à fait du blanc mais (en RGB) du 255-254-254.

    Pour l'obtenir je dessine dans une QImage de 256*256 (normalement si je compte bien, ça devrait être ça pour aller de 0 à 255 compris). En observant mieux la première ligne de l'image, j'obtient du rouge en (254,0), ce qui veut donc dire que j'ai deux pixels rouge (et pas de blanc )


    J'arrive à corriger le problème en faisant démarrer mes QLinearGradient en (1,1) et non en (0,0) mais je ne comprends pas pourquoi je devrais faire cela ... la couleur en (0,0) devrait être celle spécifiée lors du setColorAt(0, ...) non ?

  2. #2
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Par défaut
    Est ce que tu peux nous donner ton code ou tu dessine dans la QImage ? Le gradient doit être bon !

  3. #3
    Membre chevronné
    Avatar de myzu69
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 220
    Par défaut
    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
    void colorPicker::render(const QColor & color)
    {
        const int DEB = 0;
        // gradient horizontal (blanc=>coul)
        QLinearGradient gradient(QPointF(DEB, DEB), QPointF(255, DEB));
        gradient.setColorAt(0, Qt::white);
        gradient.setColorAt(1, color);
     
        // gradient vertical (transparent=>noir)
        QLinearGradient gradient2(QPointF(DEB, DEB), QPointF(DEB, 255));
        gradient2.setColorAt(0, Qt::transparent);
        gradient2.setColorAt(1, Qt::black);
     
        // dessin des deux gradients supperposés
        QPainter p(&m_image);
        p.setCompositionMode(QPainter::CompositionMode_SourceOver);
     
        p.fillRect(QRect(0,0,256,256), gradient);
        p.fillRect(QRect(0,0,256,256), gradient2);
    }
    la constante DEB c'est parce que j'en avais marre de changer à plein d'endroits à chaque fois que je voulais modifier les gradients
    Si je met DEB à 1 ça fonctionne, mais je ne comprends pas pourquoi je devrais faire ça ...

  4. #4
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742

  5. #5
    Membre chevronné
    Avatar de myzu69
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 220
    Par défaut
    heu non, j'ai toujours le même comportement étrange

  6. #6
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Par défaut
    Moi je définit la taille de mon image avant. Et après je fais un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    painterImage.fillRect(m_gradientImage.rect(), gradient);
    Ca marche très bien avec un Gradient qui commence à 0 !

  7. #7
    Membre chevronné
    Avatar de myzu69
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 220
    Par défaut
    j'avais pas vu la fonction rect() de QImage, c'est plus propre mais ça fait toujours pareil ...

    Pour l'instant je définis la taille de ma QImage dans le constructeur (donc avant) et la taille est fixe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    colorPicker::colorPicker(const QColor & color, QWidget *parent)
        : QWidget(parent), m_image(256,256,QImage::Format_RGB32) 
    {
        setFixedSize(m_image.size());
     
        m_image.fill(0);
        render(color);
     
        QColor coul = m_image.pixel(0, 0);
        setWindowTitle(QString(QString::number(coul.red()) + "-" +
                               QString::number(coul.green())+ "-" +
                               QString::number(coul.blue())));
    }

  8. #8
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Par défaut
    Je ne vois pas trop comme ça...

    Et je suis au travail donc pas possible de faire de tests...

  9. #9
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Effectivement, il y a des problèmes de calcul des couleurs avec cette méthode. Je n'ai pas trouvé d'explication à ce problème (peut être un problème de conversion réel<->entier entre la position des pixels et le gradient codé en réel)

    Il est possible de démarrer à (1, 1) mais j'ai l'impression qu'il y a d'autres "erreurs" dans les couleurs dans ce cas.

  10. #10
    Membre chevronné
    Avatar de myzu69
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 220
    Par défaut
    je viens de vérifier et en (254,0) j'ai déjà du rouge. Donc sur la même ligne, deux pixels ont la même couleur, ce qui veut dire qu'il en manque une (mais la flemme de chercher laquelle ).

    Je pense que c'est effectivement un problème d'arrondi mais bon, tant que l'on peut sélectionner le blanc, la couleur (bleu, rouge, ...) et le noir je pense que ce n'est pas un problème, on peut toujours faire un réglage "à la main" de chaque composante

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/03/2009, 15h21
  2. Un éditeur de dessin dans une page web
    Par Kyp dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 31/01/2006, 01h52
  3. Réponses: 10
    Dernier message: 09/11/2005, 15h08
  4. [MFC] Dessin dans une boite de dialogue .
    Par Platypus dans le forum MFC
    Réponses: 8
    Dernier message: 21/07/2005, 11h21
  5. [debutant]dessins dans une fenetre
    Par drosophile dans le forum 2D
    Réponses: 4
    Dernier message: 04/11/2004, 14h55

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