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

Lazarus Pascal Discussion :

TColor : déclaration des couleurs inversée. Pourquoi ?


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut TColor : déclaration des couleurs inversée. Pourquoi ?
    Bonjour,

    Je voulais utiliser une couleur définie en RVB 152-201-250 (Conversion en Hexa : 98-C9-FA).

    En Lazarus :
    clBleuMoyen := RGBToColor(152,201,250);
    ou
    clBleuMoyen := TColor($FAC998); (ou $00FAC998)

    J'ignorais qu'il fallait déclarer TColor(B, G, R) et non TColor(R, G, B)
    C'est vrai qu'en regardant "simplement" clAqua Tcolor(FF,FF,0) ie 0,255,255, on peut s'en rendre compte "facilement"... avec un minimum d'attention.

    Je ne me rappelle pas avoir lu quoi que ce soit à ce niveau et par paresse (pour m'éviter 3 conversions en hexa), j'utilise RGBToColor ou les clAbrev prédéfinies. Mais dans ce cas précis, je devais déclarer des "nuances" de couleurs comme constantes donc exit les (mauvaises) habitudes.

    La documentation de Lazarus à ce sujet n'est pas explicite et entretient même la confusion :
    OVERVIEW
    The standard color in the LCL is TColor, which is compatible to Delphi's TColor. TColor can be an RGB, 3x8bit, value or a system color like clDefault.
    Source
    Pourquoi diable cette inversion dans la suite des couleurs du TColor ? C'est compatible Delphi précise la documentation de Lazarus. C'est donc visiblement un emprunt d'usage. C'est un peu court comme explication.

    Cordialement. Gilles
    Dernière modification par Invité ; 25/02/2012 à 11h43. Motif: Clarification

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 940
    Billets dans le blog
    6
    Par défaut
    possible que ce soit lié à l'Endianess de Delphi/Intel, qui stocke les entiers avec les poids faible en tête (alignement Little Endian), donc une représentation mémoire RGB(+/-alpha)
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Invité
    Invité(e)
    Par défaut
    Oui, c'est une explication rationnelle et fort plausible compte tenu de la concomitance de Borland, Windows et Intel.

    Si tel est le cas, sans échapper à ses origines, "on" aurait pu faire l'effort de respecter une standardisation "humaine". C'est très curieux cette approche.

    Merci beaucoup.
    Bonne Fin de WE.
    Cordialement. Gilles

  4. #4
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Bonjour,
    Citation Envoyé par selzig Voir le message
    Pourquoi diable cette inversion dans la suite des couleurs du TColor ? C'est compatible Delphi précise la documentation de Lazarus. C'est donc visiblement un emprunt d'usage. C'est un peu court comme explication.
    Ah bon ? Dès le tout début, Lazarus avait pour but de ressembler le plus possible à Delphi, voire d'en être un clône (cf. wiki)
    Citation Envoyé par selzig Voir le message
    J'ignorais qu'il fallait déclarer TColor(B, G, R) et non TColor(R, G, B)
    Ce n'est pas tout à fait cela, mais plutot TColor($00BGR) ou TColor($BGR) où la valeur hexa se décompose en 4 octets dont les 3 derniers (le lisant le texte de gauche à droite) contiennent les valeurs pour le Bleu, le Vert et le Rouge.
    Dans Delphi, on a pas RGBToColor(R, G, B: Byte): TColor mais RGB(R, G, B: Byte): COLORREF; . Les fonctions réalisent la même opération aux propriétés commutatives des opérateurs près...
    --
    Philippe.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonsoir Philippe,

    Oui, je ne conteste pas que j'aurais dû savoir. Mais je n'avais jamais remarqué... même avec mon vieux Delphi 7.

    Citation Envoyé par Ph. B. Voir le message
    [...]Ce n'est pas tout à fait cela, mais plutot TColor($00BGR) ou TColor($BGR) où la valeur hexa se décompose en 4 octets dont les 3 derniers (le lisant le texte de gauche à droite) contiennent les valeurs pour le Bleu, le Vert et le Rouge.[...]
    Citation Envoyé par selzig Voir le message
    clBleuMoyen := TColor($FAC998); (ou $00FAC998)
    Pas de confusion à ce niveau. Enfin j'espère : L'utilisation TColor(R, G, B) avait pour seul objet d'insister sur l'ordre.

    J''ai simplement été surpris et amusé par le bleu "marron" que j'ai obtenu dans ma StringGrid... et dans ma mémoire cela ne m'a rien rappelé... J'ai donc découvert cette "curiosté"... d'où la mienne.

    Citation Envoyé par Ph. B. Voir le message
    Ah bon ? Dès le tout début, Lazarus avait pour but de ressembler le plus possible à Delphi, voire d'en être un clône (cf. wiki)
    Il faut bien un point de départ... Mais dès sa naissance aussi, il a nécessairement divergé à partir du moment où Borland a abandonné Kylix. Je pense en effet que c'est probablement des conjonctions de l'Histoire comme le précise Toulourou, même si Lazarus n'était pas aussi intrinsèquement lié à la plateforme Intel/Windows... Ce qui lui a donné fort à faire : il a fallu inventer pour les autres environnements.

    Merci pour vos précisions. Gilles
    Dernière modification par Invité ; 25/02/2012 à 19h48.

  6. #6
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    ceci dit l'ordre des composants de couleur dépend aussi de son utilisation...par exemple pour définir une texture OpenGL il faut inverser le Rouge et le Bleu d'un Bitmap Windows 32bits
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 940
    Billets dans le blog
    6
    Par défaut
    Y aurait-il une différence d'Endianité entre les processeurs de la carte mère et de la carte graphique ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  8. #8
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    Y aurait-il une différence d'Endianité entre les processeurs de la carte mère et de la carte graphique ?
    si c'était un problème de boutisme, le canal Alpha serait affecté

    $AARRGGBB <=> $BBGGRRAA

    en fait je pense que c'est juste une convention

    RGB/BGR Color Model
    RGB and BGR formats describe colors in an additive color model. The most common method of describing an image is with three separate color channels representing the colors red (R), green (G), and blue (B). WIC provides support for these three channels in either the red-green-blue (RGB) or blue-green-red (BGR) order. This is the order in which each color channel appears within the sequential bit stream. For example, in the GUID_WICPixelFormat32bppRGB format, each pixel is 32 bits wide. The red channel is the first (least significant) byte in memory, followed by green, and then blue. Conversely, in the GUID_WICPixelFormat32bppBGR format, the color channels are in the opposite order. WIC supports a number of RGB/BGR formats, including special packed bit formats such as GUID_WICPixelFormat16bppBGR555.
    http://msdn.microsoft.com/en-us/libr....aspx#rgbcolor
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

Discussions similaires

  1. Inversion des couleurs d'un fichier BMP
    Par pottiez dans le forum Télécharger
    Réponses: 1
    Dernier message: 27/08/2011, 08h25
  2. Déclaration des variables : pourquoi ?
    Par troumad dans le forum Langage
    Réponses: 2
    Dernier message: 19/09/2009, 22h18
  3. Inversion des couleurs des fenetres non actives
    Par poulette3000 dans le forum Applications et environnements graphiques
    Réponses: 0
    Dernier message: 29/04/2009, 16h20
  4. [Debutant] gestion des couleurs ??
    Par MaxiMax dans le forum OpenGL
    Réponses: 5
    Dernier message: 26/03/2004, 08h34
  5. pb pour modifier la luminositée des couleurs
    Par mathieutlse dans le forum Langage
    Réponses: 2
    Dernier message: 08/01/2003, 14h45

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