Bibliotecas: IncColors

 

IncColors:

Esta clase contiene funciones para trabajar con colores. Para conversión de color y otras funciones útiles.

Autor: Dmitry Fedoseev

 

Maravilloso conjunto de funciones para trabajar con el color. Gracias.

Pero, para ser plenamente feliz, me falta la función de convertir un número situado en un intervalo dado en color (y el color se puede convertir como se quiera con la ayuda de sus funciones).

Utilizo una construcción tan primitiva:

//+------------------------------------------------------------------+
//|JQS RainbowColour v1.0.0|
//|Copyright © 2010, JQS alias Joo. |
//|                                 http://www.mql4.com/ru/users/joo |
//| https://www.mql5.com/es/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 es inferior al límite inferior
        if (Brush<0.0)
        {
                R="255";
                G="0";
                B="0";
                return(StringToColor("C'"+R+","+G+","+B+"'"));
        }
        //Si es mayor que el límite superior
        if (Brush>100.0)
        {
                R="255";
                G="0";
                B="255";
                return(StringToColor("C'"+R+","+G+","+B+"'"));
        }
        //De rojo a amarillo 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 amarillo a 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+"'"));
        }
        //--------------------------------------------
        //De verde a azul 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 cian a azul 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 azul a violeta 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 función devuelve el color según la escala de colores del arco iris.

¿Podrías añadir esta función a la biblioteca? - y mejorarla en términos de velocidad.

 
joo:

Maravilloso conjunto de funciones para trabajar con el color. Gracias.

Pero, para ser plenamente feliz, me falta la función de convertir un número situado en un intervalo dado en color (y el color se puede convertir como se quiera con la ayuda de sus funciones).

Utilizo una construcción tan primitiva:

La función devuelve el color según la escala de colores del arco iris.

¿Podrías añadir esta función a la biblioteca? - y mejorarla en términos de velocidad.

Le echaré un vistazo en mi tiempo libre, averiguaré qué tipo de función es, y la insertaré si es necesario. Pero en general, hay una conversión de HSL y a HSL. El componente H es el tono (número de color), simplemente de 0 a 1 pasamos por todo el arco iris.