forked from rosh/MQL5Book
70 lines
2.5 KiB
MQL5
70 lines
2.5 KiB
MQL5
//+------------------------------------------------------------------+
| |||
//| ConversionColor.mq5 |
| |||
//| Copyright 2021, MetaQuotes Ltd. |
| |||
//| https://www.mql5.com |
| |||
//+------------------------------------------------------------------+
| |||
| |||
#define PRT(A) Print(#A, "=", (A))
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| ARGB equivalent representation |
| |||
//+------------------------------------------------------------------+
| |||
struct Argb
| |||
{
| |||
uchar BB;
| |||
uchar GG;
| |||
uchar RR;
| |||
uchar AA;
| |||
};
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Split ARGB value into components |
| |||
//+------------------------------------------------------------------+
| |||
union ColorARGB
| |||
{
| |||
uint value;
| |||
uchar channels[4]; // 0 - BB, 1 - GG, 2 - RR, 3 - AA
| |||
Argb split[1];
| |||
ColorARGB(uint u) : value(u) { }
| |||
};
| |||
| |||
#define ARGBToColor(U) ((color)((((U) & 0xFF) << 16) | ((U) & 0xFF00) | (((U) >> 16) & 0xFF)))
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Script program start function |
| |||
//+------------------------------------------------------------------+
| |||
void OnStart()
| |||
{
| |||
PRT(ColorToString(clrBlue)); // 0,0,255
| |||
PRT(ColorToString(C'0,0,255', true)); // clrBlue
| |||
PRT(ColorToString(C'0,0,250')); // 0,0,250
| |||
PRT(ColorToString(C'0,0,250', true)); // 0,0,250 (no such color name)
| |||
PRT(ColorToString(0x34AB6821, true)); // 33,104,171 (0x21,0x68,0xAB)
| |||
| |||
PRT(StringToColor("0,0,255")); // clrBlue
| |||
PRT(StringToColor("clrBlue")); // clrBlue
| |||
PRT(StringToColor("Blue")); // clrBlack (no such color name)
| |||
// excessive text is skipped
| |||
PRT(StringToColor("255,255,255 more text")); // clrWhite
| |||
PRT(StringToColor("This is color: 128,128,128")); // clrGray
| |||
| |||
uint u = ColorToARGB(clrBlue);
| |||
PrintFormat("ARGB1=%X", u); // ARGB1=FF0000FF
| |||
ColorARGB clr1(u);
| |||
ArrayPrint(clr1.split);
| |||
/*
| |||
[BB] [GG] [RR] [AA]
| |||
[0] 255 0 0 255
| |||
*/
| |||
| |||
u = ColorToARGB(clrDeepSkyBlue, 0x40);
| |||
PrintFormat("ARGB2=%X", u); // ARGB2=4000BFFF
| |||
ColorARGB clr2(u);
| |||
ArrayPrint(clr2.split);
| |||
/*
| |||
[BB] [GG] [RR] [AA]
| |||
[0] 255 191 0 64
| |||
*/
| |||
Print(ARGBToColor(u)); // clrDeepSkyBlue
| |||
}
| |||
//+------------------------------------------------------------------+
|