[Applescript] conversion RGB en RGB + ambre

two

Membre actif
6 Novembre 2005
895
291
Namur
Bonjour,

depuis peu je travaille avec Lxconsole, une console pour gérer des éclairages en DMX.

Le sof est sympa mais il faut un peu mettre les mains dans le cambouis...
Dans mes sources lumineuses j'ai quelques PAR leds Rouge-Vert-Bleu-Ambre
Pour définir une couleur pour ces PAR il faut soit mémoriser les valeurs des couleurs qui vous intéressent et les rentrer à la main (en %). soit tâtonner...
Pour contourner le problème j'ai écrit le script suivant
Bloc de code:
property channels : {"2", "18", "34", "50", "98", "114", "130", "146"} --cannaux dmx utilisés + 1

repeat
    display dialog "Choisissez PAR à modifier" default answer "" buttons {"Cancel", "OK"} default button 2
    set PAR_number to (the text returned of the result as real)
    if PAR_number is not equal to 0 then exit repeat
end repeat
repeat
    if PAR_number is less than 9 then exit repeat
    display dialog "Il n'y a que 8 PAR" default answer "" buttons {"Cancel", "OK"} default button 2
    set PAR_number to (the text returned of the result as real)
    
end repeat


set theColor to choose color default color {65535, 65535, 65535}

repeat with c from 1 to 3
    set cs to (item c of theColor)
    set cs to round (cs * 100 / 65535)
    set my_PAR to item PAR_number of channels
    set my_PAR to my_PAR + c
    tell application "LXConsole"
        set _command to (my_PAR as text) & "@" & (cs as text)
        tell the front document to doCommand string _command
    end tell
end repeat
tell application "LXConsole"
    set _command to "1&17&33&49&97&113&129&145@100"
    tell the front document to doCommand string _command
end tell
La partie du script qui nous intéresse le plus, adaptée à une utilisation de test :
Bloc de code:
set theColor to choose color default color {65535, 65535, 65535}
set csf to "{"
repeat with c from 1 to 3
    set cs to (item c of theColor)
    set cs to round (cs * 100 / 65535)
    set my_PAR to item PAR_number of channels
    set my_PAR to my_PAR + c
    tell application "LXConsole"
        set _command to (my_PAR as text) & "@" & (cs as text)
        tell the front document to doCommand string _command
    end tell
    if c < 3 then
        set csf to csf & cs & ", "
    else
        set csf to csf & cs & "}"
    end if
end repeat
return csf
Mon souci est le suivant : des leds RVB ne sont pas excellents pour restituer les couleurs jaunes et orangées (c'est pour cela que j'ai pris des PAR RGBA) et mon script ne gère pas la composante ambre des PAR.
Quelqu'un aurait une idée pour convertir les couleurs RGB dans la gamme jaune-vert à orange-rouge en RGBA?

D'avance Merci,
 
Dernière édition:
Ici le "A" correspond au "alpha", la transparence ou opacité. Rien avoir avec le "ambre" de notre ami. :zen:
Bonjour

J'y connais rien, c'était juste pour vous inciter à lui trouver une bonne réponse en ce jour de Noël.

J'ai remarqué, qu'une question qui trouve pas de réponse alors écrivez une bêtise ( comme moi dans ce post) pour souvent avoir de bon résultats.

J'avais seulement regardé l'initiale et non le mot complet, d'où mon erreur.

Joyeux noël

Cordialement

@+
 
T'inquiète, dans mes recherches j'ai aussi cru avoir trouvé en tombant sur des convertisseurs RGB vers RGB-Alpha.
Je n'ai malheureusement pas trouvé de conversion vers RGB-Ambre.
Mais je n'ai aucune idée de comment filtrer les couleurs rgb pour ne fut ce que définir celles pour lesquelles l'utilisation de l'ambre serait un plus.
Est ce que partir d'une définition de couleur HSB ne fonctionnerait pas plus facilement que de partir d'une définition RVB?
En HSB un rouge RGB pur est 0H 100S 100B - un vert RGB pur est 120H 100S 100B - Un ambre est 30H 100S 100B.
Sachant que pour la gestion des lumières je ne devrais pas avoir à toucher à la luminosité pour définir mes couleurs (le B du HSB), je ne devrais faire intervenir l'ambre que pour la Plage H 0 à 120 avec la condition que la saturation soit au moins de 30 (si cette condition est vraiment utile?)

Joyeux Noël
 
Dernière édition:
J'avance dans mon script,

J'ai trouvé ici le code à utiliser pour convertir dur RVB vers HSL( ou HSB ou TSL en français) et inversément.
Ceux-ci n'ont pas été trop durs à convertir en applescript.
Je les mets ci-après pour ceux qui en auraient besoin

