Actualiser couleur de fond en fonction d'un contrôle "toupie"

sTERZOCK

XLDnaute Nouveau
Bonjour,
Dans l'exemple ci joint je désirerai que la zone colorée soit automatiquement mise à jour dès que l'on appuie sur les flèches + ou - des contrôles "toupies".
Bien qu'ayant tenté sans succès d'utiliser en VBA "Calculate" ou "Refresh" de la feuille ou "RefreshAll" du classeur, la mise à jour de la couleur témoin ne se fait qu'en sortant du contrôle par sélection d'une cellule...
J'ai essayé en créant une macro associée au contrôle ou en utilisant le code de la feuille 1 (clic droit sur l'onglet dela feuille et "Visualiser le code").

Quelqu'un saurait-il?
Merci
 

Pièces jointes

  • TestVariationCouleur.xlsm
    16.4 KB · Affichages: 62
  • TestVariationCouleur.xlsm
    16.4 KB · Affichages: 75
  • TestVariationCouleur.xlsm
    16.4 KB · Affichages: 75

Dranreb

XLDnaute Barbatruc
Re : Actualiser couleur de fond en fonction d'un contrôle "toupie"

Un essai avec un Userform.
 

Pièces jointes

  • DégradésEvsG.xls
    114 KB · Affichages: 40
  • DégradésEvsG.xls
    114 KB · Affichages: 48
  • DégradésEvsG.xls
    114 KB · Affichages: 58

sTERZOCK

XLDnaute Nouveau
Re : Actualiser couleur de fond en fonction d'un contrôle "toupie"

Je vois que ma petite demande d'explication sur l'utilisation des contrôles "toupies" dérive de façon exponentielle vers les hautes sphères (même trop haute pour moi :p) de la colorimétrie informatique.

Mon but premier était de réaliser un petit labo excel simple et pratique pour tester (par visualisation colorée) mes algorithmes avant de me lancer dans des lignes et des lignes de code pour les transcrire en Java.
Je résume
Problème finall :
Soit une teinte cible C et 4 teintes virtuelles x1, x2, x3, x4 dont le blanc x3= (255, 255, 255) et le noir x4= (0, 0, 0) et deux autres( x1 et x2) colorées à choisir dans une banque.
Question
Quel est le ratio entre ces 4 teintes pour que leur mélange M soit au plus près (par forcement exact) de C ?
C'est un problème de minimisation :
Min z =(Cr-Mr)²+(Cg-Mg)²+(Cb-Mb)² qui est de la forme quadratique convexe et qui représente les écarts RGB dans l'espace euclidien.
sous contraintes :
x1, x2, x3, x4 >0 --> contrainte de positivité des variables
x1 + x2 + x3 + x4 = 1 --> sinon le noir x4 (0, 0, 0) n'est pas pris "en compte"
Je cherche donc et teste des algorithmes avant de les coder.
NB :Si on aborde le problème de façon linéaire Simplexe donne des solutions (sous réserve que le système est de Cramer) y compris avec des variables parfois négatives... Le solveur Excel (algorithme méthode GRG2) donne toujours les réponses exactes ou approchées.
Je m'occuperai de la continuité des dégradés et de la fidélité des teintes à l'écran dans un deuxième temps.
Tout ceci est loin des discussions habituelles de ce forum et n'intéresse pas pas forcement beaucoup de monde c'est pourquoi si quelques uns d'entre vous sont intéressés ou bien on ouvre un autre topic ou on en parle en privé.

Modeste :
J'utilise déjà les algos TSL pour sélectionner les teintes de la banque qui peuvent être candidates au mélange. Bien que ce ne soit pas si simple on en tire de bonnes propriétés pour comparaison. Merci pour ton rappel

Dranreb :
Où puis-je trouver des infos ou docs sur la théorie de la lumière que tu abordes? A-t-elle un nom? Ça m'intéresse. Merci
 

Dranreb

XLDnaute Barbatruc
Re : Actualiser couleur de fond en fonction d'un contrôle "toupie"

Bonjour.

