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

C++ Discussion :

comment ajouter alpha dans un pixel RGB ?


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Points : 7
    Points
    7
    Par défaut comment ajouter alpha dans un pixel RGB ?
    salut, j'ai une image RGB, je veux transformé tous ses pixels en ajoutant la valeur alpha. comment faire ? Merci bien

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Il faut lire le fichier et pour chaque pixel, lui rajouter un alpha puis réecrire le fichier.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Salut,

    En fait, un pixel RGB n'est jamais qu'un pixel RGBA dont l'alpha serait à 100% par défaut

    Tu peux donc "simplement" utiliser ta structure RGBA en donnant une valeur par défaut pour l'alpha

    Les pixels sont souvent défini avec des unsigned char (uint8_t ) pour les couleurs, ce qui fait que ta structure RGBA pourrait ressembler à quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    struct RGBA
    {
        RGBA(char R, char G, char B, char A = 255):red(R), green(G), blue(B),
        alpha(A){}
        unsigned char red;
        unsigned char green;
        unsigned char blue;
        unsigned char alpha;
    };
    et tu pourrais très bien avoir une fonction d'écriture (et une de lecture) dans (respectivement depuis) un fichier n'utilisant que RGB et une autre (en fait deux autres) pour l'écriture (et la lecture) dans (respectivement depuis) un fichier utilisant RGBA, qui prendraient la forme de
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    RGBA readFromRgbFile(std::ifstream ifs)
    {
        unsigned char red;
        unsigned char green;
        unsigned char blue;
        ofs>>red>>green>>blue;
        return RGBA(red, green, blue);
    }
     
    RGBA readFromRgbAlphaFile(std::ifstream ifs)
    {
        unsigned char red;
        unsigned char green;
        unsigned char blue;
        unsigned char alpha;
        ofs>>red>>green>>blue>>alpha;
        return RGBA(red, green, blue,alpha);
    }
    void writeToRgbFile(std::ifstream ifs, RGBA const & rgba)
    {
        ifs<<rgba.red
           <<rgba.green
           <<rgba.blue;
    }
    void writeToRgbAlphaFile(std::ifstream ifs, RGBA const & rgba)
    {
        ifs<<rgba.red
           <<rgba.green
           <<rgba.blue
           <<rgba.alpha;
    }
    Je te laisse le soin de trouver la logique pour lire/écrire tous les pixels, mais un petit tour vers la Faq devrait te donner des directions sympa
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Membre éclairé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Points : 764
    Points
    764
    Par défaut
    Citation Envoyé par koala01 Voir le message
    En fait, un pixel RGB n'est jamais qu'un pixel RGBA dont l'alpha serait à 100% par défaut
    Dans l'idée oui, mais en pratique ça va dépendre du format du fichier image. D'ailleurs, il est probable que le format d'entrée ne supporte pas l'alpha par défaut (voir pas du tout), et dans ce cas l'opération n'est pas complètement triviale.

    Quel format utilises-tu ? BMP, JPG, PNG, ... ?

  5. #5
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Citation Envoyé par Kalith Voir le message
    Dans l'idée oui, mais en pratique ça va dépendre du format du fichier image. D'ailleurs, il est probable que le format d'entrée ne supporte pas l'alpha par défaut (voir pas du tout), et dans ce cas l'opération n'est pas complètement triviale.

    Quel format utilises-tu ? BMP, JPG, PNG, ... ?
    Mais, à partir du moment où il ne s'agit que de lire le pixel, pour éventuellement convertir dans un autre format qui supporte l'alpha, tu n'as pas vraiment à t'inquiéter de ce problème.

    Tu devras, effectivement, lire le fichier en respectant son format, mais, au moment de créer le tableau de pixels qui constituent ton image, tu peut parfaitement envisager de générer des pixels RGBA dont l'alpha est à 100% par défaut

    C'était là le sens de ma phrase, en réalité
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Membre éclairé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Points : 764
    Points
    764
    Par défaut
    Je suis bien d'accord avec ça Ce que je soulignais, c'est que ce qu'on appelle un "pixel" (i.e. la chose qui s'affiche à l'écran) peut avoir une définition très différente selon le format d'image que l'on utilise, et rajouter un canal alpha peut être simple, ou pas.

    Ce que tu suggères est juste, mais à mon avis ce n'est (ne sera) pas le cœur du problème. Ceci dit, il est dur d'en juger avec le peu d'information qui a été donné...

  7. #7
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Oh... Hé... Pour une fois que je me contente de répondre à la question sans aborder les différents problèmes qui risquent de se poser, z'allez pas vous plaindre, non plus
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  8. #8
    Membre éclairé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Points : 764
    Points
    764
    Par défaut

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    salut, voilà ce que je fait :
    TColor color = Image1->Canvas->Pixels[i][j];
    je récupère les valeurs RGB :
    Byte R = GetRValue(color);
    Byte G = GetGValue(color);
    Byte B = GetBValue(color);
    après je veux les affecter sur une autre image en ajoutant la valeur alpha :
    SetPixel(Image2->Canvas->Handle, i, j, TColor(RGBA(R, G, B, A)) mais ça ne marche pas !?

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 963
    Points
    32 963
    Billets dans le blog
    4
    Par défaut
    Qu'entends-tu par "ajouter de l'alpha" ?!
    Si l'image d'origine n'en a pas, ça revient à ce qu'elle soit opaque pour chaque pixel, donc 255 (ou 1).
    En tous cas pas un A parachuté d'on ne sait où.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    mais la valeur du pixel en hexa est sous cette forme 0x00FFFFFF pour un blanc => 0xAARRGGBB donc comment modifier le AA en lui donnant une autre valeur que le zéro ?

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 963
    Points
    32 963
    Billets dans le blog
    4
    Par défaut
    Pourquoi pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetPixel(Image2->Canvas->Handle, i, j, TColor(RGBA(R, G, B, 255))
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    ça marche pas

  14. #14
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Si tu nous indiquais déjà à quoi correspond TColor, car bon, la première chose à faire, c'est de s'assurer que ta couleur de "destination" supporte effectivement l'alpha

    Il serait aussi intéressant de savoir quels sont les constructeus dont cette classe dispose, afin de pouvoir déterminer dans quel ordre les différentes composantes doivent être données.

    Enfin, en informatique, "ca marche pas", ca ne veut strictement rien dire et c'est normal que "ca marche pas": je n'ai encore jamais vu un ordinateur avec des jambes ... Pourrais tu être un peu plus précis sur ce qui "ne marche pas"
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup à tous finalement j'ai trouvé que je n’avais pas besoin de ce alpha pour l'insérer dans l'image !

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

Discussions similaires

  1. Comment ajouter Jbutton dans chaque ligne de Jtable ?
    Par riamo dans le forum Général Java
    Réponses: 2
    Dernier message: 03/05/2013, 13h28
  2. [Toutes versions] Comment ajouter user dans moss
    Par majmaj dans le forum SharePoint
    Réponses: 2
    Dernier message: 12/08/2009, 10h49
  3. comment ajouter API dans eclipse?
    Par ouadie99 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 06/01/2007, 09h51
  4. Réponses: 1
    Dernier message: 25/09/2006, 17h15
  5. Réponses: 8
    Dernier message: 16/03/2006, 07h36

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