RVB / RGB vers TSL / HSL
Bloc de code:
set RGB_Color to choose color default color {65535, 65535, 65535}
set RGB_R to ((item 1 of RGB_Color) / 65535) --                 RGB from 0 to 1
set RGB_G to ((item 2 of RGB_Color) / 65535)
set RGB_B to ((item 3 of RGB_Color) / 65535)



if (RGB_G > RGB_R) then
    set TBIG to RGB_G
    set Tsmall to RGB_R
else
    set TBIG to RGB_R
    set Tsmall to RGB_G
end if
if (RGB_B > TBIG) then
    set TBIG to RGB_B
end if
if (Tsmall > RGB_B) then
    set Tsmall to RGB_B
end if
set Delta to TBIG - Tsmall
if Delta = 0 then --                       This is a gray, no chroma...
    set My_HUE to 0
    set My_sat to 0
else --                                 Chromatic data...
    if (Tsmall + TBIG) < 1 then
        set My_sat to round (100 * (Delta / (TBIG + Tsmall)))
    else
        set My_sat to round (100 * (Delta / (2 - TBIG - Tsmall)))
    end if
    set del_R to (((TBIG - RGB_R) / 6) + (Delta / 2)) / Delta
    set del_G to (((TBIG - RGB_G) / 6) + (Delta / 2)) / Delta
    set del_B to (((TBIG - RGB_B) / 6) + (Delta / 2)) / Delta
    
    if RGB_R = TBIG then
        set My_HUE to round (360 * (del_B - del_G))
    else
        if (RGB_G = TBIG) then
            set My_HUE to round (360 * ((1 / 3) + del_R - del_B))
        else
            
            set My_HUE to round (360 * ((2 / 3) + del_G - del_R))
        end if
    end if
    if (My_HUE < 0) then
        
        set My_HUE to My_HUE + 360
    end if
    if (My_HUE > 360) then
        set MYHUE to My_HUE + 1
    end if
end if


set RGB_R to round (255 * RGB_R)
set RGB_G to round (255 * RGB_G)
set RGB_B to round (255 * RGB_B)
display dialog "Teinte : " & My_HUE & "Saturation : " &  My_sat & "       R " & RGB_R & "  G " & RGB_G & "  B  " & RGB_B
Ces lignes ci me gênent mais je n'ai pas trouvé le moyen de sélectionner la valeur la plus petite et la plus grande dans une série. si quelqu'un à une idée
Bloc de code:
if (RGB_G > RGB_R) then
    set TBIG to RGB_G
    set Tsmall to RGB_R
else
    set TBIG to RGB_R
    set Tsmall to RGB_G
end if
if (RGB_B > TBIG) then
    set TBIG to RGB_B
end if
if (Tsmall > RGB_B) then
    set Tsmall to RGB_B
end if


---------- Nouveau message ajouté à 15h42 ---------- Le message précédent a été envoyé à 15h29 ----------

juste derrière le code de conversion RVB => TSL (à la place du display dialog), j'ai mis ce code ci :
Bloc de code:
set MY_HUE to (360 * MY_HUE)
if MY_HUE < 15.01 then
    set MY_FADE to (MY_HUE / 15)
    set RGB_A to (RGB_R * MY_FADE)
    set RGB_G to 0
else
    if MY_HUE < 30.01 then
        set MY_FADE to ((MY_HUE - 15) / 15)
        set RGB_A to RGB_R
        set RGB_R to (RGB_R * (1 - MY_FADE))
        set RGB_G to 0
    else
        if MY_HUE < 75.01 then
            set MY_FADE to ((MY_HUE - 30) / 45)
            set RGB_A to RGB_R
            set RGB_R to 0
            set RGB_G to (RGB_G * MY_FADE)
            
        else
            if MY_HUE < 120.01 then
                set MY_FADE to ((MY_HUE - 75) / 45)
                set RGB_A to (RGB_R * (1 - MY_FADE))
                set RGB_R to 0
                
            else
                set RGB_A to 0
            end if
        end if
    end if
end if

set RGBA_COLOR to {RGB_R, RGB_G, RGB_B, RGB_A}
Cela fonctionne ... c'est un peu approximatif mais l'approximation semble acceptable.

Si par hasard vous trouvez moyen d’améliorer mon code ou de corriger ses approximations, n’hésitez pas...
Dans l'absolu je crois pouvoir me contenter du résultat actuel.
 
Dernière édition:
J'avance dans mon script,
Bonsoir

Ton code testé chez moi avec Léopard et iMac core 2 Duo 2,16 GHz, il est assez lent (plus de 2 secondes).
1419 caractères, 258 mots et 50 lignes.

Revue par moi, en moyenne moins de 15 millièmes de secondes.
Présentation des résultats modifiés.
1501 caractères, 279 mots et 30 lignes de code.

A contrôler si le résultat te convient.
Bloc de code:
set {CR, trait} to {return, "&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;"}

set RGB_Color to choose color default color {65535, 65535, 65535}