Il y a à priori toujours une solution exacte.
Bien entendue elle comporte des nombre négatifs et n'a aucun sens si les deux couleurs de base à employer sont moins saturées que la couleur à recréer ou si elles ont des teintes à son opposé !
Il faudrait pouvoir enlever, des couleurs à employer, du blanc dans certains cas ! Ou bien retrancher à l'une une petite partie de l'autre pour pouvoir y arriver… Normal ! Faut arrêter d'espérer arriver à obtenir du vert pâle à partir de Lavante et bleu outremer ! À moins de retrancher, d'une bonne dose de blanc, un bon paquet de chaque ! (surtout le bleu lavande)
 

Pièces jointes

  • DégradésEvsG.xls
    120 KB · Affichages: 45
  • DégradésEvsG.xls
    120 KB · Affichages: 41
  • DégradésEvsG.xls
    120 KB · Affichages: 49
Dernière édition:

sTERZOCK

XLDnaute Nouveau
Re : Actualiser couleur de fond en fonction d'un contrôle "toupie"

Dranreb
J'apprécie tes explications et ton exemple, mais ils ne répondent pas exactement à mon attente.

Je ne cherche pas à reproduire exactement une teinte mais à m'en approcher au plus près (tant mieux si il y a une solution exacte) en mélangeant 4 teintes choisies dans une palette existante. Je veux simuler la synthèse soustractive, un peu comme le ferait un coloriste dans le domaine de la couleur industrielle qui aurait à sa disposition un palette pigmentaire pour reproduire une teinte. Il ne cherche pas le résultat absolu mais le meilleur compromis dont l'acceptabilité, dans mon cas, est donné par les valeurs Cie L*a*b*

A propos les commentaires techniques développés dans ton module CouleursCalculs sont-ils ton oeuvre ou bien une utilisation d'une technique établie? Si oui, comment trouver des infos la dessus?
 

Dranreb

XLDnaute Barbatruc
Re : Actualiser couleur de fond en fonction d'un contrôle "toupie"

Il y a des informations sur le net
Wikipédia: La CIE

J'ai eu beaucoup de mal à retrouver la page ou j'avais puisé les poids de sensibilités de l’œil aux différentes couleurs : Le lien

Et puis un beau jour j'ai été extrêmement choqué de découvrir que les valeurs RGB utilisées pour coder les couleurs sur un écran n'étaient absolument pas proportionnelles aux quantités de lumière dont elles provoquaient l'émission sur ses pixels, tellement il était évident, avant que la question ne se pose à moi, qu'elles devaient forcément l'être.
J'ai bien trouvé de la littérature qui parlait de gammas. Pour ce qui est de la formule, qui commence par une toute petite zone linéaire, ça allait, mais pour ce qui était des coefficient appliqués en pratique, c'était la confusion la plus totale.
J'ai fini par me livrer à des expériences à partir d'un fin damier pour établir la correspondance des valeurs RGB de codage fantaisistes avec la moitié, 1/4, 1/8 et 1/16 du blanc.

Bien qu'on trouve d'autre poids dans des formules différentes, ceux d'environ R:30%, V:59%, B:11% marche bien, jusqu'à présent, avec des quantité de lumières linéaires (ce que j'appelle, peut être maladroitement, Énergies dans mon module)
 
Dernière édition:

sTERZOCK

XLDnaute Nouveau
Re : Actualiser couleur de fond en fonction d'un contrôle "toupie"

Merci pour tes renseignements très intéressants
Je vais regarder tout ça à tête reposée pour voir s'ils peuvent m'être utiles. J'y vois déjà quelques différences comme par exemple l'illuminant D50 au lieu du D65 (norme dans la colorimétrie industrielle) qui peut interférer dans le calcul du Delta E CIE L*a*b et générer de la métamérie. Mais il y a certainement des choses à exploiter et/ou adapter.
Merci
Pour l'instant je suis toujours à la recherche et à la mise en place de l'algorithme pour résoudre mon problème de minimisation quadratique.
Si tu as des idées ou des pistes, je suis preneur.
 

Dranreb

XLDnaute Barbatruc
Re : Actualiser couleur de fond en fonction d'un contrôle "toupie"

Si les 3 couleurs sont assez opposées, comme des couleurs primaires, il devrait toujours n'y avoir qu'une solution avec mon même système d'équation, en y remplaçant la colonne de droite du blanc par la 3ième couleur.
Attention cependant. La couleur théoriquement la plus proche possible de celle souhaitée n'est pas forcément la meilleure solution.
On ne compte plus la longue cohorte de ceux qui on traduit le cyan d'écran par de l'encre cyan pure ! Beaucoup trop sombre ! Très mauvais rendu d'impression ! Comme je l'explique très loin dans mon module, pour un bon rendu il faut cylindrer les gamuts différents de façon à ce qu'ils présentent d'abord chacun la même luminosité sur l'ensemble de chaque disque de section du cylindre. Et ce n'est que la 1ère étape.
 

Modeste geedee

XLDnaute Barbatruc
Re : Actualiser couleur de fond en fonction d'un contrôle "toupie"

Bonsour®
-Problème finall :
Soit une teinte cible C et 4 teintes virtuelles x1, x2, x3, x4 dont le blanc x3= (255, 255, 255) et le noir x4= (0, 0, 0) et deux autres( x1 et x2) colorées à choisir dans une banque.
Question
Quel est le ratio entre ces 4 teintes pour que leur mélange M soit au plus près (par forcement exact) de C ?

:confused:
heu...
puisque tu parles de mélange, il s'agit donc de synthèse additive...
cela ressemble si je ne m'abuse à ce qui se passe entre ce que tu vois à l'écran(RGB) et ce que tu obtiens sur ton imprimante
à savoir conversion RGB vers CMYK
Quadrichromie Cyan Magenta Yellow K(Noir)
Blanc absence de couleur
le Noir(K) est qualifié de séparateur quadrichromique
3 couleurs de base suffisent

voir : EasyRGB - Color calculator
et algorithmes :
EasyRGB - Color/ Math Formulas
et suivants

RGB —> CMY
//RGB values from 0 to 255
//CMY results from 0 to 1
C = 1 - ( R / 255 )
M = 1 - ( G / 255 )
Y = 1 - ( B / 255 )

CMY —> CMYK
//CMYK and CMY values from 0 to 1
var_K = 1

if ( C < var_K ) var_K = C
if ( M < var_K ) var_K = M
if ( Y < var_K ) var_K = Y
if ( var_K == 1 ) { //Black
C = 0
M = 0
Y = 0
}
else {
C = ( C - var_K ) / ( 1 - var_K )
M = ( M - var_K ) / ( 1 - var_K )
Y = ( Y - var_K ) / ( 1 - var_K )
}
K = var_K
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Actualiser couleur de fond en fonction d'un contrôle "toupie"

Bonjour.

J'ai un peu repris la lecture des différents postes et j'ai une curieuse impression :
Vous parlez de chercher un mélange approché d'une couleur désirée. Ça ce serait le mieux qu'on pourrait faire si on n'avait pas assez de couleurs pour l'obtenir exactement. Or vous n'arrêtez pas d'en ajouter à chaque postes d'abord c'était 2 puis 3, maintenant 4.
Vous avez l'air de croire qu'il faut chercher une solution qui minimise une somme de carrés d'écarts. Or on n'est pas dans un cas où, par rapport au nombre d'inconnues, on a trop d'équation pour définir une solution les respectant simultanément toutes exactement, mais au contraire pas assez, il me semble !…
Vous rajoutez de plus en plus de couleurs mais vous ne définissez toujours encore chacune d'elle que par 3 caractéristiques, donc 3 lignes dans la matrice.
 

sTERZOCK

XLDnaute Nouveau
Re : Actualiser couleur de fond en fonction d'un contrôle "toupie"

Salut Modeste
Non, il s'agit bien d'une (pseudo) synthèse soustractive comme le montre le fichier ci joint.
Avec les valeurs que j'y ai portées, le mélange additif du rouge et du vert devrait donner un jaune en synthèse additive, or on obtient un gris rouge-verdâtre très sale (désaturé) comme avec les mélanges soustractifs d'aquarelles ou de peintures à l'huile. Amuse toi à changer les valeurs RGB ou celles des ratio pour t'en convaincre.
Je dis pseudo car, on ne manipule pas directement les pixels (sources lumineuses donc synthèse additive) mais on manipule "arithmétiquement" leurs valeurs avant de les renvoyer à la carte graphique pour exécution. On effectue, avec la formule de l'exemple, une "moyenne" de chacune des composantes RGB. La teinte plus foncée du mélange sera éclaircie car "tirée" vers 255, et la teinte plus claire sera assombrie car "tirée" vers 0..
Tu peux vérifier tout cela par calcul du L dans le système HSL (TSL) des produits de départ et d'arrivée
 

Pièces jointes

  • Synthèse pseudo soustractive.xlsm
    16.2 KB · Affichages: 37

sTERZOCK

XLDnaute Nouveau
Re : Actualiser couleur de fond en fonction d'un contrôle "toupie"

Bonjour Dranreb
C'est exact j'ai commencé par le plus simple pour exposer mon problème, pour ne pas noyer ou affoler le lecteur, avec un exemple de 2 teintes. Ma demande concernait même uniquement la manipulation du contrôle "toupie". A mon étonnement, mais aussi à ma grande satisfaction, c'est toi même qui à orienté et poursuivi le débat sur l'aspect colorimétrique du topic. De fil en aiguille et pour plus amples explications le sujet s'est étoffé.
Je résume et recentre mon sujet :
Domaine : colorimétrie industrielle donc synthèse soustractive
But : contretyper une teinte existante à partir d'une palette de couleurs, non modifiable, en nombre limité. A noter le point important que la teinte à imiter n'a pas forcement été créée à partir de cette palette de couleurs ce qui a pour conséquence qu'on pourrait avoir une réponse approchée
Outils : utilisation des normes CIE en la matière : espace chromatique CIE L*a*b*. De là est issu la règle de formulation couleur dans le domaine industriel.
- 2 pigments chromatiques pour pouvoir se déplacer sur le cercle plan chromatique pour ajuster la couleur
- utilisation du blanc et du noir pour de déplacer sur l'axe L de la luminance
soit 4 couleurs au total. Théoriquement cela suffit. A noter qu'un minimum de blanc et de noir est obligatoire dans l'industrie (on salit volontairement un peu la teinte) pour assurer la constance de la production d'une couleur d'un lot à l'autre. Une teinte industrielle est aussisoumise à des variations de production (pureté et force colorante des pigments, par exemple) et d'utilisation (grisaillement de la teinte dans les systèmes d'application -circulating de distribution etc...). Pour anticiper tous ces facteurs le blanc et le noir sont indispensables
Méthode : (Là je reviens dans notre monde virtuel) Le coloriste industriel sélectionne dans sa palette les teintes qui lui semblent les plus appropriées pour réaliser le contretypage. Il sélectionne 4 teintes de sa palette dont le blanc et le noir. Il doit s'approcher au plus rès (ou exactement) de la teinte cible).
Calculs : L'espace CIEL*a*b est assimilable à un espace euclidien et la minimisation de la somme des carrés des différences me semble adéquate. Il s'agit bien d'un problème de minimisation à 4 variables (promis il n'y en aura pas plus lol ) sous contraintes de positivité avec un élément neutre (le noir)

Voilà, voilà
 

Dranreb

XLDnaute Barbatruc
Re : Actualiser couleur de fond en fonction d'un contrôle "toupie"

Le problème c'est qu'il y a soit une impossibilité absolue soit une infinité de façon différente d'obtenir le mélange exact !

Edit: En fait, non ce n'est pas ça. Le noir ne doit peut pas être calculé c'est tout. Vous êtes obligé de le coder 0, 0, 0, alors quel que soit sa proportion il n'interviendra pas. C'est ce qui restera pour que la somme des 4 fasse 100%.

Edit2: Ou alors vous le posez comme une 4ième équation: x= (1, 1, 1, 1) : y=1 ce qui revient au même.

Edit3: En tout cas je maintiens que si la teinte de la couleur à reproduire est située entre les teintes des deux couleurs sélectionnées et que sa saturation ne dépasse pas celle de l'une d'elles, alors il y a toujours une solution unique, exacte et applicable.
Lorsque vous mentionnez une valeur de rouge pour Couleur1, Couleur2 et Blanc, cela veut dire que la somme de leurs produits avec les coefficients à chercher doit être celle du rouge de la couleur à reproduire. Sommes nous bien d'accord ?
Peut être devriez vous poser quelque cas concrets simples avec leurs solutions escomptées. Évitez peut être de définir conventionnellement à 255 la valeur du blanc, prenez plutôt 1, 100 ou 1000, pour qu'il n'y ait pas de confusion avec les valeurs RGB d'écrans, qui ne sont pas additionnables sans que cela revienne presque plutôt à multiplier entre eux, à l'écran, les niveaux de luminosité correspondants. À moins bien sûr que ce ne soit une norme dans les milieux de la synthèse soustractive et qu'elle y corresponde à des quantités de lumière réfléchie variant de façon linéaire.
 
Dernière édition:

sTERZOCK

XLDnaute Nouveau
Re : Actualiser couleur de fond en fonction d'un contrôle "toupie"

Bonsoir Dranreb
Je suis d'accord sur ta proposition Edit 2. C'est une contrainte d'égalité comme signalée dans mon poste #17
C'est un problème de minimisation :
Min z =(Cr-Mr)²+(Cg-Mg)²+(Cb-Mb)² qui est de la forme quadratique convexe et qui représente les écarts RGB dans l'espace euclidien.
sous contraintes :
x1, x2, x3, x4 >0 --> contrainte de positivité des variables
x1 + x2 + x3 + x4 = 1 --> sinon le noir x4 (0, 0, 0) n'est pas pris "en compte".

Je te joins un fichier exemple de résolution du problème avec le solveur Excel que je voudrais pouvoir transcrire en Java, mais à ma connaissance le code n'est pas open...
Tu as raison, il peut y avoir plusieurs réponses au problème mais une sélection des teintes candidates au mélange (par analyse combinatoire et en prenant soin de ne pas choisir deux teintes complémentaires) et ne retenir que les 4 ou 5 meilleures réponses ne posent pas de problème
 

Pièces jointes

  • Solveur sous contraintes.xlsm
    18.5 KB · Affichages: 34

sTERZOCK

XLDnaute Nouveau
Re : Actualiser couleur de fond en fonction d'un contrôle "toupie"

Edit3: En tout cas je maintiens que si la teinte de la couleur à reproduire est située entre les teintes des deux couleurs sélectionnées et que sa saturation ne dépasse pas celle de l'une d'elles, alors il y a toujours une solution unique, exacte et applicable.
Intéressant, je vais vérifier
Lorsque vous mentionnez une valeur de rouge pour Couleur1, Couleur2 et Blanc, cela veut dire que la somme de leurs produits avec les coefficients à chercher doit être celle du rouge de la couleur à reproduire. Sommes nous bien d'accord ?
Oui
À moins bien sûr que ce ne soit une norme dans les milieux de la synthèse soustractive et qu'elle y corresponde à des quantités de lumière réfléchie variant de façon linéaire.
C'est le cas. Ce n'est pas une norme au sens strict, mais cela correspond assez bien au "rendu" de la synthèse soustractive
 

Dranreb

XLDnaute Barbatruc
Re : Actualiser couleur de fond en fonction d'un contrôle "toupie"

C'est bien ce que je disais: un système d'équation tout ce qu'il y a de banal.

Bien entendu pour l'illustration à l'écran il ne faut absolument pas utiliser ces valeurs RGB pour les Interior.Color, sinon le rendu affiché sera totalement faux ! Je vous crois sur parole quand vous me dites que votre 255 à vous est le maxi possible d'une mesure linéaire, ce que vous confirmez tacitement en considérant les calculs effectués ainsi permis, car justes. Alors pour une restitution correcte à l'écran il faut impérativement calculer la fausse valeur RGB correspondante, au moyen de la fonction GrisE de mon module CouleursCalculs:
GrisE(1000 * VotreVraieValeur / 255)
Ainsi 127,5 qui est donc chez vous la moitié du maxi donnera 186 qui correspond à une intensité lumineuse de pixel de la moitié de celle, maximale, correspondant à 255. (…sur la plupart des écrans, j'espère …)
 

Pièces jointes

  • SysEquSTERZOCK.xls
    44.5 KB · Affichages: 31
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 206
Messages
2 086 210
Membres
103 158
dernier inscrit
laufin