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

Algorithmes et structures de données Discussion :

Fondu au noir de couleur RGB


Sujet :

Algorithmes et structures de données

  1. #1
    Futur Membre du Club
    Fondu au noir de couleur RGB
    Bonjour
    Je voudrais commander des LED strips RGB avec un arduino. En entrée j'ai une couleur RGB et une intensité i (disons une valeur entre 0 et 1).
    J'aimerais pouvoir utiliser une formule pour trouver la couleur intermédiaire entre le noir et cette couleur RGB qui corresponde à l'intensité i.
    J'ai essayé de simplement de multiplier:
    R2=R*i
    G2=G*i
    B2=B*i
    mais ça semble modifier la couleur plutôt que de faire une nuance de la couleur originale.
    Y a-t-il une formule qui donne vraiment un fondu naturel au noir d'une couleur RGB?
    Merci
    David

  2. #2
    Expert éminent sénior
    Bonjour

    • Pour moi, tu as la bonne méthode.
    • Les 3 composantes n'ont pas la même importance pour un oeil.
    • Nous n'avons pas tous les mêmes yeux.
    • De là à dire que la couleur change, c'est bizarre.
    • Es-tu sûr que vous parlez la même langue, ton ordi et toi ? R*i est un nombre à virgule puisque i est entre 0 et 1. Faudrait-il des entiers ?
    • As-tu un exemple concret ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre chevronné
    Fondu au noir de couleur RGB
    Bonjour,

    Citation Envoyé par zesinger Voir le message
    ... J'ai essayé de simplement de multiplier:
    R2=R*i
    G2=G*i
    B2=B*i
    mais ça semble modifier la couleur plutôt que de faire une nuance de la couleur originale.
    Y a-t-il une formule qui donne vraiment un fondu naturel au noir d'une couleur RGB? ...
    Si le fonctionnement du système ne dépend que d'un seul paramètre (tension d'alimentation ou intensité) tu ne disposes probablement d'aucune possibilité d'agir sur les tentes intermédiaires, à moins de bricoler le circuit.
    Les intensités des couleurs seront données par 3 fonctions caractéristiques du montage:
    r = Fr(u) ; v = Fv(u) ; b = Fb(u) .

    D'autre part, tu ne définis pas ce qu'est un "fondu naturel" allant du noir à une couleur quelconque (r°, v°, b°): dans le domaine [0 ; 255]3 , il y a une infinité de chemins reliant l'origine (0, 0, 0) au point (M°) représentant la couleur considérée.

    Si tu es en mesure de programmer les intensités relatives des 3 couleurs en fonction d'un paramètre (t) variant de zéro (pour le noir) à l'unité (lumière maximale), tu peux envisager plusieurs fonctions monotones croissantes:

    a) une relation de proportionnalité:
    r = Round(r°.t) ; v = Round(v°.t) ; b = Round(b°.t) ,
    qui conduit apparemment à un résultat décevant;

    b) une relation restreignant le domaine des couleurs sombres, peu attrayantes:
    r = Round(r°.Sqrt(t)) ; v = Round(v°.Sqrt(t)) ; b = Round(b°.Sqrt(t)) ;

    c) des fonctions linéaires par morceaux, permettant d'introduire une couleur intermédiaire (r1, v1, b1):

    r = Round(r1*t/t1) si (t < t1) sinon r = Round(r1 + (r° - r1)*(t - t1)/(1 - t1)) ;
    v = Round(v1*t/t1) si (t < t1) sinon v = Round(v1 + (v° - v1)*(t - t1)/(1 - t1)) ;
    b = Round(b1*t/t1) si (t < t1) sinon b = Round(b1 + (b° - b1)*(t - t1)/(1 - t1)) ,

    avec (t1 << 1), par exemple t1 = 0.1 ou 0.2; c'est à ce stade un choix personnel.

    PS1: Il y a aussi une variante (d) favorisant les couleurs les plus lumineuses:
    r = Round(r1*Sqrt(t/t1)) si (t < t1) sinon r = Round(r1 + (r° - r1)*(t - t1)/(1 - t1)) , etc

    PS2: Désolé de laisser transparaître une ignorance scandaleuse ...
    Je voudrais commander des LED strips RGB avec un arduino.
    qu'est-ce que c'est qu'un arduino ?


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  4. #4
    Expert éminent sénior
    Salut,
    Citation Envoyé par zesinger Voir le message
    [...] fondu naturel au noir d'une couleur RGB ?
    Il va te falloir 3 "i" différents, sauf dans le cas très particulier où R = G = B (et c'est donc du gris au départ).

    Ta demande sous-entend que tu vas baisser le rouge de R à 0, le vert de G à 0 et le bleu de B à 0, les trois baissant ensemble.

    Prenons un exemple avec R = 200, G = 100 et B = 20 (un beau marron clair).
    Il va te falloir jouer avec des règles de 3 car pendant que B "descend" de 20 à 0 R doit "descendre" de 200 à 0 et G de 100 à 0. On pourrait envisager, à la louche, que quand B est à 5 G est à 25 et R à 50, un marron foncé.

    Ou alors tu n'as qu'un seul "i" et il faudra partir de la valeur la plus élevée, soit R dans mon exemple, et la teinte va changer car quand R sera "descendu" à 180 B sera déjà à 0 donc plus de bleu, et idem à R = 100, il n'y aura plus de vert.
    Tu te retrouveras avec un rouge sombre, qui continuera à "descendre" au noir.

    EDIT : toujours les mêmes, quand on parle de couleurs,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Membre chevronné
    Fondu au noir de couleur RGB
    Cela va sans dire mais encore beaucoup mieux en le disant, les indices de couleur (r1, v1, b1) sont inférieurs à (r°, v°, b°), mais relativement proches, par exemple en prenant:
    r1 = 0.8 * r° ; v1 = 0.8 * v° ; b1 = 0.8 * b° .

    Il y a ici trois rapports à choisir.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  6. #6
    Futur Membre du Club
    Par fondu naturel, je veux dire "la même couleur" (c'est sans doute subjectif si j'ai bien compris) avec une intensité différente.
    Je vais préciser ma demande. J'ai fabriqué un flipper virtuel ( ). On utilise des LED strips pour plusieurs buts, dont 1 est l'undercab (les changements de couleurs sous le flipper quand on le voit de côté). J'aimerais récupérer le signal RGB de l'undercab ainsi que le son en entrée des hauts-parleurs dans un arduino, faire calculer à cet arduino une intensité du son (ça fait partie aussi des recherches à venir) ce qui fera mon "i" de la question initiale.
    Ainsi avec le RGB initial et le i calculé, mettre un LED strip derrière les caches des haut-parleurs et afficher la couleur undercab dont l'intensité varierait en fonction de la musique jouée sur les HP.

  7. #7
    Expert éminent sénior
    Citation Envoyé par zedrummer Voir le message
    [...] ce qui fera mon "i" de la question initiale.
    Ainsi avec le RGB initial et le i calculé, [...]


    Citation Envoyé par Jipété Voir le message
    Il va te falloir 3 "i" différents, sauf dans le cas très particulier où R = G = B (et c'est donc du gris au départ).
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    Futur Membre du Club
    Bah je n'ai qu'un i qui est l'intensité du son et je voudrais diminuer l'intensité de la couleur RGB en fonction de ce i

  9. #9
    Expert éminent sénior
    Citation Envoyé par zedrummer Voir le message
    Bah je n'ai qu'un i qui est l'intensité du son et je voudrais diminuer l'intensité de la couleur RGB en fonction de ce i
    Citation Envoyé par Jipété Voir le message
    Prenons un exemple avec R = 200, G = 100 et B = 20 (un beau marron clair).
    Il va te falloir jouer avec des règles de 3 car pendant que B "descend" de 20 à 0 R doit "descendre" de 200 à 0 et G de 100 à 0. On pourrait envisager, à la louche, que quand B est à 5 G est à 25 et R à 50, un marron foncé.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  10. #10
    Futur Membre du Club
    Donc selon toi, multiplier par i, compris entre 0 et 1, ça devrait marcher ?
    Bizarre quand j'avais essayé ça, il y a quelques temps, ça dénaturait la couleur en la fonçant.

  11. #11
    Membre chevronné
    Fondu au noir de couleur RGB
    Citation Envoyé par zedrummer Voir le message
    Bah je n'ai qu'un i qui est l'intensité du son et je voudrais diminuer l'intensité de la couleur RGB en fonction de ce i
    Je suppose que la luminosité augmente avec l'intensité sonore (i).

    Il te suffit donc de prendre l'une des fonctions qui ont été proposées - si elles te conviennent; il suffit de changer la notation.

    Il y a néanmoins deux questions concernant ce programme:
    a) souhaites-tu un simple affaiblissement des teintes à partir d'une couleur de luminosité maximale (r°, v°, b°), lorsque faiblit l'intensité sonore (cas précédemment envisagés), ou bien une évolution des couleurs comme l'a indiqué Jipété () ? on pourrait alors utiliser d'autres fonctions;
    b) y a-t-il trois sortes de diodes, dont les couleurs d'émission correspondent (au moins approximativement) aux couleurs primaires du système (RVB); tu n'a pas décrit le système, mais cela ne devrait soulever qu'une question d'ajustage des fonctions.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  12. #12
    Expert éminent sénior
    Donc selon toi, multiplier par i, compris entre 0 et 1, ça devrait marcher ?
    Oui ! Vas-y. N'aie pas peur.

    ça dénaturait la couleur en la fonçant.
    Oui. C'est le principe d'un fondu au noir. Si tu as un problème avec cela, c'est que tu ne veux pas faire un fondu au noir.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  13. #13
    Expert éminent sénior
    Citation Envoyé par Flodelarab Voir le message
    Oui ! Vas-y. N'aie pas peur.
    Oui, tu as raison.
    Je me suis pris les pieds dans le tapis avec mon histoire de 3 "i" (la faute à l'hiver qui approche, les neurones sont moins agiles, ).
    Bah...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  14. #14
    Futur Membre du Club
    Oui je souhaites partir de la valeur max et définir une valeur entre 0 et ces R°, V° et B°.
    Le LED strip est de ce type https://www.amazon.fr/d%C3%A9clairage-r%C3%A9tro%C3%A9clairage-T%C3%A9l%C3%A9commande-%C3%A9clairage-non-imperm%C3%A9able/dp/B07C7GV2NH

  15. #15
    Rédacteur/Modérateur

    Comme tout le monde : R1=i*R0, G1=i*G0 et B1=i*B0

    Si tu as un exemple de valeurs (R1 G1 B1) et (R0 G0 B0) où ça ne convient pas, partage ces valeurs. Mais ce sera très probablement un dysfonctionnement de la LED.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  16. #16
    Expert éminent sénior
    La théorie, tu l'as.
    Pour la pratique, je gardais une place au doute, jusqu'à ce que je trouve cette vidéo :



    Ou celle-ci


    Il y a un dégradé de couleur (+1) et une variation en intensité (+1).
    Donc c'est bon.

    À noter : il n'y a pas de noir. Le noir est juste l'absence de lumière. Important à considérer car j'imagine l'"écran" blanc.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  17. #17
    Futur Membre du Club
    Merci à vous, je vais essayer tout ça.

###raw>template_hook.ano_emploi###