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 :

Enregistrer QImage avec fond blanc et non transparent

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Points : 68
    Points
    68
    Par défaut Enregistrer QImage avec fond blanc et non transparent
    Bonjour,

    Je cherche à enregistrer une QImage sur le disque.
    Je fais donc correctement mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QImage myimg(..., Qt::Format_RGB32)
    (j'ai choisi ce format pour ne pas avoir la transparence.).
    Ensuite, je remplis mon image de blanc, comme suit :
    Après cela, je déssine d'autres QImage dedans.
    Ils sont initialisés avec la format ARGB32_Premultiplied et remplis également en blanc.

    On pourrait croire que mettre ce format avec un canal alpha pose le problème, et c'est possible, mais si je le remplace par RGB32, cela me pose un problème lorsque j'essaye de faire un affichage dans un widget et pour le coup, mon problème devient double !

    Mon problème est que lorsque je dessine ca dans un Widget, j'ai bien du blanc en fond, mais lorsque je travaille sur une image enregistrée sur disque, j'ai un fond transparent, or, j'ai bien besoin d'un fond blanc... (Pour info, les QImage sont passées en signal d'un thread (celui qui travaille sur les QImage) à un widget pourle dessin dans ce dernier, contrairement à la sauvegarde sur disque, le Thread s'en charge lui même. peut-être que ce passage implique une non prise en charge de la transparence.)

    Merci d'avance,

    Az

  2. #2
    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
    Pourquoi ARGB32_Premultiplied au lieu de QImage::Format_ARGB32 ?

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Points : 68
    Points
    68
    Par défaut
    J'en reviens pas, ca fonctionne.
    Pourquoi ce format ? C'est l'ancien développeur qui l'a selectionné, probablement en suivant un tuto et je l'ai conservé.

    Meric

  4. #4
    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 0_Azerty_0 Voir le message
    J'en reviens pas, ca fonctionne.
    Pourquoi ce format ? C'est l'ancien développeur qui l'a selectionné, probablement en suivant un tuto et je l'ai conservé.

    Meric
    le format Premultiplied spécifie que l'alpha est déjà multiplié au valeur RGB. Pour accélérer l'affichage.

    Du coup pour une raison ou une autre, l'alpha doit être mal initialisé et c'est ce que tu constate quand tu sauvegarde l'image. Aprés je ne saurais dire la raison

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Points : 68
    Points
    68
    Par défaut
    ok, je l'ignorais, bon à savoir !
    Cependant, le problème est pas vraiment résolu en réalité, je viens seulement de m'en rendre compte. Le fond de l'image s'affiche correctement en blanc, dans le widget et dans l'explorateur (c'est ca qui m'a trompé), le fond apparait également en blanc et non en noir, mais lorsque je l'ouvre avec Gimp, je me rends compte que la transparence est là... :/

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Points : 68
    Points
    68
    Par défaut
    Pour les intéressés, problème réglé en remplissant le painter de l'image avec un QRect(img.size()), après avoir fait : painter.setBrush(Qt::white)

  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 0_Azerty_0 Voir le message
    Pour les intéressés, problème réglé en remplissant le painter de l'image avec un QRect(img.size()), après avoir fait : painter.setBrush(Qt::white)
    le fill(Qt::white) ne suffit pas ?

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Points : 68
    Points
    68
    Par défaut
    Et bien étonnement non... et c'était là tout mon problème..
    Peut-être est-ce parce que je fais des DrawImage(...) dans ce painter...
    Mais pourtant ces images ont également subit le fill(Qt::white)


  9. #9
    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 0_Azerty_0 Voir le message
    Et bien étonnement non... et c'était là tout mon problème..
    Peut-être est-ce parce que je fais des DrawImage(...) dans ce painter...
    Mais pourtant ces images ont également subit le fill(Qt::white)

    haaa, ça me dit quelque chose
    Je m'étais fait avoir aussi.

    Si je ne me trompe pas :

    fill initialise les pixels à la couleur donnée.

    Seulement les GlobalColor comme Qt::White ne définissent pas la valeur alpha qui sera mis à 0.



    Si tu fait fill( QColor(255,255,255)) ça devrais marcher.

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Points : 68
    Points
    68
    Par défaut
    Nope, parce que fill prend pas de QColor en paramètres (étrangement d'ailleurs).
    J'ai essayé de voir, il existe bien une méthode setAlphaChannel, mais elle prend en paramètres uen QImage et non un double, float ou autre...

  11. #11
    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 0_Azerty_0 Voir le message
    Nope, parce que fill prend pas de QColor en paramètres (étrangement d'ailleurs).

    http://qt-project.org/doc/qt-4.8/qimage.html#fill-3

  12. #12
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    Qt::white c'est un objet QColor

    Edit : oui pardon j'avais mal interprété le "Qt's predefined QColor objects", mais ça construit un objet QColor implicitement (fill(Qt::white) = fill(QColor(Qt::white)))

  13. #13
    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 Troudhyl Voir le message
    Qt::white c'est un objet QColor
    c'est un enum
    http://qt-project.org/doc/qt-5.0/qt....obalColor-enum

  14. #14
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Points : 68
    Points
    68
    Par défaut
    C'est pris en charge à partir de Qt 4.8, et je suis sur 4.5, désolé, oublié cette précision non négligeable... (évidemment, je ne peux pas changer...)

  15. #15
    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 0_Azerty_0 Voir le message
    C'est pris en charge à partir de Qt 4.8, et je suis sur 4.5, désolé, oublié cette précision non négligeable... (évidemment, je ne peux pas changer...)
    Tu doit pouvoir faire fill(qArgb(255,255,255,255));

    Mais bon c'est pour pinailler ^^

  16. #16
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Points : 68
    Points
    68
    Par défaut
    Ca marche !

    Merci ! C'est pinailler oui, mais j'aime bien savoir pourquoi ca marche pas quand c'est le cas . Merci !

  17. #17
    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 0_Azerty_0 Voir le message
    Ca marche !

    Merci ! C'est pinailler oui, mais j'aime bien savoir pourquoi ca marche pas quand c'est le cas . Merci !
    C'est pour cela que je n'hésite plus à entrer dans le code de Qt ^^

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

Discussions similaires

  1. [CSS 3] Superposition Logo + fond avec transparence du fond blanc du logo
    Par FloCAD dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 28/04/2015, 09h20
  2. [WD14] Champs de saisie en mode inactif mais avec fond blanc
    Par imanoka dans le forum WinDev
    Réponses: 2
    Dernier message: 14/10/2009, 13h05
  3. Scène avec fond transparent
    Par jcs2 dans le forum OpenGL
    Réponses: 3
    Dernier message: 01/03/2006, 10h19
  4. Réponses: 6
    Dernier message: 25/01/2006, 14h19
  5. Image avec fond transparent
    Par Virgile59 dans le forum Access
    Réponses: 3
    Dernier message: 16/09/2005, 11h48

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