PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Gros bug de la fonction RVB
Gros bug de la fonction RVB
Iniciado por Philippe SB, 10,mar. 2020 17:54 - 4 respuestas
Miembro registrado
2.682 mensajes
Publicado el 10,marzo 2020 - 17:54
Bonjour,

Il existe un bug énorme dans la fonction RVB. L'entier renvoyé par cette fonction est totalement faux.

// Selon Windev
RVB(255,200,150) = 9 881 855

Or selon l'algo que l'on peut trouver partout sur internet pour différents langages, on devrait trouver 16 763 030

En effet, 255*65536 + 200*256 + 150 = 16 763 030.

D'ailleurs le sélecteur de couleur affiche bien en Hexadécimal : FFC896 et cette valeur correspond bien à 16 763 030 et non à la valeur renvoyée par Windev.

Je m'étais déjà posé cette question lorsque j'avais transformé manuellement des couleurs hexa en rvb et puis comme ça ne donnait jamais ce que je souhaitais, je finissais par les mettre en rvb.

C'est au final extrêmement pénible de devoir jongler avec ces différentes valeurs alors que l'écriture hexa est plus simple.

Bref encore un bug qui a été masqué par la sortie de fonctions type RVBVersHTML afin de retrouver les vraies valeurs RVB.

--
Cordialement,

Philippe SAINT-BERTIN
Mensaje modificado, 10,marzo 2020 - 17:55
Miembro registrado
948 mensajes
Publicado el 10,marzo 2020 - 18:07
Bonjour
En effet même en version 20, RVB(255,200,150) = 9 881 855 soit 96C8FF donc la fonction devrait s'appeler BVR() car RVB(150,200,255) renvoie bien 16763030 = FFC896

--
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
Quand un utilisateur vous a aidé, n'oubliez pas de le remercier...
Miembro registrado
948 mensajes
Publicado el 10,marzo 2020 - 18:25
Suite
L'aide en ligne est lui aussi buggé :
...
<Résultat> = RVB(<Composante rouge> , <Composante verte> , <Composante bleue>)
<Résultat> : Entier

Couleur (24 bits) relative aux composantes fournies. Cette couleur est le résultat de la formule suivante :
Couleur = 65536 * Composante Bleu + 256 * Composante Verte + Composante Rouge.
...
le pire c'est que
dLigne(0,0,20,20,RVB(255,0,0),2) trace bien un segment rouge
dLigne(0,0,20,20,RVB(0,255,0),2) trace bien un segment vert
dLigne(0,0,20,20,RVB(0,0,255),2) trace bien un segment bleu
et dLigne(0,0,20,20,RVB(255,200,150),5) trace bien un segment de couleur identique à celle générée par GIMP
--
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
Quand un utilisateur vous a aidé, n'oubliez pas de le remercier...
Mensaje modificado, 10,marzo 2020 - 18:35
Miembro registrado
57 mensajes
Publicado el 11,marzo 2020 - 15:28
Bonjour,

Le codage des couleurs dans WINDEV suit la norme Windows sur ce sujet (inversion poids fort et poids faible) :

https://docs.microsoft.com/fr-fr/windows/win32/gdi/colorref

Il n’y a aucune erreur, le codage de la couleur en informatique est réalisé ainsi :
Couleur = 65536 * Composante Bleu + 256 * Composante Verte + Composante Rouge

Donc, la commande RVB retourne le bon résultat : (150*65536)+(200*256)+(255) donne bien 9 881 855.

L’affichage de la couleur en Hexadécimal ne représente pas un nombre mais la valeur de chacune des composantes (#FFC896). C’est la notation HTML de la couleur : (FF:250 / C8:200 / 96:150).

--
Loïc HAMEL (Twitter : @HAMELLoic)
Support Technique PC SOFT
Miembro registrado
151 mensajes
Publicado el 13,marzo 2020 - 18:37
La version WinDev retourne la bonne valeur à savoir 9881855.
Cependant la commande RGB (24-bit) retourne un entier qui ne tient pas compte du canal Alpha (32-bit).

Je vous conseille de passer par une structure COLORBYTES

Exemple
struct COLORBYTES {
BYTE B;
BYTE G;
BYTE R;
BYTE A;
};

et vous pouvez écrire une fonction ARGB comme ceci

FUNCTION ARGB(local A is 1-byte unsigned int, local R is 1-byte unsigned int, local G is 1-byte unsigned int, local B is 1-byte unsigned int)
bytestruct is COLOBYTES
nRet is unsigned int = 0
bytestruct.A = A
bytestruct.R = R
bytestruct.G = G
bytestruct.B = B
transfer (&nRet, &bytestruct, dimension(bytestruct)
result nRet

--
Patrice Terrier
www.zapsolution.com