Conversion RGBA vers HEX

Étiquetté : 

  • Conversion RGBA vers HEX

    Posté par StevannS sur 31 mars 2023 à 10h15

    Bonjour, pour assurer la conversion j’utilise un bouton dans lequel je paramètre la fonction onselect comme suit :

    Set(varColor; RGBA(127; 178; 57; 1));;Set(varHexColor;JSON(varColor))

    Mais lorsque je remplace RGBA(127; 178; 57; 1) par un TextInput5.Text, la conversion ne marche plus ? Merci de votre aide.

    PostID=OLRuh9zj5RYJEoy

    StevannS a répondu Il y a 7 mois, 4 semaines 1 Membre · 12 Réponses
  • 12 Réponses
  • ypicot

    Membre
    31 mars 2023 à 15h28

    Bonjour
    Trois questions :

    • Quelle est l’erreur exacte ?

    • Que mets-tu dans ton TextInput ? La propriété TextInput.Text retourne une chaîne, donc aucun soucis pour convertir ça en JSON. Par contre si tu mets “RGBA(127; 178; 57; 1)” (qui retourne une couleur), PA va râler.

    • Utilises-tu varColor à un autre endroit ? Si tu l’utilises ailleurs comme une couleur, tu vas te retrouver avec une incompatibilité de type (couleur d’un coté, chaîne de l’autre).

    Yvan

    CommentID=sduRpTiOU4m6WZS, PostID=OLRuh9zj5RYJEoy

  • StevannS

    Membre
    31 mars 2023 à 15h56

    en fait PA ne m’indique pas d’erreur…
    Dans le 1er cas, le résultat est #7fb239 (donc bon) alors que dans le 2nd cas le résultat est “RGBA(127; 178; 57; 1)”. Et oui, j’entre RGBA(127; 178; 57; 1) dans mon textinput. Je n’utilise pas varcolor ailleurs.

    CommentID=KRja4grQxgVnw7f, PostID=OLRuh9zj5RYJEoy

  • ypicot

    Membre
    31 mars 2023 à 16h12

    Si je comprends bien, tu voudrais que PA te donne le résultat de la fonction que tu as saisis en texte, en l’occurrence qu’il te donne le résultat de RGBA(…).
    A ma connaissance, cela n’est pas possible car il n’existe pas de fonction EVALUATE ou assimilé (au passage, ce type de fonction est considéré comme dangereux en terme de sécurité).

    Par contre, si tu donnes les 4 paramètres dans des TextInput (ou des curseurs) différents, cela fonctionne.
    Set(varColor; RGBA(txtRouge.Text; txtVert.Text; … ))

    CommentID=zCFkpcnYiNjUmk5, PostID=OLRuh9zj5RYJEoy

  • StevannS

    Membre
    31 mars 2023 à 16h50

    Merci je vais essayer.

    CommentID=Yd4GL7jbSTuyzSH, PostID=OLRuh9zj5RYJEoy

  • DavidZed

    Membre
    1 avril 2023 à 14h50

    Hello StevannS,

    Quand tu dois travailler avec des couleurs dans Power Apps et que tu as une étape où tu doit stocker les valeurs de couleur au format texte, il faut le faire exclusivement au format hexa, plusieurs exemples où l’utilisation des couleurs en hexa simplifie les choses :

    • Quand on souhaite enregistrer une couleur dans une source de données

    • Quand on doit utiliser des couleurs dans du code html dans l’appli

    Il est facile de convertir une valeur hexa “texte” en valeur de couleur RGBA utilisée par les contrôles power automate :

    ColorValue(“#66bb6eff”) sera interprété dans un paramètre où une couleur est attendue comme RGBA(102,182,227,1)

    Par contre c’est beaucoup plus compliqué de transformer une chaîne de texte : “RGBA(102,182,227,1)” en une valeur couleur, car techniquement cela reviendrait à stocker une formule au format texte : Comme dit par ypicot, ce n’est pas possible dans power apps.

    Pour ce qui est de stocker un thème de couleurs dans une variable, cette structure peut être intéressante :

    Set(n    vTheme,n    {n        Couleur01: {n            HEX: "#66bb6eff",n            RGB: ColorValue("#66bb6eff")n        },n        Couleur02: {n            HEX: "#7fb239ff",n            RGB: ColorValue("#7fb239ff")n        },n        Couleur03: {n            HEX: "#dd4f0eff",n            RGB: ColorValue("#dd4f0eff")n        },n        Couleur04: {n            HEX: "#647684ff",n            RGB: ColorValue("#647684ff")n        },n        Couleur05: {n            HEX: "#6d31a2ff",n            RGB: ColorValue("#6d31a2ff")n        }n    }n)

    Cela permet ensuite d’appeler les valeurs en fonction du besoin :

    vTheme.Couleur01.HEX vTheme.Couleur02.RGB

    CommentID=8l76TaGKbSxrIh4, PostID=OLRuh9zj5RYJEoy

  • R3dKap

    Membre
    3 avril 2023 à 20h46

    StevannS,

    Voici la formule pour convertir les valeurs RGBA qui se trouvent dans 4 text input numériques txtRedValue, txtGreenValue, txtBlueValue (contenant des valeurs de 0 à 255) et txtAlphaValue (contenant une valeur décimale entre 0 et 1) en une chaîne de couleur hexa au format rrggbbaa :

    With(n    {AlphaNum: "0123456789ABCDEF"};n    Mid(n        AlphaNum;n        1 + (txtRedValue.Text - Mod(n            txtRedValue.Text;n            16n        )) / 16;n        1n    ) & Mid(n        AlphaNum;n        1 + Mod(n            txtRedValue.Text;n            16n        );n        1n    ) & Mid(n        AlphaNum;n        1 + (txtGreenValue.Text - Mod(n            txtGreenValue.Text;n            16n        )) / 16;n        1n    ) & Mid(n        AlphaNum;n        1 + Mod(n            txtGreenValue.Text;n            16n        );n        1n    ) & Mid(n        AlphaNum;n        1 + (txtBlueValue.Text - Mod(n            txtBlueValue.Text;n            16n        )) / 16;n        1n    ) & Mid(n        AlphaNum;n        1 + Mod(n            txtBlueValue.Text;n            16n        );n        1n    ) & Mid(n        AlphaNum;n        1 + (Round(n            txtAlphaValue.Text * 255;n            0n        ) - Mod(n            Round(n                txtAlphaValue.Text * 255;n                0n            );n            16n        )) / 16;n        1n    ) & Mid(n        AlphaNum;n        1 + Mod(n            Round(n                txtAlphaValue.Text * 255;n                0n            );n            16n        );n        1n    )n)

    Exemple, si :

    • txtRedValue = 252

    • txtRedValue = 192

    • txtRedValue = 28

    • txtAlphaValue = 0,71

    Alors le résultat est : FCC01CB5.

    C’est comme ça que j’ai géré la conversion dans mon composant UltimateColorPicker :

    CommentID=T9rFhQGtdWBDofz, PostID=OLRuh9zj5RYJEoy

    • DavidZed

      Membre
      4 avril 2023 à 8h21

      Si je trouve le temps, je la simplifierai bien avec les fonctions Dec2Hex() et Hex2Dec()

      qui sont toujours pas dans la doc

      SubCommentID=8Rr9twPEH2tOSVA, CommentID=T9rFhQGtdWBDofz, PostID=OLRuh9zj5RYJEoy

    • ypicot

      Membre
      4 avril 2023 à 15h44

      Je verrais bien qque chose comme

      Dec2Hex(txtRedValue.Text; 2) &
      Dec2Hex(txtGreenValue.Text; 2) &
      Dec2Hex(txtBlueValue.Text; 2) &
      Dec2Hex(txtAlphaValue.Text * 255; 2)

      Le premier argument étant (sans surprise) la valeur à convertir, le deuxième la taille de la chaine si besoin de remplissage (la valeur “10” étant convertie en “0A”)

      SubCommentID=VgNp2lpOhJIu3O8, CommentID=T9rFhQGtdWBDofz, PostID=OLRuh9zj5RYJEoy

    • DavidZed

      Membre
      5 avril 2023 à 19h03

      Oui tout simplement 🙂 ne pas oublier le # devant 🙂

      SubCommentID=t6bHhRRZT6zvwSu, CommentID=T9rFhQGtdWBDofz, PostID=OLRuh9zj5RYJEoy

  • StevannS

    Membre
    13 avril 2023 à 13h14

    Merci à vous 3.

    Après test, le code d’Ypicot laisse le dernier terme (transparence) en chiffre et non en lettre (contrairement au code de R3dKap). Je vais donc adopter ce dernier. Merci encore !

    CommentID=mOfgacrlt2KmAiP, PostID=OLRuh9zj5RYJEoy

  • ypicot

    Membre
    22 avril 2023 à 10h02

    Heuuu…. Je viens de (re)faire le test, la transparence apparait bien en lettre (sauf si tu mets une valeur telle que “0,27”, ce qui correspond à “44” en hexa).

    Pourrais-tu me donner un cas où cela ne fonctionne pas correctement ?

    CommentID=wbNso4rjhfAUnKV, PostID=OLRuh9zj5RYJEoy

  • StevannS

    Membre
    23 avril 2023 à 5h52

    Hello ! je viens de retester ta formule… et tout ok de mon côté… J’ai dû faire une mauvaise manip la 1ère fois. Désolé ! Merci d’être revenu sur ce post, et mon erreur…

    CommentID=fehhv4OpK3a9kZ9, PostID=OLRuh9zj5RYJEoy

Connectez-vous pour répondre.