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++Builder Discussion :

TObject->Color et composantes RGB [FAQ]


Sujet :

C++Builder

  1. #1
    Membre averti Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Points : 404
    Points
    404
    Par défaut TObject->Color et composantes RGB
    Bonjour,

    (Borland c++ Builder 3)

    Comment faire pour récupérer les composantes RGB d'un TColorDialog->Color ?

    Et vice-versa, comment, puis-je attribuer une couleur à un objet (par exemple un panel) à partir des composantes RGB de cette couleur ?

    Merci. Flo.

  2. #2
    JEG
    JEG est déconnecté
    Membre éclairé
    Avatar de JEG
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 211
    Points : 727
    Points
    727
    Par défaut Re: TObject->Color et composantes RGB
    Citation Envoyé par Florian Sella
    Bonjour,

    Et vice-versa, comment, puis-je attribuer une couleur à un objet (par exemple un panel) à partir des composantes RGB de cette couleur ?

    Merci. Flo.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int rouge = 255;
    int vert  = 0;
    int bleu = 0;
    Panel1->Color = RGB(rouge, vert, bleu);

  3. #3
    Membre averti Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Points : 404
    Points
    404
    Par défaut
    Merci JEG

    et pour récupérer RGB à partir de la valeur de Color ?

    Ah au fait, j'ai réussi à faire fonctionner mon algo pour segmenter sur des zones fermées connexes ou pas. Pour l'instant, niveau code, c'est un peu le bazard. Je le réarrange et je t'en fais part si ça t'intéresse toujours. (Par contre on fera pas du temps réel avec !!! --- il est un peu lourd je pense !!! ). Pour l'instant je l'utilise comme "pot de peinture", mais je récupère tous les pixels du compact, en différenciant les pixels-contours et les pixels internes. Faut également que je travaille sur le nombre d'itérations, je cumule plusieurs fois les mêmes infos sur plusieurs itérations.

    Flo.

  4. #4
    JEG
    JEG est déconnecté
    Membre éclairé
    Avatar de JEG
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 211
    Points : 727
    Points
    727
    Par défaut
    pour le RGB je ne sais plus dans le sens inverse, mais c'est peut-être une méthode de TColor.

    Pour l'algo, ca m'interesse toujours, si tu t'en sers juste comme pot de peinture, il y a une méthode Fill() de ma classe TCanvas, qui te permet de remplir d'une certaine couleur tous les pixels contigus, mais ca ne fait pas de sélection

  5. #5
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 25
    Points : 81
    Points
    81
    Par défaut
    Voici la macro RGB :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #define RGB(r, g ,b)  ((DWORD) (((BYTE) (r) | \
        ((WORD) (g) << 8)) | \
        (((DWORD) (BYTE) (b)) << 16)))

    donc pour connaître r, g et b :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      DWORD dwStyle = RGB(196, 255, 205);
      BYTE b = dwStyle >> 16;
      BYTE g = (dwStyle & ~(b << 16)) >> 8;
      BYTE r = dwStyle & ~(b << 16) & ~(g << "8");* 
      //*J'ai été obligé de mettre des guillemets autour du 8 sinon, à l'affichage de mon message j'ai un 8). 
      //Les guillemets sont donc à effacer dans le code réel.
     
     
      ShowMessage("r :  " + IntToStr(r) +  "\r\n" +
                  "g :  " + IntToStr(g) + "\r\n" +
                  "b :  " + IntToStr(b));
    @+

    Frédéric

  6. #6
    Membre chevronné
    Avatar de Geronimo
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 156
    Points : 1 969
    Points
    1 969
    Par défaut
    Tu peux aussi découper ton code hexadécimal en chaine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AnsiString Couleur = IntToHex(color, 8);
    et ensuite, à l'aide de SubString, tu découpes ta chaine.
    Sache seulement que dans l'ordre tu as :

    Une question concernant C++Builder ? Voici la réponse
    Consultez aussi les tutoriels de qualité de la section C/C++

  7. #7
    Membre averti Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Points : 404
    Points
    404
    Par défaut
    Merci à vous trois pour les morceaux de codes.

    Mais j'avoue que j'ai du mal à comprendre celui de fred.
    A quel moment apparait le TObject->Color dont on veut connaitre les composante r,g,b ?

    Merci

    FLo

  8. #8
    JEG
    JEG est déconnecté
    Membre éclairé
    Avatar de JEG
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 211
    Points : 727
    Points
    727
    Par défaut
    essaye de remplacer ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DWORD dwStyle = RGB(196, 255, 205);
    par ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DWORD dwStyle = bidulle->Color;

  9. #9
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 25
    Points : 81
    Points
    81
    Par défaut
    Salut,
    Merci JEG mais c'est un peu ma faute. D'où l'importance de bien nommer ses variables : j'aurais dû appeler ma variable dwColor plutôt que dwStyle.
    @+
    Frédéric

  10. #10
    Membre averti Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Points : 404
    Points
    404
    Par défaut
    Avec la petite correction de JEG, il marche à merveille ton code fred.

    Merci encore. Flo

  11. #11
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 25
    Points : 81
    Points
    81
    Par défaut
    Salut,
    Je viens de trouver aussi l'équivalent dans les api windows avec GetRValue, GetBValue et GetGValue dont tu trouveras la définition dans wingdi.h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #define GetRValue(rgb)      ((BYTE)(rgb))
    #define GetGValue(rgb)      ((BYTE)(((WORD)(rgb)) >> 8 ))
    #define GetBValue(rgb)      ((BYTE)((rgb)>>16))
     
    Donc :
     
    BYTE bRed = GetRValue((DWORD)MonObjet->Color);
    BYTE bGreen = GetGValue((DWORD)MonObjet->Color);
    BYTE bBlue = GetBValue((DWORD)MonObjet->Color);
    C'est encore plus simple que ce que je t'avais proposé et ça montre la vraie traduction inverse de la macro RGB.

    @+

    Frédéric

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

Discussions similaires

  1. Colorer cellule par RGB
    Par flamel dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/08/2010, 18h29
  2. Extraction des composante RGB
    Par Devamira dans le forum Images
    Réponses: 2
    Dernier message: 23/04/2010, 14h27
  3. [Débutant] Calcul de la moyenne des composantes RGB d'une image
    Par amalirou dans le forum Images
    Réponses: 3
    Dernier message: 24/09/2007, 22h44
  4. [Débutant] Calcul des composantes RGB d'une video
    Par amalirou dans le forum Images
    Réponses: 1
    Dernier message: 11/08/2007, 22h42

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