set RGB_R to ((item 1 of RGB_Color) / 65535)
set RGB_G to ((item 2 of RGB_Color) / 65535)
set RGB_B to ((item 3 of RGB_Color) / 65535)

set {TBIG, Tsmall} to {RGB_R, RGB_G}
if (RGB_G > RGB_R) then set {TBIG, Tsmall} to {RGB_G, RGB_R}

if (RGB_B > TBIG) then set TBIG to RGB_B
if (Tsmall > RGB_B) then set Tsmall to RGB_B
set Delta to TBIG - Tsmall

if Delta = 0 then
	set {My_HUE, My_sat} to {0, 0}
else
	set My_sat to round (100 * (Delta / (2 - TBIG - Tsmall)))
	if (Tsmall + TBIG) < 1 then set My_sat to round (100 * (Delta / (TBIG + Tsmall)))

	set del_R to (((TBIG - RGB_R) / 6) + (Delta / 2)) / Delta
	set del_G to (((TBIG - RGB_G) / 6) + (Delta / 2)) / Delta
	set del_B to (((TBIG - RGB_B) / 6) + (Delta / 2)) / Delta

	if RGB_R = TBIG then
		set My_HUE to round (360 * (del_B - del_G))
	else
		set My_HUE to round (360 * ((2 / 3) + del_G - del_R))
		if (RGB_G = TBIG) then set My_HUE to round (360 * ((1 / 3) + del_R - del_B))
	end if

	if (My_HUE < 0) then set My_HUE to My_HUE + 360
	if (My_HUE > 360) then set MYHUE to My_HUE + 1
end if

set {RGB_R, RGB_G, RGB_B} to {round (255 * RGB_R), round (255 * RGB_G), round (255 * RGB_B)}

display dialog "Teinte : " & tab & tab & My_HUE & CR & trait & CR & "Saturation : " & tab & My_sat & CR & trait & CR & "Rouge:  " & tab & tab & RGB_R & return & "Vert: " & tab & tab & RGB_G & return & "Bleu:   " & tab & tab & RGB_B & CR & trait


PS: j'ai pas pris en compte ton dernier code (fonctionne pas chez moi).

Cordialement

@+
 
Dernière édition:
Hello, un grand merci pour les modification la différence est perceptible. :zen:
Le dernier code ajouté au tien donne ceci (l'ajout est entre les lignes de ****, simple ajout de l'ambre sur les lignes de fin )
Bloc de code:
set {CR, trait} to {return, "&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;"}

set RGB_Color to choose color default color {65535, 65535, 65535}

set RGB_R to ((item 1 of RGB_Color) / 65535)
set RGB_G to ((item 2 of RGB_Color) / 65535)
set RGB_B to ((item 3 of RGB_Color) / 65535)

set {TBIG, Tsmall} to {RGB_R, RGB_G}
if (RGB_G > RGB_R) then set {TBIG, Tsmall} to {RGB_G, RGB_R}

if (RGB_B > TBIG) then set TBIG to RGB_B
if (Tsmall > RGB_B) then set Tsmall to RGB_B
set Delta to TBIG - Tsmall

if Delta = 0 then
    set {My_HUE, My_sat} to {1, 0}
else
    set My_sat to round (100 * (Delta / (2 - TBIG - Tsmall)))
    if (Tsmall + TBIG) < 1 then set My_sat to round (100 * (Delta / (TBIG + Tsmall)))
    
    set del_R to (((TBIG - RGB_R) / 6) + (Delta / 2)) / Delta
    set del_G to (((TBIG - RGB_G) / 6) + (Delta / 2)) / Delta
    set del_B to (((TBIG - RGB_B) / 6) + (Delta / 2)) / Delta
    
    if RGB_R = TBIG then
        set My_HUE to round (360 * (del_B - del_G))
    else
        set My_HUE to round (360 * ((2 / 3) + del_G - del_R))
        if RGB_G = TBIG then set My_HUE to round (360 * ((1 / 3) + del_R - del_B))
    end if
    
    if (My_HUE < 0) then set My_HUE to My_HUE + 360
    if (My_HUE > 360) then set My_HUE to My_HUE + 1
end if
--*****************************************************************

if My_HUE < 15.01 then
    set MY_FADE to (My_HUE / 15)
    set RGB_A to (RGB_R * MY_FADE)
    set RGB_G to 0
else
    if My_HUE < 30.01 then
        set MY_FADE to ((My_HUE - 15) / 15)
        set RGB_A to RGB_R
        set RGB_R to (RGB_R * (1 - MY_FADE))
        set RGB_G to 0
    else
        if My_HUE < 75.01 then
            set MY_FADE to ((My_HUE - 30) / 45)
            set RGB_A to RGB_R
            set RGB_R to 0
            set RGB_G to (RGB_G * MY_FADE)
            
        else
            if My_HUE < 120.01 then
                set MY_FADE to ((My_HUE - 75) / 45)
                set RGB_A to (RGB_R * (1 - MY_FADE))
                set RGB_R to 0
                
            else
                set RGB_A to 0
            end if
        end if
    end if
end if
--***********************************************************
set {RGB_R, RGB_G, RGB_B, RGB_A} to {round (255 * RGB_R), round (255 * RGB_G), round (255 * RGB_B), round (255 * RGB_A)}
display dialog "Teinte : " & tab & tab & My_HUE & CR & trait & CR & "Saturation : " & tab & My_sat & CR & trait & CR & "Rouge:  " & tab & tab & RGB_R & return & "Vert: " & tab & tab & RGB_G & return & "Bleu:   " & tab & tab & RGB_B & CR & "Ambre:  " & tab & tab & RGB_A & return & trait
une ligne qui me semble erronée (déjà dans mon premier code) est la suivante
if (My_HUE > 360) then set My_HUE to My_HUE + 1

c'est que je ne crois pas avoir compris comment traduire la dernière ligne dans le code d'origine : if ( H > 1 ) H -= 1
A vrai dire je ne comprends pas son utilité :rose:
 
Dernière édition:
Hello, un grand merci pour les modification la différence est perceptible. :zen:
Bonsoir

Dans ton post 6 la ligne qui me créer un problème troisième code ligne 1.

Bloc de code:
 set MY_HUE to (360 * MY_HUE)

Dans ton dernier post (le 8) ce que je ne comprend pas ce sont ces nombres: 15.01, 30.01, 75.01, 120.01

Chez moi ce sont des integer et non des real.

Voir le code ci-dessous pour voir si ça te donne une idée pour avoir le résultat que tu recherche.

Il m'est pas possible de dire si le résultat de l'affichage est bon, j'y connait rien.

C'est juste pour voir si la petite empoule va s'allumer au dessus de ta tête et prononcer le mot magique d'Archimede Euréka.

Bloc de code:
set {CR, trait} to {return, "&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;"}

set RGB_Color to choose color default color {65535, 65535, 65535}

set RGB_R to ((item 1 of RGB_Color) / 65535)
set RGB_G to ((item 2 of RGB_Color) / 65535)
set RGB_B to ((item 3 of RGB_Color) / 65535)

set {TBIG, Tsmall} to {RGB_R, RGB_G}
if (RGB_G > RGB_R) then set {TBIG, Tsmall} to {RGB_G, RGB_R}

if (RGB_B > TBIG) then set TBIG to RGB_B
if (Tsmall > RGB_B) then set Tsmall to RGB_B
set Delta to TBIG - Tsmall

if Delta = 0 then
	set {My_HUE, My_sat} to {1, 0}
else
	set My_sat to round (100 * (Delta / (2 - TBIG - Tsmall)))
	if (Tsmall + TBIG) < 1 then set My_sat to round (100 * (Delta / (TBIG + Tsmall)))
	
	set del_R to (((TBIG - RGB_R) / 6) + (Delta / 2)) / Delta
	set del_G to (((TBIG - RGB_G) / 6) + (Delta / 2)) / Delta
	set del_B to (((TBIG - RGB_B) / 6) + (Delta / 2)) / Delta
	
	if RGB_R = TBIG then
		set My_HUE to round (360 * (del_B - del_G))
	else
		set My_HUE to round (360 * ((2 / 3) + del_G - del_R))
		if RGB_G = TBIG then set My_HUE to round (360 * ((1 / 3) + del_R - del_B))
	end if
	
	if (My_HUE < 0) then set My_HUE to My_HUE + 360
	if (My_HUE > 360) then set My_HUE to My_HUE + 1
end if
--*****************************************************************
if My_HUE > 120 then
	set RGB_A to 0
else if My_HUE > 75 and My_HUE &#8804; 120 then
	set RGB_A to (RGB_R * (1 - ((My_HUE - 75) / 45)))
	set RGB_R to 0
else if My_HUE > 30 and My_HUE &#8804; 75 then
	set RGB_A to RGB_R
	set RGB_R to 0
	set RGB_G to (RGB_G * ((My_HUE - 30) / 45))
else if My_HUE > 15 and My_HUE &#8804; 30 then
	set RGB_A to RGB_R
	set {RGB_R, RGB_G} to {(RGB_R * (1 - ((My_HUE - 15) / 15))), 0}
else if My_HUE &#8804; 15 then
	set {RGB_A, RGB_G} to {(RGB_R * (My_HUE / 15)), 0}
end if

--***********************************************************
set {RGB_R, RGB_G, RGB_B, RGB_A} to {round (255 * RGB_R), round (255 * RGB_G), round (255 * RGB_B), round (255 * RGB_A)}
display dialog "Teinte : " & tab & tab & My_HUE & CR & trait & CR & "Saturation : " & tab & My_sat & CR & trait & CR & "Rouge:  " & tab & tab & RGB_R & return & "Vert: " & tab & tab & RGB_G & CR & "Bleu:   " & tab & tab & RGB_B & CR & trait & CR & "Ambre:  " & tab & tab & RGB_A & CR & trait

