Bibliothèque: IncColors

 

IncColors:

Une classe avec un ensemble de fonctions pour travailler avec la couleur. Fonctions de conversion des coordonnées de couleur et autres fonctions.

Author: Dmitry Fedoseev

 

Merveilleux ensemble de fonctionnalités pour travailler avec la couleur ! Je vous remercie.

Mais, pour mon plus grand bonheur, il me manque la fonction de conversion en couleur d'un nombre situé dans un intervalle donné (et la couleur peut être convertie comme vous le souhaitez à l'aide de vos fonctions).

J'utilise une construction primitive de ce type :

//+------------------------------------------------------------------+
//|JQS RainbowColour v1.0.0|
//|Copyright © 2010, JQS aka Joo. |
//|                                 http://www.mql4.com/ru/users/joo |
//| https://www.mql5.com/fr/users/joo |
//+------------------------------------------------------------------+
color RainbowColor(double BrushIn,double min,double max)
{
        string R,G,B;
        int temp;
        double Brush=ScaleColor(BrushIn,min,max,0.0,100.0);
        //Si inférieur à la limite inférieure
        if (Brush<0.0)
        {
                R="255";
                G="0";
                B="0";
                return(StringToColor("C'"+R+","+G+","+B+"'"));
        }
        //Si supérieur à la limite supérieure
        if (Brush>100.0)
        {
                R="255";
                G="0";
                B="255";
                return(StringToColor("C'"+R+","+G+","+B+"'"));
        }
        /De rouge à jaune 255.0.0 -> 255.255.255.0
        if (Brush>=0.0 && Brush<20.0)
        {
                R="255";
                temp=(int)MathRound(ScaleColor(Brush,0.0,20.0,0.0,255.0));
                G=(string)temp;
                B="0";
                return(StringToColor("C'"+R+","+G+","+B+"'"));
        }
        //--------------------------------------------
        /De jaune à vert 255.255.0 -> 0.255.0
        if (Brush>=20.0 && Brush<40.0)
        {
                temp=(int)(255.0-MathRound(ScaleColor(Brush-20.0,0.0,20.0,0.0,255.0)));
                R=(string)temp;
                G="255";
                B="0";
                return(StringToColor("C'"+R+","+G+","+B+"'"));
        }
        //--------------------------------------------
        //De vert à bleu 0.255.0 -> 0.255.255.255
        if (Brush>=40.0 && Brush<60.0)
        {
                R="0";
                G="255";
                temp=(int)(MathRound(ScaleColor(Brush-40.0,0.0,20.0,0.0,255.0)));
                B=(string)temp;
                return(StringToColor("C'"+R+","+G+","+B+"'"));
        }
        //--------------------------------------------
        /De cyan à bleu 0.255.255 -> 0.0.255
        if (Brush>=60.0 && Brush<80.0)
        {
                R="0";
                temp=(int)(255.0-MathRound(ScaleColor(Brush-60.0,0.0,20.0,0.0,255.0)));
                G=(string)temp;
                B="255";
                return(StringToColor("C'"+R+","+G+","+B+"'"));
        }
        //--------------------------------------------
        /De bleu à violet 0.0.255 -> 255.0.255
        if (Brush>=80.0 && Brush<=100.0)
        {
                temp=(int)(MathRound(ScaleColor(Brush-80.0,0.0,20.0,0.0,255.0)));
                R=(string)temp;
                G="0";
                B="255";
                return(StringToColor("C'"+R+","+G+","+B+"'"));
        }
        return(StringToColor("C'"+(string)255+","+(string)255+","+(string)255+"'"));
}
//+------------------------------------------------------------------+

double ScaleColor(double In,double InMIN,double InMAX,double OutMIN,double OutMAX)
{
        double Out=((In-InMIN)*(OutMAX-OutMIN)/(InMAX-InMIN))+OutMIN;
        return(Out);
}
//+------------------------------------------------------------------+

La fonction renvoie la couleur selon l'échelle des couleurs de l'arc-en-ciel.

Pourriez-vous ajouter cette fonction à la bibliothèque ? - et l'améliorer en termes de vitesse.

 
joo:

Merveilleux ensemble de fonctionnalités pour travailler avec la couleur ! Je vous remercie.

Mais, pour mon plus grand bonheur, il me manque la fonction de conversion en couleur d'un nombre situé dans un intervalle donné (et la couleur peut être convertie comme vous le souhaitez à l'aide de vos fonctions).

J'utilise une construction primitive de ce type :

La fonction renvoie la couleur selon l'échelle des couleurs de l'arc-en-ciel.

Pourriez-vous ajouter cette fonction à la bibliothèque ? - et l'améliorer en termes de vitesse.

Je jetterai un coup d'œil quand j'en aurai le temps, je déterminerai de quel type de fonction il s'agit et je l'insérerai si nécessaire. Mais en général, il y a une conversion de HSL et vers HSL. La composante H est la teinte (nombre de couleurs), de 0 à 1 on parcourt tout l'arc-en-ciel.