IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Traitement d'images Discussion :

Détermination d'une couleur contrastée


Sujet :

Traitement d'images

  1. #101
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Jipété Voir le message
    ... Comparez ces deux images, dans lesquelles le fond rose du rectangle correspond au mélange des 3 curseurs, notez le curseur vert qui ne varie que d'un point (126-->127) et le résultat sur le gris du texte ...
    Il est bien nécessaire d'avoir des curseurs d'adaptation pour les réglages fins, on dirait.
    Pas du tout . La spécificité d'une fonction discontinue est précisément d'introduire un changement brutal du résultat pour deux teintes très proches, et apparemment indiscernables - ici (255, 126, 255) et (255, 127, 255).

    Le seul point de discussion concerne l'opportunité du seuil choisi, qui ne se situe pas obligatoirement à 127; la preuve: le contraste obtenu est moins affirmé dans le premier cas (gris clair sur fond rose).

    Et d'ailleurs (question perverse ) quel seront les consignes à mettre en oeuvre dans de cas d'une couleur quelconque, par exemple: (200, 50, 140) ? En procédant de la sorte, tu t'engages dans une nasse dont tu ne peux t'échapper que par des bricolages - ils sont pratiques, les curseurs !
    Tu avais pourtant produit auparavant des tests convaincants (#19, #21, #24) ...

    La fonction discontinue évoquée plus haut concerne la variable unique par laquelle on caractérise la "clarté" de la couleur considérée: soit le niveau de gris, soit la luminance relative.
    La solution la plus simple (on ne ricane pas ) reste à cet égard l'expression approchée du niveau de gris:
    Gray = (0.2126×Redn + 0.7152×Greenn + 0.0722×Bluen)1/n avec n = 2.2
    proposée sur le site suggéré par anapurna (#42 - 27/01/2017, 18h57).


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

  2. #102
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Je pense savoir pourquoi ton expérience marche aussi mal. C'est parce que tu fais une grosse erreur.

    Tu travailles avec les couleurs TSV. Ok TSV = Teinte/Saturation/Valeur.
    La Teinte, c'est en gros vert par opposition à rouge/ bleu ... es 6 couleurs du cercle chromatique.
    La saturation, c'est en gros l'opposition entre gris d'une part, et ces couleurs d'autre part. Gris = saturation minimale , Rouge ou vert ou cyan ou ... = saturation maximale.
    Et la Valeur c'est un 3ème axe, qui va du sombre au clair.

    Pour trouver des couleurs complémentaires, on peut dire : je prends ma couleur d'origine, je prends sa teinte, et je prends une autre couleur avec une teinte très différente. Ca marchera souvent, maisça donnera des résultats très moyens quand on a des couleurs comme le blanc, le gris ou le noir.
    On peut aussi prendre lacouleur d'origine, et prendre une couleur avec une saturation très différente (en laissant les 2 autres paramètres inchangés) : A partir d'un rouge foncé, on va donc arriver à un gris foncé, à partir d'un rouge clair, on arrivera à un gris clair, et à partir d'un gris clair, on arrivera ... à une couleur claire de son choix.
    On peut aussi laisser la teinte inchangée et la saturation inchangée , et changer uniquement la valeur. Et si on applique la formule de Wiwaxia, ça va dire :
    - à partir d'un rouge très foncé, très proche du noir, on va choisir un rose.
    - à partir d'un rouge foncé, on va choisir un rose très clair, quasiment un blanc.
    - à partir d'un rouge 'normal', onva choisir au choix un noir ou un blanc.
    - à artir d'un rose moyen, on va choisir un rouge très foncé, quasiment noir
    - à partir d'un rose très clair, limite blanc, on va choisir un rouge foncé.

    On peut aussi combiner ces 3 fonctions. Tout ça marchera plus ou moins bien. Et en combinant ces 3 types de changement, ça marchera dans tous les cas de figure.

    Mais ce que tu fais est encore autre chose. Tu prends la teinte de la couleur d'origine. tu arrives à un nombre N1 entre 0 et 1. Avec la formule de Wiwaxia, tu calcules un nombre N2 ,très différent de N1. Ok.
    Et ce nombre N2, ce sera la VALEUR de la couleur d'arriver. En entrée de ton traitement, tu as une TEINTE, et en sortie , tu as une VALEUR.

    C'est un peu comme si tu avais des individus définis chacun par leur âge, leur poids, et leur salaire. Et pour choisir un individu I2 très différent de I1, tu te fixais comme règle :
    le poids de I1 est de 75kg , il suffit de prendre un individu dont l'âge sera loin de 75 ans.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #103
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Bonjour à tous,


    Citation Envoyé par wiwaxia Voir le message
    Le seul point de discussion concerne l'opportunité du seuil choisi, qui ne se situe pas obligatoirement à 127;
    D'où les curseurs.

    Citation Envoyé par wiwaxia Voir le message
    ils sont pratiques, les curseurs !
    Ben oui, on fait dans l'artistique (voir + loin) et pas dans le lancement de fusées Ariane !
    As-tu (avez-vous) remarqué que quand tu travailles sur un texte, si tu choisis une police en corps 16 pour un titre et que tu estimes que c'est trop petit, le ComboBox va te proposer 18 ensuite : 17 il ne connait pas !
    Hé bien dans la zone de texte du Combobox tu sélectionnes ton 16 et tu peux taper 17, ça fonctionne. Et si 17 est encore trop petit, tu peux essayer 17,2 ou d'autres valeurs, jusqu'à trouver ton bonheur. Tu vois le truc ? Ben là c'est pareil.

    Citation Envoyé par wiwaxia Voir le message
    La solution la plus simple (on ne ricane pas ) reste à cet égard l'expression approchée du niveau de gris:
    Est-ce que les gens me lisent bien ? J'ai dit que je ne voulais plus entendre parler du gris, sauf si c'est réclamé à haute voix par la personne en charge du graphisme et aux manettes des... curseurs !
    Et elle n'aura qu'à baisser la saturation de la couleur proposée par l'outil.


    Citation Envoyé par tbc92 Voir le message
    Je pense savoir pourquoi ton expérience marche aussi mal. C'est parce que tu fais une grosse erreur.
    --snip--
    Et pour choisir un individu I2 très différent de I1, tu te fixais comme règle :
    le poids de I1 est de 75kg , il suffit de prendre un individu dont l'âge sera loin de 75 ans.
    Je ne sais pas où tu as vu ça ! Dans le code il y a des choses genre if H (ou T pour TSV) < 180 then H := H + 180 else H := H - 180; pour avoir la couleur opposée et c'est tout !

    Et il y a des raison très simples :
    • pour la luminosité/luminance,
      La différence perçue entre deux objets de luminances relatives 10 % et 15 % est bien plus grande qu'entre deux objets de luminances relatives 80 % et 85 %.
      Quand on multiplie par deux la luminance d'un rayonnement, la vision amortit cette variation en ne percevant qu'une augmentation d'environ un quart
      Deux lignes extraites de la page 45 de La gestion des couleurs par Jean Delmas, avec un croquis très explicite.
      Cette valeur est donc impossible à automatiser à moins d'aller se prendre la tête (se la taper contre les murs, oui !) pour corriger les arrondis d'une courbe non linéaire...
    • pour la saturation, en imaginant une couleur source très saturée, l'inversion aurait généré une couleur quasiment pas saturée, donc toute grise et donc aucun intérêt artistique, puisqu'on veut de la couleur.


    Encore une fois (j'espère la dernière), cet outil n'est pas destiné à sortir des résultats définitifs pour les 16 millions de couleurs possibles, mais juste une direction que les gens avec un regard très artistique adapteront à leurs desiderata.


    Exemple (avec en plus une jolie coïncidence) : il y a quelques mois de ça j'ai aidé une amie à travailler sur un prospectus qui devait être orné d'une photo en haut de sa page A4, photo qui ressemblait à ça :
    Nom : ciel_bleu.png
Affichages : 215
Taille : 36,0 Ko
    et sur laquelle elle voulait mettre un texte.

    Bon, on a pas mal miséré avec The Gimp à grands coups d'essais/corrections jusqu'à arriver à quelque chose qui la satisfasse.
    Et tout-à-l'heure j'ai repris son image, j'ai mis mon ColorPicker sur son ciel bleu et que croyez-vous que l'outil proposât ? Presque le même RGB (255 98 0) que la copine avait choisi (255 128 0) il y a quelques mois !
    Nom : couleurs_cielbleu.png
Affichages : 239
Taille : 13,6 Ko Nom : 255098000.png
Affichages : 239
Taille : 10,1 Ko

    Ce qui valide mon système, et hop !
    Bien obligé de reconnaître que c'est quand même bien plus cool de pouvoir tester et voir en direct (grâce aux curseurs, hé hé hé) les changements sur les couleurs, plutôt que les essais/modifs/et_recommence qu'on subit avec les boîtes de dialogues des logiciels.


    Mais ce système a failli partir "en prod'" avec un joli bug (le dernier, I hope !) découvert par hasard, mais le hasard est notre ami à tous, c'est bien connu, tout ça pour dire que lorsque j'ai fait le test avec l'image de la copine, je n'avais pas le même résultat de couleur opposée selon que je regardais le panneau HSL ou le panneau TSV !
    Oui, il y avait encore un souci avec la conversion TSVtoColor, malgré la correction d'hier (recorrigé il y a 15 minutes)...

    Heureusement, j'ai découvert entre-temps la solution magique, je veux parler du paquet mbColorLib dont je bénis l'auteur et lui baise les pieds, si si !, car grâce à ses routines j'ai enfin réussi à faire fonctionner mes premiers essais à base de CIE L*a*b* (un enfer !), puis, de fil en aiguille, j'ai corrigé cette TSV2Color, ouf !

    Les infos sont ici et le téléchargement là, c'est écrit en Pascal orienté Lazarus mais ça devrait pouvoir s'adapter sans problèmes.
    Grand merci à toi, man !

    C'est tout pour aujourd'hui,
    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

  4. #104
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    si tu décaler simplement la luminance 1/3 cela ne suffirais t'il pas ?

    genre une fonction permettant de définir la valeur de la luminance "Opposé (en faites le terme est impropre)"
    en entrant en paramètre la luminance actuel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CONST 
      LUMAX = 100;
    ...
    PAS := LUMAX DIV 3 ; // 33 defini le decalage
    V := PAS+LUACTU;// LUACTU valeur de la luminance actuel 
    VT := V MOD LUMAX ;//determine le reste au dessus de 100(LUMAX)
    OT := LUMAX - VT;// 
    RG := (OT DIV LUMAX)*LUMAX; // Permet de savoir si on est au dessus de (LUMAX)
    LO = MOD((LUMAX-(RG+OT)) MOD LUMAX);// Valeur de luminance Opposé
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  5. #105
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Détermination d'une couleur contrastée
    L'équation décrite dans le précédent message
    Gray = (0.2126×Redn + 0.7152×Greenn + 0.0722×Bluen)1/n avec n = 2.2
    présente, en plus de la simplicité numérique, un second intérêt: celui de conduire rapidement à l'ébauche d'un algorithme pour le tracé des courbes isophotes, c.-à-d. d'égale luminosité, ce qui implique le calcul d'un indice de couleur en fonction des deux autres, ainsi que de la luminance relative de l'ensemble - ou, ce qui revient au même, de son niveau de gris.

    Les surfaces isophotes, d'équation L(r, v, b) = L1 (Cte) ou g = G(r, v, b) = g1 (autre Cte)
    présentent, dans le repère (r, v, b) associé aux couleurs, la forme d'une portion (1/8) de ballon de rugby un peu déformé, allongé sur l'axe des bleus et nettement aplati sur celui des verts. Ce contour s'observe dans les sections planes contenant l'origine.

    L'expression d'un indice de couleur, qui requiert 3 sortes de fonctions: r = Fr(g, v, b) , v = Fv(g, r, b) , b = Fb(g, r, v) ,
    exclut tout bricolage numérique, si l'on veut des instructions claires, vérifiables et concises; un codage correct permet en outre de s'affranchir des données numériques, de sorte qu'un modification s'obtient par une correction mineure du texte source.
    Ces indices (improprement nommés) sont définis et maniés comme des variables réelles, afin d'éviter toute dérive calculatoire; le passage au format Byte n'intervient qu'au stade de la définition d'un pixel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
     FUNCTION IcFgrvb(Rg: Byte; Ng: Reel; Lc: Lst3R): Reel;                    // TYPE Reel = Extended;
       CONST Cc:  Lst3R = (0.2126, 0.7152, 0.0722);
             Cc1: Lst3R = (4.7037, 1.3982, 13.850);   // Cc1[k] = 1 / Cc[k]
             Np1 = 2.2; Nm1 = 0.454545;               // Nm1 = 1 / Np1
       VAR i, j: Byte; p, q, r, s: Reel; Liste: Lst3R;
       BEGIN
         s:= Power(Ng, Np1);
         FOR i:= 1 TO 2 DO BEGIN
                             j:= Rg + i;            IF j>3 THEN Dec(j, 3);
                             q:= Power(Lc[j], Np1); p:= Cc[j] * q;
                             r:= s - p;             s:= r
                           END;
         q:= Cc1[Rg] * s; p:= Power(Abs(q), Nm1); IF (s>0) THEN q:= p
                                                           ELSE q:= -p;
         IcFgrvb:= q
       END;
     
     FUNCTION BlFrvg(Ngris, Iro, Ive: Reel): Reel;
       VAR ListeC: Lst3R;
       BEGIN
         ListeC[1]:= Iro; ListeC[2]:= Ive; ListeC[3]:= 0;
         BlFrvg:= IcFgrvb(3, Ngris, ListeC)
       END;
     
     FUNCTION VeFrgb(Ngris, Iro, Ibl: Reel): Reel;
       VAR ListeC: Lst3R;
       BEGIN
         ListeC[1]:= Iro; ListeC[2]:= 0;   ListeC[3]:= Ibl;
         VeFrgb:= IcFgrvb(2, Ngris, ListeC)
       END;
     
     FUNCTION RoFgvb(Ngris, Ive, Ibl: Reel): Reel;
       VAR ListeC: Lst3R;
       BEGIN
         ListeC[1]:= 0;   ListeC[2]:= Ive; ListeC[3]:= Ibl;
         RoFgvb:= IcFgrvb(1, Ngris, ListeC)
       END;
     
         // ListeNg = 255*(0.1^n, 0.3^n, 0.5^n, 0.7^n, 0.9^n) avec n = (1/2.2)
     
     PROCEDURE Init_3_MatIm(IndiceC: Byte; La, Ha: Z_32; VAR Ma: Tab_Pix);                    // TYPE Z_32 = LongInt;
       CONST Cmax = 255; Kmax = 100000;
             ListeNg: ARRAY[1..5] OF Reel = (89.5, 147.5, 186.1, 216.8, 243.1);
       VAR c, h, i, j: Byte; k, x, y: Z_32; q, C_23, z: Reel; P_Gr: Pixel;
       BEGIN
         FOR h:= 1 TO 5 DO
           BEGIN
             i:= IndiceC - 1;      IF i<1 THEN Inc(i, 3);
             j:= IndiceC + 1;      IF j>3 THEN Dec(j, 3);
             k:= Sqr(h);           q:= 0.04 * k;                // Couleurs
             c:= Round(Cmax * q);  P_Gr[IndiceC]:=  Cmax - c;   // arbitraires pr
             q:= Sqr(h * (6 - h)); P_Gr[i]:= Round(3.148 * q);  // les graphes
             P_Gr[j]:= Cmax;       Dec(P_Gr[j], 51 * h);
             FOR k:= 1 TO Kmax DO           // Base des exponentielles > 0
               BEGIN
                 q:= k / Kmax; x:= Round(La * q); C_23:= 255 * q;
                 CASE IndiceC OF  1: z:= RoFgvb(ListeNg[h], C_23, C_23);
                                  2: z:= VeFrgb(ListeNg[h], C_23, C_23);
                                  3: z:= BlFrvg(ListeNg[h], C_23, C_23)  END;
                 q:= z / 255;  y:= Round(Ha * q);
                 IF ((0<=y) AND (y<=Ha)) THEN 
                   FOR i:= 1 TO 3 DO Ma[x, y][i]:= P_Gr[4 - i]
               END                          // Inversion (r,v,b) / (b,v,r)
           END
       END;


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

  6. #106
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Tout vient à point pour qui sait attendre
    J'ai dû reprendre la création des images, parce que je m'étais gouré dans le codage des couleurs des courbes, parfois difficiles à voir.
    On pourrait sur ce point apporter des améliorations, mais l'essentiel n'est pas là.

    J'ai repris les sections diagonales du cube des couleurs, en séparant les caractères noirs et blancs afin mieux faire apparaître les limites d'un bon contraste sur le fond continument variable.
    Les points limites de l'axe chromatique, toujours présent, correspondent aux valeurs extrêmes de la luminance relative (L) et du niveau de gris (g): d'une part l'origine (L0 = 0 , g0 = 0), d'autre part le point blanc (Lmax = 1 , gmax = 255).
    Cet axe recoupe les cinq isophotes représentées, correspondant aux luminances relatives:
    L = ( 0.1 , 0.3 , 0.5 , 0.7 , 0.9 )
    et aux niveaux de gris:
    g = 255 * L(1/2.2) = ( 89.5 , 147.5 , 186.1 , 216.8 , 243.1 ) .
    Remarquer que cette séquence, contrairement à la précédente, s'éloigne beaucoup d'une suite arithmétique.

    Nom : W_Blanc_01_340x240.gif
Affichages : 215
Taille : 41,4 Ko Nom : W_Noir_01_340x240.gif
Affichages : 225
Taille : 41,4 Ko

    Nom : W_Blanc_02_340x240.gif
Affichages : 216
Taille : 39,9 Ko Nom : W_Noir_02_340x240.gif
Affichages : 221
Taille : 39,9 Ko

    Nom : W_Blanc_03_340x240.gif
Affichages : 260
Taille : 41,0 Ko Nom : W_Noir_03_340x240.gif
Affichages : 240
Taille : 40,9 Ko

    Comme il fallait s'y attendre, on observe une transition graduelle dans l'aspect local des diverses parties de chaque image; mais les isophotes suivent néanmoins le contour des régions de très fort ou très faible contraste, ce qui confirme la pertinence du critère utilisé.

    Il ressort de plus de l'examen de ces images que le contraste s'estompe:
    a) dans le cas des caractères blancs sur fond plus sombre, au-delà de la seconde courbe (L = 0.3), comptée à partir de l'origine;
    b) dans le cas des caractères noirs sur fond plus clairs, en-deçà de la première courbe (L = 0.1).

    La frontière correspond donc à une luminance relative L ~ 0.2 , et à un niveau de gris g ~ 255*(0.21/2.2) = 123 .
    Réponse apportée à sevyc64 36 jours après qu'il ait posé la question. Comme quoi il ne faut jamais désespérer.

    PS: le choix de la limite est laissé à l'appréciation de chacun: si l'on estime que (Llim) est compris entre 0.15 et 0.25, alors le niveau de gris correspondant se situe dans l'intervalle [108 ; 136].


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

  7. #107
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Salut salut,
    Citation Envoyé par anapurna Voir le message
    salut

    si tu décalais simplement la luminance d'1/3, cela ne suffirait-il pas ?
    Je ne sais pas, je ne peux pas mettre en œuvre ta proposition :

    Citation Envoyé par anapurna Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RG := (OT DIV LUMAX)*LUMAX; // Permet de savoir si on est au-dessus de LUMAX
    Au final cette ligne va donner RG := OT; parce que (OT DIV LUMAX)*LUMAX ==> les 2 LUMAX s'annulent et il te reste OT...

    Citation Envoyé par anapurna Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LO := MOD((LUMAX-RG+OT) MOD LUMAX);// Valeur de luminance opposée
    Et là, indépendamment du fait que LUMAX-RG+OT = LUMAX tout bêtement suite à la ligne précédente, il y a deux MOD, je suppose que le premier est en trop mais j'ai horreur de supposer quand il s'agit de corriger le code de quelqu'un d'autre car je ne suis pas dans sa tête pour savoir à quoi il pensait...


    Quant à la proposition de l'ami wiwaxia, elle demande une looooongue réflexion
    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. #108
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    arf non le DIV te donne la parti entière donc si inférieur a 100 = 0, supérieur a 100 te donne 1 (tu ne dépassera jamais les 199)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    (120 DIV 100)*100 = 100
    (80 DIV 100)*100   = 0
    pour la derniere ligne tu as raison
    il faut lire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     LO = (LUMAX-RG+OT) MOD LUMAX;
    j'avais testé la fonction sous Excel mais les formule ne sont pas les même
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  9. #109
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Bonsoir,
    Citation Envoyé par anapurna Voir le message
    salut

    arf non le DIV te donne la partie entière donc si inférieur à 100 = 0, supérieur à 100 te donne 1 (tu ne dépasseras jamais les 199)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    (120 DIV 100)*100 = 100
    (80 DIV 100)*100   = 0
    Admettons.

    Mais du coup, à cause de la ligne qui précède ce DIV, OT := LUMAX - VT;, OT sera toujours inférieur à 100 et donc le résultat de la division sera toujours à 0

    EDIT : Tiens, que donnerait ta mécanique Excel avec L à 20, puis L à 50 et enfin L à 90, avec le pas toujours à 33 ?
    Je comprendrai mieux avec les réponses à ça, et on gagnera du temps.
    Merci,
    /EDIT
    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. #110
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    pour les différente valeurs voila ce que nous devrions obtenir

    20 => 53
    50 => 83
    90 => 23
    par contre tu as raison il y a des éléments qui ne servent à rien, juste à vérifier que je ne tourne pas en rond
    reprenons juste ce que nous avons besoin
    sous Excel :
    PAS = QUOTIENT(LUMAX;3)
    LTMP = LUACTU+PAS
    LNEW = MOD(LTMP;LUMAX)
    cela devais suffire pour définir le nouvelle indice
    ce qui donne en pascal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    PAS     :=  LUMAX DIV 3;
    LTMP   := LUACTU+PAS
    LNEW  := LTMP MOD LUMAX
    le reste était effectivement un moyen de vérifier que je ne me trompe pas.
    en partant de la différence entre le nouvelle indice et le max
    encore toute mes excuse pour avoir compliqué la chose
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  11. #111
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par anapurna Voir le message
    encore toutes mes excuses pour avoir compliqué la chose
    Pas grave, je m'en suis sorti d'une manière redoutable

    Citation Envoyé par anapurna Voir le message
    pour les différentes valeurs voilà ce que nous devrions obtenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    20 => 53
    50 => 83
    90 => 23
    Et donc, j'obtiens (je travaille sur l'échelle 0..1 en Float), sur des couleurs prises au hasard mais approchant les nombres source que tu donnais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    0.2059 -> 0.5359
    0.5176 -> 0.8476
    0.8843 -> 0.2143
    juste avec
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    L := L + 0.33;
    if L > 1 then L := L - 1;


    Le problème (car il y en a un, ça serait trop simple, sinon), c'est que comme je le dis depuis presque le début, il y a des couples qui ne passent pas...
    Là j'ai conservé S inchangé, et j'ai cliqué sur la 1re cellule de l'avant-dernière colonne (et les deux à sa droite c'est pas jojo non plus )
    Nom : 4anapurna.png
