Librerie: IncColori

 

IncColori:

Una classe con una serie di funzioni per lavorare con il colore. Funzioni di conversione delle coordinate cromatiche e altre funzioni.

Author: Dmitry Fedoseev

 

Una splendida serie di funzioni per lavorare con il colore! Grazie.

Ma, per essere completamente felice, mi manca la funzione di conversione di un numero compreso in un dato intervallo in colore (e il colore può essere convertito a piacere con l'aiuto delle vostre funzioni).

Uso una costruzione primitiva:

//+------------------------------------------------------------------+
//|JQS RainbowColour v1.0.0|
//|Copyright © 2010, JQS aka Joo. |
//|                                 http://www.mql4.com/ru/users/joo |
//| https://www.mql5.com/it/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);
        //Se inferiore al limite inferiore
        if (Brush<0.0)
        {
                R="255";
                G="0";
                B="0";
                return(StringToColor("C'"+R+","+G+","+B+"'"));
        }
        //Se maggiore del limite superiore
        if (Brush>100.0)
        {
                R="255";
                G="0";
                B="255";
                return(StringToColor("C'"+R+","+G+","+B+"'"));
        }
        //Dal rosso al giallo 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+"'"));
        }
        //--------------------------------------------
        //Dal giallo al verde 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+"'"));
        }
        //--------------------------------------------
        /Verde a blu 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+"'"));
        }
        //--------------------------------------------
        //Dal ciano al blu 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+"'"));
        }
        //--------------------------------------------
        //Dal blu al viola 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 funzione restituisce il colore secondo la scala cromatica dell'arcobaleno.

Potreste aggiungere questa funzione alla libreria? - e migliorarla in termini di velocità.

 
joo:

Una serie di funzioni meravigliose per lavorare con il colore! Grazie.

Ma, per essere completamente felice, mi manca la funzione di conversione di un numero compreso in un dato intervallo in colore (e il colore può essere convertito a piacere con l'aiuto delle vostre funzioni).

Uso una costruzione primitiva:

La funzione restituisce il colore secondo la scala cromatica dell'arcobaleno.

Potreste aggiungere questa funzione alla libreria? - e migliorarla in termini di velocità.

Darò un'occhiata con calma, capirò di che tipo di funzione si tratta e la inserirò se necessario. Ma in generale, c'è una conversione da HSL e a HSL. La componente H è la tinta (numero di colore), semplicemente da 0 a 1 si passa attraverso l'intero arcobaleno.