# [Applescript] conversion RGB en RGB + ambre



## two (24 Décembre 2011)

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

```
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 : 

```
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,


----------



## ceslinstinct (25 Décembre 2011)

two a dit:


> Bonjour,
> Quelqu'un aurait une idée pour convertir les couleurs RGB dans la gamme jaune-vert à orange-rouge en RGBA?
> 
> D'avance Merci,



Bonjour

http://pioupioum.fr/outils-astuces/textmate-convertir-couleur-hexadecimale-html-rgba.html

*Joyeux Noël*

@+


----------



## ntx (25 Décembre 2011)

ceslinstinct a dit:


> http://pioupioum.fr/outils-astuces/textmate-convertir-couleur-hexadecimale-html-rgba.html


Ici le "A" correspond au "alpha", la transparence ou opacité. Rien avoir avec le "ambre" de notre ami.


----------



## ceslinstinct (25 Décembre 2011)

ntx a dit:


> Ici le "A" correspond au "alpha", la transparence ou opacité. Rien avoir avec le "ambre" de notre ami.


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

@+


----------



## two (25 Décembre 2011)

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


----------



## two (28 Décembre 2011)

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

```
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
	
	



```
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 : 
	
	



```
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.


----------



## ceslinstinct (28 Décembre 2011)

two a dit:


> 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.

```
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

@+


----------



## two (29 Décembre 2011)

Hello, un grand merci pour les modification la différence est perceptible. 
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 ) 

```
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:


----------



## ceslinstinct (29 Décembre 2011)

two a dit:


> Hello, un grand merci pour les modification la différence est perceptible.


Bonsoir

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


```
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*.


```
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

@+


----------



## two (30 Décembre 2011)

ceslinstinct a dit:


> ...
> 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.
> ...


Hello, 
Encore merci , tu épures mon travail sans rien lui enlever de ses fonctions.   
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:  :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. 


```
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.


----------



## two (31 Décembre 2011)

Petite mise a jour pour tenir compte de mes observations sur ton 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]
```


----------



## ceslinstinct (31 Décembre 2011)

two a dit:


> 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.


```
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

@+


----------



## two (1 Janvier 2012)

Testé et adopté!

Merci


----------



## ceslinstinct (2 Janvier 2012)

two a dit:


> Testé et adopté!
> 
> Merci



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. 

*Bonne année 2012*

Cordialement.

Jean louis


----------



## two (5 Janvier 2012)

*Meilleurs vux pour 2012*

Cordialement.


----------