Affichages : 235
Taille : 52,8 Ko

    Tout en haut à gauche les valeurs de la cellule cliquée, et utilisées pour le mémo à droite : H Direct (le fond) puis H Opposé (de 180 °, pour le texte), S D puis S O (ou pas, lire ligne ci-dessous), L D puis L O avec la formule donnée ci-dessus.

    mais il m'est arrivé de faire if S < 0.5 then S := S + 0.5 else S := S - 0.5; pour inverser la saturation, et ce sont d'autres couples qui morflent...


    @wiwaxia :
    Merci pour ta formule, mais j'ai un gros souci avec...
    J'ai intégré les sous-routines dedans, je la considère donc comme une sorte de boîte noire à qui je vais passer des paramètres, mais je ne sais pas ce qu'elle est sensée faire...
    Init_3_MatIm ça peut se traduire par "Initialisation de 3 matrices pour image" ? Admettons, mais qu'est-ce que je fais avec 3 matrices pour une image ?
    Et ces choses qu'il faut que je lui passe, elles viennent d'où ? IndiceC: Byte; La, Ha: Z_32; VAR Ma: Tab_Pix; Elles représentent quoi ?

    Merci de tes précisions car là, je suis en plein brouillard...
    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

  12. #112
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut
    Bonsoir,

    Citation Envoyé par Jipété Voir le message
    ... @wiwaxia :
    Merci pour ta formule, mais j'ai un gros souci avec...
    Init_3_MatIm ça peut se traduire par "Initialisation de 3 matrices pour image" ? Admettons, mais qu'est-ce que je fais avec 3 matrices pour une image ?
    Et ces choses qu'il faut que je lui passe, elles viennent d'où ? IndiceC: Byte; La, Ha: Z_32; VAR Ma: Tab_Pix; Elles représentent quoi ?

    Merci de tes précisions car là, je suis en plein brouillard...
    Rien de changé, pour l'essentiel, depuis que nous échangeons sur des images Bitmap: la variable Matr_Image est LE tableau de pixels qui contient toujours le corps de l'image;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CONST Dim_Max = 2000;
     
    TYPE Pixel = ARRAY[1..3] OF Byte;
         Tab_Pix = ARRAY[1..Dim_Max, 1..Dim_Max] OF Pixel;
     
    VAR Matr_Image: Tab_Pix;
        Haut_Image, Larg_Image: Z_32;
    Les entiers Larg_Image et Haut_Image, de format LongInt, représentent les dimensions de l'image en pixels.

    L'initialisation de cette matrice est effectuée en trois étapes successives:
    1°) Définition de la couleur du fond continu (Init_1_MatIm);
    2°) Tracé des caractères (O) tous identiques (Init_2_MatIm);
    3°) Tracé des courbes isophotes par-dessus tout ce qui précède (Init_3_MatIm) - c'est le sujet des échanges actuels.
    Cette dernière procédure forme un tout indissociable avec les 4 fonctions qui lui sont associées.

    L'entier IndiceC est un pilote qui peut prendre l'une des 3 valeurs (1, 2, 3) selon la couleur (Rouge, Vert, ou Bleu) du coin supérieur gauche (Csg); il détermine l'appel de l'une des 3 fonctions qui suivent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                 CASE IndiceC OF  1: z:= RoFgvb(ListeNg[h], C_23, C_23);
                                  2: z:= VeFrgb(ListeNg[h], C_23, C_23);
                                  3: z:= BlFrvg(ListeNg[h], C_23, C_23)  END;
    lesquelles se réfèrent toutes à la quatrième:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     FUNCTION IcFgrvb(Rg: Byte; Ng: Reel; Lc: Lst3R): Reel;
    La particularité de cette dernière est d'avoir toujours un argument inutile (il suffit de bien lire l'algorithme): celui dont elle renvoie la valeur, et qu'en entrée on initialise à zéro.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     FUNCTION BlFrvg(Ngris, Iro, Ive: Reel): Reel;
       VAR ListeC: Lst3R;
       BEGIN
         ListeC[1]:= Iro; ListeC[2]:= Ive; ListeC[3]:= 0;
         BlFrvg:= IcFgrvb(3, Ngris, ListeC)
       END;
    
     FUNCTION VeFrgb(Ngris, Iro, Ibl: Reel): Reel;
       VAR ListeC: Lst3R;
       BEGIN
         ListeC[1]:= Iro; ListeC[2]:= 0;   ListeC[3]:= Ibl;
         VeFrgb:= IcFgrvb(2, Ngris, ListeC)
       END;
    
     FUNCTION RoFgvb(Ngris, Ive, Ibl: Reel): Reel;
       VAR ListeC: Lst3R;
       BEGIN
         ListeC[1]:= 0;   ListeC[2]:= Ive; ListeC[3]:= Ibl;
         RoFgvb:= IcFgrvb(1, Ngris, ListeC)
       END;
    Il se peut que ce procédé amène des contestations.

    Bon courage et bonne lecture.

    PS: il faut reprendre la détermination des couleurs des courbes, parfois peu visibles; j'aurais dû tenir compte de la couleur du dessin (noir ou blanc) pour obtenir un meilleur contraste.


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

  13. #113
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Voici ce que je viens d'obtenir par des formules relativement simples :
    Dans mon outil, Teinte est un nombre entre 0 et 360, alors que Saturation et Luminosité sont entre 0 et 100
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    procedure Nvcoul(t,s,l) 
    t2 = t + 180 ; si t2 > 360 alors t2 -= 360
     
    SI s < 80 ALORS 
    	s2 = 80 + s /4
    SINON
    	s2 = (s-80)*4
    FIN
     
    si l < 50 alors 
       l2 = l/2 + 75
    sinon
       l2 = l/2 - 25
    fin
    renvoyer (t2,s2, l2)
    Dans chaque case, j'écris les codes RGB de la couleur de fond, et de la couleur du texte.
    Comme on joue beaucoup sur la luminosité (luminosité du texte toujours en dehors de l'intervalle ]25,75[ ), les textes se retrouvent dans des couleurs toujours proches du blanc ou du noir.
    Globalement, les résultats sont lisibles.
    Nom : img_coul_compl15250479.jpg
Affichages : 224
Taille : 153,0 Ko
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  14. #114
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Bonsoir,
    Citation Envoyé par tbc92 Voir le message
    Voici ce que je viens d'obtenir par des formules relativement simples :
    Dans mon outil, Teinte est un nombre entre 0 et 360, alors que Saturation et Luminosité sont entre 0 et 100
    Globalement, les résultats sont lisibles.
    En première approche je dis "pas mal !"
    Cependant, une petite remarque :
    Citation Envoyé par tbc92 Voir le message
    Dans chaque case, j'écris les codes RGB de la couleur de fond, et de la couleur du texte.
    Les codes RGB en hexa c'est passablement imbuvable
    Et impossible d'appréhender les 3 valeurs différentes d'un simple coup d'œil,
    Tu pourrais pas refaire la même image en écrivant plutôt les valeurs TSL ? Ça serait plus parlant.

    Pi aussi, évite de trop compresser l'image de sortie, ça fait monter les artefacts de compression jipègue, et du coup le ColorPicker sur le texte ne s'y retrouve pas :
    Nom : artefacts_jpeg.png
Affichages : 210
Taille : 19,6 Ko

    La seule chose que je trouve dommage,
    Citation Envoyé par tbc92 Voir le message
    Comme on joue beaucoup sur la luminosité (luminosité du texte toujours en dehors de l'intervalle ]25,75[ ), les textes se retrouvent dans des couleurs toujours proches du blanc ou du noir.
    c'est que les graphistes veulent parfois (souvent) du texte en... couleur !


    @wiwaxia : merci pour ton retour, je regarde tout ça la semaine prochaine, là je suis sur un autre truc (toujours en rapport, mais n'anticipons pas).
    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

  15. #115
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Voici une nouvelle version, prenant en compte tes remarques.
    Les couleurs sont affichées sous la forme (T,S,L).
    Je triche un peu, j'ai passé les textes en gras, ça améliore la lisibilité.
    Paradoxalement, en inversant la teinte, ça donne des résultats peu lisibles (magenta sur vert par exemple). Alors qu'on obtient des résultats beaucoup plus lisibles, avec du vert clair sur vert foncé (c'est mon sentiment après avoir fait ces tests, je ne sais pas du tout ce que disent les spécialistes).
    Le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure Nvcoul(t,s,l) 
    t2=t 
    s2 = s+ 50 ; si s2 >= 100 alors s2 -= 100
    l2 = l+ 53 ; si l2 >= 100 alors l2 -= 100
     
    SI l2 > 76 ALORS l2 = (76+l2)/2
    SI l2 > 84 ALORS l2 = (84+l2)/2
    SI l2 < 40 ALORS l2 = (40+l2)/2
    SI l2 < 30 ALORS l2 = (30+l2)/2
     
    renvoyer (t2, s2, l2)
    Sans les 4 dernières lignes, le résultat est lisible. Elles servent juste à remplacer les couleurs trop proches du blanc ou du noir par des couleurs plus "colorées".
    Un exemple de résultat :
    Nom : img_coul_compl01521163.jpg
Affichages : 245
Taille : 114,1 Ko

    Je ne montre que des couleurs avec une luminosité 'moyenne'. Pour les luminosités extrêmes, c'est plus facile.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  16. #116
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Salut,

    OMG que c'est bien les codes en clair

    Allez, je me suis livré à un petit montage de comparaison, en partant du bleu ciel qu'on trouve sur la dernière ligne 2e colonne (puisque c'était la seule demande que j'avais traitée récemment et donc sous le coude, et je trouvais que ton bleu ciel à 211 80 79 s'approchait de celui de la copine).

    Voilà ce que ça donne (en haut ta manière et en bas la mienne), avec une police 32 en gras :
    Nom : compar_tsl_tsv.png
Affichages : 199
Taille : 3,7 Ko

    Je me rends compte après coup que le texte n'est pas très parlant, j'aurais dû mettre "tbc92" en haut et "jipété" en bas, mais après, comment comparer ?

    Bref, je laisse les "artistiques" décider du mieux en fonction du but recherché, étant entendu qu'en grands corps il aurait fallu aussi jouer sur l'interlettrage, chose qui n'est pas proposée par les boîtes de dialogue d'options des polices, alors bon, on ne va pas se lancer en plus dans l'ajustement du positionnement des caractères à coups de "TextOut" et autres machins compliqués.

    Bye et bon dimanche,

    PS : je trouve "mon" orange un peu trop vif, artistiquement parlant, et je l'aurais bien passé (avec les curseurs ! wiwaxia), en RGB, de 255 132 0 à 250 125 0 (TSL 30 100 49) :
    Nom : tsl_30_125_0.png
Affichages : 193
Taille : 1,5 Ko

    Sortez les ColorPickers
    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

  17. #117
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Détermination d'une couleur contrastée
    Bonjour,

    @ tbc92: La lecture de tes deux derniers messages (#113, #115) suscite les remarques suivantes.

    Citation Envoyé par tbc92 Voir le message
    Voici ce que je viens d'obtenir par des formules relativement simples :
    Dans mon outil, Teinte est un nombre entre 0 et 360, alors que Saturation et Luminosité sont entre 0 et 100
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure Nvcoul(t,s,l) 
    t2 = t + 180 ; si t2 > 360 alors t2 -= 360
     
    SI s < 80 ALORS s2 = 80 + s /4
              SINON s2 = (s-80)*4  FIN
     
    si l < 50 alors l2 = l/2 + 75
              sinon l2 = l/2 - 25  fin
    renvoyer (t2,s2, l2)
    ... Comme on joue beaucoup sur la luminosité (luminosité du texte toujours en dehors de l'intervalle ]25,75[ ), les textes se retrouvent dans des couleurs toujours proches du blanc ou du noir.
    Globalement, les résultats sont lisibles.
    Les contrastes obtenus sont généralement satisfaisants, à quelques exceptions près - la case (6, 4) par exemple.
    Cela vient du système de couleurs lui-même (TSL), simple mais très rudimentaire, et qui ignore les écarts de luminosité intrinsèques des couleurs fondamentales; celles-ci sont en effet dans les rapports (3:10:1).
    Ta démarche est par ailleurs contradictoire: en recherchant les couleurs présentant le plus fort contraste, tu en viens à te limiter (comme tu en conviens toi-même) à des noirs ou des gris clairs peu colorés.

    Citation Envoyé par tbc92 Voir le message
    Voici une nouvelle version, prenant en compte tes remarques ...
    Paradoxalement, en inversant la teinte, ça donne des résultats peu lisibles (magenta sur vert par exemple). Alors qu'on obtient des résultats beaucoup plus lisibles, avec du vert clair sur vert foncé (c'est mon sentiment après avoir fait ces tests, je ne sais pas du tout ce que disent les spécialistes).
    Le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure Nvcoul(t,s,l) 
    t2=t 
    s2 = s+ 50 ; si s2 >= 100 alors s2 -= 100
    l2 = l+ 53 ; si l2 >= 100 alors l2 -= 100
     
    SI l2 > 76 ALORS l2 = (76+l2)/2
    SI l2 > 84 ALORS l2 = (84+l2)/2
    SI l2 < 40 ALORS l2 = (40+l2)/2
    SI l2 < 30 ALORS l2 = (30+l2)/2
     
    renvoyer (t2, s2, l2)
    Sans les 4 dernières lignes, le résultat est lisible. Elles servent juste à remplacer les couleurs trop proches du blanc ou du noir par des couleurs plus "colorées" ...
    Je ne montre que des couleurs avec une luminosité 'moyenne'. Pour les luminosités extrêmes, c'est plus facile.
    Le début est, si j'ai bien compris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SI s < 50 ALORS s2 = s + 50
              SINON s2 = s - 50  FIN;
    Si l < 47 ALORS l2 = l + 53
              SINON l2 = l - 47
    d'où la discontinuité centrale imposée à la saturation (en s0 = 50) et à la luminosité (en l0 = 47), et conduisant à une chute brutale de (100) à (0).
    Les corrections de luminosité qui suivent m'ont paru plus discutables dans la mesure où:
    a) elles présentent deux discontinuités injustifiées aux seuil (30) et (84):
    # L2 = 30 - 0 : L2' = 30 ; _ _ # L2 = 84 - 0 : L2' = 80
    # L2 = 30 + 0 : L2' = 35 ; _ _ # L2 = 84 + 0 : L2' = 84
    b) elles n'aboutissent pas aux valeurs extrêmes (0) et (100): l'20 = 15 ; l'2100 = 92 ,
    ce qui contribue à rendre les résultats décevants.

    Je te suggère ici, puisque tu tiens à éviter le noir et le blanc, deux instructions beaucoup plus simples (mais non linéaires):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SI l < 50 ALORS l2 = 100 - Sqrt(50*(50 - l))
              SINON l2 = Sqrt(50*(l - 50))  FIN;
    Je crois, d'une manière plus générale, qu'il est vain de rechercher le meilleur contraste en travaillant dans le système (TSL), parce que ses variables sont des fonctions des 3 composantes (r, v, b); si les transformations appliquées à la teinte (T' = T + 180) et à la luminosité (L' = L + 50 ou L - 50) sont envisageables (quoique déjà pas forcément optimales, quant à l'effet produit), celle envisagée pour la saturation (S' = 100 - S) ne donne strictement rien: deux couleurs fortement contrastées présenteront souvent de faibles saturations.

    On en revient aux composantes fondamentales, et à leur luminance propre; il est inutile et contre-productif de tenter d'échapper aux calculs peu sympathiques qui ne manquent pas d'apparaître
    Couvrez ce sein, que je ne saurais voir. Par de pareils objets les âmes sont blessées
    en changeant de coordonnées, et en bricolant des fonctions linéaires par morceaux.

    Le plus fort est que la solution a été entrevue dès le début de ces échanges (# 3, #4), et qu'il suffisait de reprendre les relations proposées pour chacun des indices de couleur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    IF (Ic<128) THEN Jc:= Ic + 128                    // Ic: indice initial de couleur
                ELSE Jc:= Ic - 128;                   // Jc: nouvel indice
    Mieux encore: si un lecteur se sent d'attaque, qu'il applique la même relation à la luminance correspondante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CONST N = 2.2; N1 = 1 / 2.2;
          Lmax = Power(255, N);      
          Seuil = 0.5 * Lmax;                    // Seuil de luminance modifiable en changeant le premier facteur
          DeltaL = Lmax - Seuil;
    ...
    LumA:= Power(Ic, n);
    IF (LumA<Seuil) THEN LumB:= LumA + DeltaL
                    ELSE LumB:= LumA - Seuil;                    // L(0) = DeltaL = L(Lmax)
    Jc:= Power(LumB, N1)


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

  18. #118
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Yop !

    Citation Envoyé par wiwaxia Voir le message
    Le plus fort est que la solution a été entrevue dès le début de ces échanges (# 3, #4), et qu'il suffisait de reprendre les relations proposées pour chacun des indices de couleur:
    C'est ce que je fais depuis le début...

    Citation Envoyé par wiwaxia Voir le message
    Mieux encore: si un lecteur se sent d'attaque, qu'il applique la même relation à la luminance correspondante:
    Je travaille en mode HSL, et j'ai conservé l'inversion de H : if H < 0.5 then H := H + 0.5 else H := H - 0.5; avant de modifier L avec ta formule : pas glop

    Nom : test_new_wiwaxia.png
Affichages : 202
Taille : 36,9 Ko

    Même souci en inversant la saturation... La semaine prochaine je m'attaque à ta grosse formule d'il y a qq jours.
    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

  19. #119
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    On va lever un peu la tête du guidon, et regarder ce qui se fait.
    Sur ce site www.developpez.net, on a des fonds bleus, avec différentes variétés de bleus, et on a des textes en polices bleues, avec différentes variétés de bleus.

    Et ce n'est pas spécifique à ce site. A peu près tous les sites 'consistants' utilisent du ton sur ton, mais pas du 'couleur opposée'

    Je pense que ça répond à la question de la copine de Jipété.

    @wiwaxia : il y a effectivement discontinuité pour l= 50. Par contre pas de discontinuité pour l2 = 30 ou 40 ... juste un angle.
    Ceci dit, la formule que tu proposes est plus élégante, et comme souvent, une formule plus élégante, ça donne un résultat meilleur.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  20. #120
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    On va lever un peu la tête du guidon, et regarder ce qui se fait.
    Sur ce site www.developpez.net, on a des fonds bleus, avec différentes variétés de bleus, et on a des textes en polices bleues, avec différentes variétés de bleus.

    Et ce n'est pas spécifique à ce site. A peu près tous les sites 'consistants' utilisent du ton sur ton, mais pas du 'couleur opposée'

    Je pense que ça répond à la question de la copine de Jipété.
    Oui, enfin, la copine de Jipété ça fait 40 ans qu'elle barbouille des toiles avec force pinceaux et tubes de gouaches, alors bon...

    Quant aux sites et à ce qui se fait ailleurs, j'ai pu lire ça :
    la palette monochrome représente l’agencement le plus sobre et le plus reposant. (source)

    On est bien d'accord : le plus sobre et le plus reposant, mais la copine elle voulait une accroche pour son document A4, alors
    Peignez un petit rond noir dans le coin d’une grande feuille blanche, ou un bouquet de coquelicot sur une verte prairie. Aussitôt, les regards se dirigent vers le rond ou vers les fleurs. Pourquoi ? Parce que ces zones sont contrastés, ce qui pour l’œil signifie qu’il se passe quelque chose d’intéressant par là… (source)

    et plus bas :
    il sera plus judicieux de jouer sur le contraste entre une couleur dominante – qui occupe de grandes surfaces – et une couleur tonique – qui occupe peu de surface, mais qui ressortira d’autant plus fortement par rapport à la dominante.
    (c'est moi qui mets en gras)

    L’harmonie complémentaire ou contrastée se produit lorsqu’on sélectionne 2 couleurs diamétralement opposées sur la roue chromatique. rouge/vert, bleu/orange, jaune/violet…
    Ainsi sont associées une couleur chaude avec une couleur froide pour attirer l’attention
    (source)

    Le contraste ou des couleurs opposées doivent être utilisés avec soin. C'est utile d'avoir des couleurs opposées ou un contraste élevé pour attirer l'attention sur un ou deux éléments [...] (source)

    En gros, on va utiliser des agencements en fonction de ce qu'on veut faire passer comme message (un peu comme je choisis une police en fonction du texte qu'elle affichera).

    'fin bon, on va attendre de lire ce que sevyc64 en pense...
    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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/06/2015, 13h03
  2. Calculer un bon contraste d'une couleur
    Par Cypselos dans le forum Traitement d'images
    Réponses: 11
    Dernier message: 20/11/2009, 17h16
  3. déterminer la "tonalité" d'une couleur.
    Par Alexdezark dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/10/2009, 10h24
  4. Déterminer si une image est en couleur
    Par ImagingAllthe dans le forum Images
    Réponses: 2
    Dernier message: 26/02/2008, 15h48
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo