Bibliotheken: IncColors

 

IncColors:

Diese Klasse enthält Funktionen für die Arbeit mit Farben. Sie enthält Farbkonvertierungen und andere praktische Funktionen.

Autor: Dmitry Fedoseev

 

Eine wunderbare Zusammenstellung von Funktionen für die Arbeit mit Farbe! Vielen Dank dafür.

Aber, um ganz glücklich zu sein, fehlt mir die Funktion, eine Zahl, die in einem bestimmten Intervall liegt, in eine Farbe umzuwandeln (und die Farbe kann mit Hilfe Ihrer Funktionen beliebig umgewandelt werden).

Ich verwende eine solche primitive Konstruktion:

//+------------------------------------------------------------------+
//|JQS RainbowColour v1.0.0|
//|Copyright © 2010, JQS alias Joo. |
//|                                 http://www.mql4.com/ru/users/joo |
//| https://www.mql5.com/de/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);
        //Wenn weniger als die Untergrenze
        if (Brush<0.0)
        {
                R="255";
                G="0";
                B="0";
                return(StringToColor("C'"+R+","+G+","+B+"'"));
        }
        //Wenn größer als die Obergrenze
        if (Brush>100.0)
        {
                R="255";
                G="0";
                B="255";
                return(StringToColor("C'"+R+","+G+","+B+"'"));
        }
        //Von rot nach gelb 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+"'"));
        }
        //--------------------------------------------
        //Von gelb nach grün 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+"'"));
        }
        //--------------------------------------------
        //Grün nach Blau 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+"'"));
        }
        //--------------------------------------------
        //Von Cyan nach Blau 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+"'"));
        }
        //--------------------------------------------
        //Von blau nach violett 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);
}
//+------------------------------------------------------------------+

Die Funktion gibt die Farbe gemäß der Regenbogenfarbskala zurück.

Könnten Sie diese Funktion in die Bibliothek aufnehmen? - und sie im Hinblick auf die Geschwindigkeit verbessern.

 
joo:

Eine wunderbare Zusammenstellung von Funktionen für die Arbeit mit Farbe! Vielen Dank dafür.

Aber, um ganz glücklich zu sein, fehlt mir die Funktion, eine Zahl, die in einem bestimmten Intervall liegt, in eine Farbe umzuwandeln (und Farbe kann mit Hilfe Ihrer Funktionen beliebig umgewandelt werden).

Ich verwende eine solche primitive Konstruktion:

Die Funktion gibt die Farbe gemäß der Regenbogenfarbskala zurück.

Könnten Sie diese Funktion in die Bibliothek aufnehmen? - und sie im Hinblick auf die Geschwindigkeit verbessern.

Ich werde mir das in Ruhe ansehen, herausfinden, um was für eine Funktion es sich handelt, und sie gegebenenfalls einfügen. Aber im Allgemeinen gibt es eine Konvertierung von HSL und nach HSL. Die H-Komponente ist der Farbton (Farbzahl), wir gehen einfach von 0 bis 1 durch den ganzen Regenbogen.