Cordialement

@+
 
...
Voir le code ci-dessous pour voir si ça te donne une idée pour avoir le résultat que tu recherche.

Il m'est pas possible de dire si le résultat de l'affichage est bon, j'y connait rien.

C'est juste pour voir si la petite empoule va s'allumer ...
Hello,
Encore merci :zen:, tu épures mon travail sans rien lui enlever de ses fonctions. :up: :zen: ;)
Mon dernier code et le tien donnent des résultats identiques en dehors du fait que le tien est plus léger/rapide.

Le résultat de l'affichage est une approximation tout a fait acceptable compte tenu que je remplace le vert par de l'ambre si ma teinte est en dessous de 30 sur la roue chromatique; le rouge et le vert par de l'ambre à 30; le rouge par de l'ambre de 30 à 120 sur cette même roue. J'adapte bien sur la valeur de l'ambre en fonction de la valeur rouge et verte que je remplace. L'approximation vient du fait que je déplace légèrement ma couleur sur cette roue. je devrais en réalité intervenir sur mes 3 couleurs de base pour pouvoir ajouter ma 4me couleur de base mais la les calculs dépassent de loin mes connaissances en colorimétrie.

Et puis surtout cette approximation est tout a fait acceptable quand on sait qu'il n'est pas tenu compte des différence de puissance lumineuse des leds en fonction de leur couleur et quand on voit l'interface utilisée pour choisir les couleurs (le sélecteur couleur apple n'est pas super précis... essaye de reproduire 2 fois la même couleur à partir de la roue ou, pire, enregistre une couleur a partir des curseurs TSL et rappelle cette couleur :mouais: :eek: :mouais:).


Mon code se complète et est fonctionnel avec le soft que j'utilise.
Les lignes de codes de ton dernier message sont entre les deux lignes----------

Les lignes en bleu sont mises en commentaire de manière a ce que tu aie un script fonctionnel, sont les commandes pour le soft de gestion DMX.

Les lignes de ton codes reportées à la fin et en rouge seront supprimées. Elles ne servent que pour les tests.

