Fonction de décomposition de la couleur en nuances. - page 19

 

Je suis désolé, Pyotr, je m'en occupe à partir de maintenant. J'ai déjà dit tout ce que j'avais à dire sur le sujet. Je n'ai pas envie de me répéter.

Il n'y a pas d'algorithmes "votre" et "mon".

Je le répète, la seule chose digne d'attention dans ce fil est cette fonction, à partir de laquelle "vos" et "mes" algorithmes peuvent être dérivés, le reste est du lavage de mains (tant de votre côté que du mien :))

void Gradient(uint clr1,uint clr2,uint &arr[],uint size)
  {
   if(size==0) return;
   ArrayResize(arr,size);
   arr[0]=clr1; 
   rgb c1,c2;
   c1.clr=clr1;
   c2.clr=clr2;
   double R1=c1.c[2],G1=c1.c[1],B1=c1.c[0];
   double R2=c2.c[2],G2=c2.c[1],B2=c2.c[0];
   double deltaR=(R2-R1)/(size-1);
   double deltaG=(G2-G1)/(size-1);
   double deltaB=(B2-B1)/(size-1);
   R1 += 0.4999;
   G1 += 0.4999;
   B1 += 0.4999;
   for(uint i=1;i<size;i++)
     {
      R1+=deltaR; c1.c[2]=uchar (R1);
      G1+=deltaG; c1.c[1]=uchar (G1);
      B1+=deltaB; c1.c[0]=uchar (B1);
      arr[i]=c1.clr;
     }
  }
 
Nikolai Semko:

Je suis désolé, Peter - Je vais prendre le relais. J'ai déjà dit tout ce que j'avais à dire sur le sujet. Je n'ai aucune envie de me répéter.

Il n'y a pas d'algorithmes "votre" et "mon".

Encore une fois, la seule chose qui mérite l'attention dans ce fil est cette fonction à partir de laquelle vous pouvez obtenir "vos" et "mes" algorithmes, le reste est du lavage de mains (tant de votre côté que du mien :))

Nikolaï, je suis pour l'objectivité. J'ai joint le script et les captures d'écran.

Je sais que vous aimez améliorer vos solutions. Moi aussi.

Votre algorithme crée (malheureusement) le mauvais gradient. Je n'ai pas cherché l'erreur, car je ne sais pas comment ça marche. Mais vous pouvez le faire.

 
Реter Konow:

Nikolaï, je suis pour l'objectivité. J'ai joint un script et des captures d'écran.

Je sais que vous aimez améliorer vos solutions. Moi aussi.

Votre algorithme crée (malheureusement) le mauvais gradient. Je n'ai pas cherché l'erreur car je ne sais pas comment ça marche. Mais vous pouvez le faire.

https://www.mql5.com/ru/forum/282861/page7#comment_8971634

https://www.mql5.com/ru/forum/282861/page9#comment_8987611

https://www.mql5.com/ru/forum/282861/page11#comment_8987978

https://www.mql5.com/ru/forum/282861/page19#comment_9019253
 

Oui, vous pensez que votre algorithme fonctionne correctement parce qu'il correspond à votre théorie sur la façon dont il fonctionne correctement. Je comprends.

Cependant, je prends la palette Windows comme référence. Si vous comparez la sortie de votre algorithme à la palette, la différence est significative. Vous pouvez le voir dans les chiffres et visuellement.

C'est tout ce que je voulais montrer.

Vous pouvez le laisser comme ça. C'est aussi très joli comme ça.

 
Реter Konow:

Oui, vous pensez que votre algorithme fonctionne correctement parce qu'il correspond à votre théorie sur la façon dont il fonctionne correctement. Je comprends.

Cependant, je prends la palette Windows comme référence. Si vous comparez la sortie de votre algorithme à la palette, la différence est significative. Vous pouvez le voir dans les chiffres et visuellement.

C'est tout ce que je voulais montrer.

Vous pouvez le laisser comme ça. Il est aussi très beau.

Tu ne vois pas ce que j'écris. Je n'aime pas l'approche que j'ai adoptée, que vous appelez mon algorithme moi-même (moins mauvais). Mais votre approche me déplaît encore plus et j'ai expliqué pourquoi.

 
Nikolai Semko:

tu ne vois pas ce que j'écris. L'approche que j'ai adoptée, que vous appelez mon algorithme, n'est pas à mon goût (moins de mal). Mais votre approche me déplaît encore plus et j'ai expliqué pourquoi.

Eh bien, alors vous n'aimez pas non plus la palette Windows. Après tout, j'ai une correspondance presque complète avec elle.

 
Реter Konow:

Eh bien, alors vous n'aimez pas non plus la palette Windows. Après tout, j'ai une correspondance presque parfaite avec elle.

J'ai déjà écrit à ce sujet.

Et ne confondez pas palette et dégradé. Le gradient est unidimensionnel, la palette est bidimensionnelle ou tridimensionnelle, voire quadridimensionnelle (si vous parlez de CMYK).

Par exemple :

c'est une palette rouge bidimensionnelle

et ceci est son gradient unidimensionnel.

Vous essayez d'argumenter sur l'endroit où la jonction des deux gradients (du noir à la couleur et de la couleur au blanc) est nécessaire. Vous affirmez que les variantes du milieu sont les seules correctes, car elles sont utilisées dans Paint sous Windows. Dans vos exemples ci-dessus, où une seule composante de couleur apparaît et les autres sont nulles, oui - c'est correct, mais ce n'est qu'un cas particulier. Je n'affirme rien, je dis simplement que cela dépend de la tâche à accomplir, mais je pense qu'il est logique de le mettre dans le cas le plus général, en fonction de la luminosité de la couleur (somme de R+B+G).

Par exemple, dans les éditeurs graphiques les plus sérieux, tels que ceux de Corel et d'Adobe, lorsqu'il s'agit de remplir les dégradés, il existe un paramètre pour le "centre de gravité" du dégradé :

c'est un argument sans appel.

Je m'éloigne de ce sujet.

 
Nikolai Semko:


Je parle de la gamme de couleurs. Le gradient peut être différent. Mais la gamme complète des nuances d'une même couleur est constante.

Chaque couleur a trois composantes - trois points sur un graphique. Trois lignes les traversent et chaque ligne a deux segments sur le graphique. Les segments apparaissent par réfraction de la lumière. L'axe de réfraction est au centre du graphique. Chaque segment a un angle d'ascension différent. L'ascension va de zéro à la valeur maximale. Les six segments du graphique représentent un prisme dont les angles sont constants pour chaque intervalle. La tâche consiste à trouver la valeur d'un composant en chaque point des barres. De cette façon, je trouve toutes les nuances d'une même couleur. Tout le reste est une manipulation dérivée de cette solution. Vous pouvez changer les angles d'ascension, vous pouvez mélanger les couleurs, etc. La base reste la même.

Dans votre solution, la gamme de nuances est soit incomplète, soit déformée. Dans l'un ou l'autre cas, la transition des teintes n'est pas douce et harmonieuse.


zy. Concernant le centre de gravité, je suis d'accord. Mais il s'agit juste d'une manipulation consistant à calculer des points spécifiques sur le graphique. Vous pouvez obtenir plus de valeurs de composants dans le premier segment que dans le second. Vous obtenez donc un "centre de gravité à gradient décalé" (comme dans l'exemple ci-dessus).

 
Tu ne sais pas faire le morpion ?
 

Le graphique ressemble à ceci :



Et à tout cela, je suis venu en observant simplement le comportement des chiffres dans les fenêtres de la palette Windows.

Raison: