Bibliotecas: IncColors

 

IncColors:

Essa classe contém funções para trabalhar com cores. Tem conversão de cores e outras funções úteis.

Autor: Dmitry Fedoseev

 

Conjunto maravilhoso de recursos para trabalhar com cores! Muito obrigado.

Mas, para que eu seja plenamente feliz, falta-me a função de converter um número situado em um determinado intervalo em cor (e a cor pode ser convertida como você quiser com a ajuda de suas funções).

Eu uso essa construção primitiva:

//+------------------------------------------------------------------+
//|JQS RainbowColour v1.0.0|
//|Direitos autorais © 2010, JQS aka Joo. |
//|                                 http://www.mql4.com/ru/users/joo |
//| https://www.mql5.com/pt/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 for menor que o limite inferior
        if (Brush<0.0)
        {
                R="255";
                G="0";
                B="0";
                return(StringToColor("C'"+R+","+G+","+B+"'"));
        }
        //Se for maior que o limite superior
        if (Brush>100.0)
        {
                R="255";
                G="0";
                B="255";
                return(StringToColor("C'"+R+","+G+","+B+"'"));
        }
        /Do vermelho ao amarelo 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+"'"));
        }
        //--------------------------------------------
        /Do amarelo para o 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 para 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+"'"));
        }
        //--------------------------------------------
        /Do ciano para o 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+"'"));
        }
        //--------------------------------------------
        /Do azul ao 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);
}
//+------------------------------------------------------------------+

A função retorna a cor de acordo com a escala de cores do arco-íris.

Você poderia adicionar essa função à biblioteca? - e melhorá-la em termos de velocidade.

 
joo:

Conjunto maravilhoso de recursos para trabalhar com cores! Muito obrigado.

Mas, para que eu seja plenamente feliz, falta-me a função de converter um número situado em um determinado intervalo em cor (e a cor pode ser convertida como você quiser com a ajuda de suas funções).

Eu uso essa construção primitiva:

A função retorna a cor de acordo com a escala de cores do arco-íris.

Você poderia adicionar essa função à biblioteca? - e melhorá-la em termos de velocidade.

Darei uma olhada quando quiser, descobrirei que tipo de função é essa e a inserirei, se necessário. Mas, em geral, há uma conversão de HSL e para HSL. O componente H é o matiz (número da cor), apenas de 0 a 1 percorremos todo o arco-íris.