Le display dialog ne donne que le _command1 de la 4ième boucle couleur (correspondant à l'ambre). Les 3 premiers passages donnent la même définition pour le rouge, le vert et le Bleu.

Bloc de code:
property channels : {"1", "17", "33", "49", "97", "113", "129", "145"} --cannaux dmx utilisés

set PAR_Choose to (choose from list {"1", "2", "3", "4", "5", "6", "7", "8"} with prompt "Selectionnez PAR(s) à modifier" & return & "Choix multiple autorisé" with multiple selections allowed) as list
------------------------------------------------------------------------------------------------
set RGB_Color to choose color default color {65535, 65535, 65535}

set RGB_R to ((item 1 of RGB_Color) / 65535)
set RGB_G to ((item 2 of RGB_Color) / 65535)
set RGB_B to ((item 3 of RGB_Color) / 65535)

set {TBIG, Tsmall} to {RGB_R, RGB_G}
if (RGB_G > RGB_R) then set {TBIG, Tsmall} to {RGB_G, RGB_R}

if (RGB_B > TBIG) then set TBIG to RGB_B
if (Tsmall > RGB_B) then set Tsmall to RGB_B
set Delta to TBIG - Tsmall

if Delta = 0 then
    set {My_HUE, My_sat} to {1, 0}
else
    set My_sat to round (100 * (Delta / (2 - TBIG - Tsmall)))
    if (Tsmall + TBIG) < 1 then set My_sat to round (100 * (Delta / (TBIG + Tsmall)))
    
    set del_R to (((TBIG - RGB_R) / 6) + (Delta / 2)) / Delta
    set del_G to (((TBIG - RGB_G) / 6) + (Delta / 2)) / Delta
    set del_B to (((TBIG - RGB_B) / 6) + (Delta / 2)) / Delta
    
    if RGB_R = TBIG then
        set My_HUE to round (360 * (del_B - del_G))
    else
        set My_HUE to round (360 * ((2 / 3) + del_G - del_R))
        if RGB_G = TBIG then set My_HUE to round (360 * ((1 / 3) + del_R - del_B))
    end if
    
    if (My_HUE < 0) then set My_HUE to My_HUE + 360
    if (My_HUE > 360) then set My_HUE to My_HUE + 1
end if

if My_HUE > 120 then
    set RGB_A to 0
else if My_HUE > 75 and My_HUE &#8804; 120 then
    set RGB_A to (RGB_R * (1 - ((My_HUE - 75) / 45)))
    set RGB_R to 0
else if My_HUE > 30 and My_HUE &#8804; 75 then
    set RGB_A to RGB_R
    set RGB_R to 0
    set RGB_G to (RGB_G * ((My_HUE - 30) / 45))
else if My_HUE > 15 and My_HUE &#8804; 30 then
    set RGB_A to RGB_R
    set {RGB_R, RGB_G} to {(RGB_R * (1 - ((My_HUE - 15) / 15))), 0}
else if My_HUE &#8804; 15 then
    set {RGB_A, RGB_G} to {(RGB_R * (My_HUE / 15)), 0}
end if

---------------------------------------------------------------------
set RGBA_COLOR to {RGB_R, RGB_G, RGB_B, RGB_A}

[COLOR=Blue]--tell application "LXConsole"[/COLOR]

repeat with c from 1 to 4 ---------------------------------------------Boucle couleurs
    set cs to (item c of RGBA_COLOR)
    if cs < 0 then
        set cs to 0
    else
        set cs to round (cs * 100)
    end if
    set PARcommand to ""
    set PARcommand2 to ""
    set my_count to (count of PAR_Choose)
    
    repeat with d from 1 to my_count ---------------------------------Boucle canneaux DMX
        set PAR_number to item d of PAR_Choose
        set my_PAR to item PAR_number of channels
        set my_PAR2 to my_PAR + 1 + c
        if d < (count of PAR_Choose) then
            if c = 4 then set [COLOR=Black]PARcommand[/COLOR] to PARcommand & my_PAR & "&"
            set PARcommand2 to PARcommand2 & my_PAR2 & "&"
        else
            if c = 4 then set [COLOR=Black]PARcommand[/COLOR] to PARcommand & my_PAR
            set PARcommand2 to PARcommand2 & my_PAR2
        end if
    end repeat ------------------------------------------------------Boucle canneaux DMX
    
    set [COLOR=Magenta]_command1[/COLOR] to (PARcommand2 as text) & "@" & (cs as text)
    [COLOR=Blue]--tell the front document to doCommand string _command[/COLOR]
end repeat ----------------------------------------------------------Boucle couleurs
set _command to (PARcommand as text) & "@100"
[COLOR=Blue]--tell the front document to doCommand string _command

--end tell[/COLOR]


[COLOR=Red]set {CR, trait} to {return, "&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;"}
set {RGB_R, RGB_G, RGB_B} to {round (100 * RGB_R), round (100 * RGB_G), round (100 * RGB_B)}
display dialog "Teinte : " & tab & tab & My_HUE & CR & trait & CR & "Saturation : " & tab & My_sat & CR & trait & CR & "Rouge:  " & tab & tab & RGB_R & return & "Vert: " & tab & tab & RGB_G & return & "Bleu:   " & tab & tab & RGB_B & CR & "Ambre:  " & tab & tab & _command1 & CR & trait & CR & "PARS: " & tab & tab & _command & return & trait[/COLOR]
Encore merci, en voyant ton code et le mien je commence à voir comment m'améliorer dans ce domaine.
 
Dernière édition:
Petite mise a jour pour tenir compte de mes observations sur ton code
Bloc de code:
property channels : {"1", "17", "33", "49", "97", "113", "129", "145"} --cannaux dmx utilisés

set PAR_Choose to (choose from list {"1", "2", "3", "4", "5", "6", "7", "8"} with prompt "Selectionnez PAR(s) à modifier" & return & "Choix multiple autorisé" with multiple selections allowed) as list
------------------------------------------------------------------------------------------------
set RGB_Color to choose color default color {65535, 65535, 65535}

set RGB_R to ((item 1 of RGB_Color) / 65535)
set RGB_G to ((item 2 of RGB_Color) / 65535)
set RGB_B to ((item 3 of RGB_Color) / 65535)

set {TBIG, Tsmall} to {RGB_R, RGB_G}
if (RGB_G > RGB_R) then set {TBIG, Tsmall} to {RGB_G, RGB_R}

if (RGB_B > TBIG) then set TBIG to RGB_B
if (Tsmall > RGB_B) then set Tsmall to RGB_B
set Delta to TBIG - Tsmall

if Delta = 0 then
    set {My_HUE, My_sat} to {1, 0}
else
    set My_sat to round (100 * (Delta / (2 - TBIG - Tsmall)))
    if (Tsmall + TBIG) < 1 then set My_sat to round (100 * (Delta / (TBIG + Tsmall)))
    
    set del_R to (((TBIG - RGB_R) / 6) + (Delta / 2)) / Delta
    set del_G to (((TBIG - RGB_G) / 6) + (Delta / 2)) / Delta
    set del_B to (((TBIG - RGB_B) / 6) + (Delta / 2)) / Delta
    
    if RGB_R = TBIG then
        set My_HUE to round (360 * (del_B - del_G))
    else
        set My_HUE to round (360 * ((2 / 3) + del_G - del_R))
        if RGB_G = TBIG then set My_HUE to round (360 * ((1 / 3) + del_R - del_B))
    end if
    
    if (My_HUE < 0) then set My_HUE to My_HUE + 360
    if (My_HUE > 360) then set My_HUE to My_HUE + 1
end if

if My_HUE > 120 then
    set RGB_A to 0
else if My_HUE > 75 and My_HUE &#8804; 120 then
    set RGB_A to (RGB_R * (1 - ((My_HUE - 75) / 45)))
    set RGB_R to 0
else if My_HUE > 30 and My_HUE &#8804; 75 then
    set RGB_A to RGB_R
    set RGB_R to 0
    set RGB_G to (RGB_G * ((My_HUE - 30) / 45))
else if My_HUE > 15 and My_HUE &#8804; 30 then
    set RGB_A to RGB_R
    set {RGB_R, RGB_G} to {(RGB_R * (1 - ((My_HUE - 15) / 15))), 0}
else if My_HUE &#8804; 15 then
    set {RGB_A, RGB_G} to {(RGB_R * (My_HUE / 15)), 0}
end if

---------------------------------------------------------------------
set RGBA_COLOR to {RGB_R, RGB_G, RGB_B, RGB_A}

[COLOR=Blue]--tell application "LXConsole"[/COLOR]

repeat with c from 1 to 4 ---------------------------------------------Boucle couleurs
    set cs to round ((item c of RGBA_COLOR)*100)
    if cs < 0 then set cs to 0
    set {PARcommand, PARcommand2} to {"", ""}
    set my_count to (count of PAR_Choose)
    
    repeat with d from 1 to my_count ---------------------------------Boucle canneaux DMX
        set PAR_number to item d of PAR_Choose
        set my_PAR to item PAR_number of channels
        set my_PAR2 to my_PAR + 1 + c
        if d < (count of PAR_Choose) then
            if c = 4 then set [COLOR=Black]PARcommand[/COLOR] to PARcommand & my_PAR & "&"
            set PARcommand2 to PARcommand2 & my_PAR2 & "&"
        else
            if c = 4 then set [COLOR=Black]PARcommand[/COLOR] to PARcommand & my_PAR
            set PARcommand2 to PARcommand2 & my_PAR2
        end if
    end repeat ------------------------------------------------------Boucle canneaux DMX
    
    set [COLOR=Magenta]_command1[/COLOR] to (PARcommand2 as text) & "@" & (cs as text)
    [COLOR=Blue]--tell the front document to doCommand string _command[/COLOR]
end repeat ----------------------------------------------------------Boucle couleurs
set _command to (PARcommand as text) & "@100"
[COLOR=Blue]--tell the front document to doCommand string _command

--end tell[/COLOR]


[COLOR=Red]set {CR, trait} to {return, "&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;"}
set {RGB_R, RGB_G, RGB_B} to {round (100 * RGB_R), round (100 * RGB_G), round (100 * RGB_B)}
display dialog "Teinte : " & tab & tab & My_HUE & CR & trait & CR & "Saturation : " & tab & My_sat & CR & trait & CR & "Rouge:  " & tab & tab & RGB_R & return & "Vert: " & tab & tab & RGB_G & return & "Bleu:   " & tab & tab & RGB_B & CR & "Ambre:  " & tab & tab & _command1 & CR & trait & CR & "PARS: " & tab & tab & _command & return & trait[/COLOR]
 
Petite mise a jour pour tenir compte de mes observations sur ton code
Bonjour

Ajout d'une ligne de code pour faire fonctionner le bouton Annuler.

Et quelques modifications (qui sont pas obligatoires si ça fonctionne).

Pour éviter d'avoir deux fois le même code à un caractère prés, histoire de gagner quelques milli-secondes.
Les lignes avec &#63743;&#63743;&#63743; sont mes modifications.
Les lignes avec ••• sont celles que je n'utilise pas.

Bloc de code:
property channels : {"1", "17", "33", "49", "97", "113", "129", "145"} --cannaux dmx utilisés

set PAR_Choose to (choose from list {"1", "2", "3", "4", "5", "6", "7", "8"} with prompt "Selectionnez PAR(s) à modifier" & return & "Choix multiple autorisé" with multiple selections allowed) as list
if PAR_Choose contains false then return -- &#63743;&#63743;&#63743; Bouton Annuler

------------------------------------------------------------------------------------------------
set RGB_Color to choose color default color {65535, 65535, 65535}

set RGB_R to ((item 1 of RGB_Color) / 65535)
set RGB_G to ((item 2 of RGB_Color) / 65535)
set RGB_B to ((item 3 of RGB_Color) / 65535)

set {TBIG, Tsmall} to {RGB_R, RGB_G}
if (RGB_G > RGB_R) then set {TBIG, Tsmall} to {RGB_G, RGB_R}

if (RGB_B > TBIG) then set TBIG to RGB_B
if (Tsmall > RGB_B) then set Tsmall to RGB_B
set Delta to TBIG - Tsmall

if Delta = 0 then
	set {My_HUE, My_sat} to {1, 0}
else
	set My_sat to round (100 * (Delta / (2 - TBIG - Tsmall)))
	if (Tsmall + TBIG) < 1 then set My_sat to round (100 * (Delta / (TBIG + Tsmall)))
	
	set del_R to (((TBIG - RGB_R) / 6) + (Delta / 2)) / Delta
	set del_G to (((TBIG - RGB_G) / 6) + (Delta / 2)) / Delta
	set del_B to (((TBIG - RGB_B) / 6) + (Delta / 2)) / Delta
	
	if RGB_R = TBIG then
		set My_HUE to round (360 * (del_B - del_G))
	else
		set My_HUE to round (360 * ((2 / 3) + del_G - del_R))
		if RGB_G = TBIG then set My_HUE to round (360 * ((1 / 3) + del_R - del_B))
	end if
	
	if (My_HUE < 0) then set My_HUE to My_HUE + 360
	if (My_HUE > 360) then set My_HUE to My_HUE + 1
end if

if My_HUE > 120 then
	set RGB_A to 0
else if My_HUE > 75 and My_HUE &#8804; 120 then
	set RGB_A to (RGB_R * (1 - ((My_HUE - 75) / 45)))
	set RGB_R to 0
else if My_HUE > 30 and My_HUE &#8804; 75 then
	set RGB_A to RGB_R
	-- set RGB_R to 0 -- •••
	set {RGB_G, RGB_R} to {(RGB_G * ((My_HUE - 30) / 45)), 0} -- &#63743;&#63743;&#63743;
else if My_HUE > 15 and My_HUE &#8804; 30 then
	set RGB_A to RGB_R
	set {RGB_R, RGB_G} to {(RGB_R * (1 - ((My_HUE - 15) / 15))), 0}
else if My_HUE &#8804; 15 then
	set {RGB_A, RGB_G} to {(RGB_R * (My_HUE / 15)), 0}
end if

---------------------------------------------------------------------
set RGBA_COLOR to {RGB_R, RGB_G, RGB_B, RGB_A}

--tell application "LXConsole"

repeat with c from 1 to 4 ---------------------------------------------Boucle couleurs
	set cs to round ((item c of RGBA_COLOR) * 100)
	if cs < 0 then set cs to 0
	set {PARcommand, PARcommand2, my_count} to {"", "", (count of PAR_Choose)} -- &#63743;&#63743;&#63743;
	--	set my_count to (count of PAR_Choose) -- •••
	
	repeat with d from 1 to my_count ---------------------------------Boucle canneaux DMX
		set {PAR_number, et} to {item d of PAR_Choose, ""} -- &#63743;&#63743;&#63743; et vide
		set my_PAR to item PAR_number of channels
		set my_PAR2 to my_PAR + 1 + c
		if d < (count of PAR_Choose) then set et to "&" -- &#63743;&#63743;&#63743; et = &
		if c = 4 then set PARcommand to PARcommand & my_PAR & et -- &#63743;&#63743;&#63743;
		set PARcommand2 to PARcommand2 & my_PAR2 & et -- &#63743;&#63743;&#63743;
		--else -- ••• pourquoi 2 fois le même code à 1 caractère prés
		--	if c = 4 then set PARcommand to PARcommand & my_PAR -- •••
		--	set PARcommand2 to PARcommand2 & my_PAR2 -- •••
		--end if
	end repeat ------------------------------------------------------Boucle canneaux DMX
	
	set _command1 to (PARcommand2 as text) & "@" & (cs as text)
	--tell the front document to doCommand string _command
end repeat ----------------------------------------------------------Boucle couleurs
set _command to (PARcommand as text) & "@100"
--tell the front document to doCommand string _command

--end tell


set {CR, trait} to {return, "&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;&#9473;"}
set {RGB_R, RGB_G, RGB_B} to {round (100 * RGB_R), round (100 * RGB_G), round (100 * RGB_B)}
display dialog "Teinte : " & tab & tab & My_HUE & CR & trait & CR & "Saturation : " & tab & My_sat & CR & trait & CR & "Rouge:  " & tab & tab & RGB_R & return & "Vert: " & tab & tab & RGB_G & return & "Bleu:   " & tab & tab & RGB_B & CR & "Ambre:  " & tab & tab & _command1 & CR & trait & CR & "PARS: " & tab & tab & _command & return & trait

Bon réveillon

Cordialement

@+
 
Testé et adopté!

Merci :zen:

Bonjour

La seule aide que j'ai apporté à ton code c'est la gestion du bouton Annuler. ;)

Le reste c'est seulement ma façon de voir comment j'aurais écrit ce code. :)

Content que ton code fonctionne suivant tes souhaits. :up:

Bonne année 2012

Cordialement.

Jean louis