颜色
MQL5 API 包含用于处理颜色的 3 个内置函数:其中两个用于 颜色 类型与字符串之间的相互转换,第三个用于提供带透明度的特殊颜色表示 (ARGB)。
string ColorToString(color value, bool showName = false)
ColorToString 函数将传递的颜色 value 转换为诸如 "R,G,B" 的字符串(其中 R、G、B 是 0 到 255 的数字,对应于颜色中红、绿、蓝分量的强度),或者对应于预定义 web 颜色 列表中的颜色名称(如果 showName 参数等于 true)。仅当颜色值完全匹配某个 web 设置颜色值时,才会返回颜色名称。
该函数的使用示例在 ConversionColor.mq5 脚本中提供。
void OnStart()
|
color StringToColor(string text)
StringToColor 函数将诸如 "R,G,B" 的字符串或者包含标准 web 颜色 的字符串转换为 颜色类型值。如果字符串未包含格式正确的数字三元组或颜色名称,则函数将返回 0 (clrBlack)。
示例参见脚本 ConversionColor.mq5。
void OnStart()
|
uint ColorToARGB(color value, uchar alpha = 255)
ColorToARGB 函数将 color 类型值以及单字节值 alpha(指定透明度)转换为 ARGB 颜色表示(uint 类型值)。ARGB 颜色格式用于创建 图形资源 以及 文本图 (在 图表上)。
alpha 值介于 0 到 255 之间。"0" 对应全颜色透明度(当显示此颜色的像素时,会让该点的现有图像保持不变),255 表示应用全颜色浓度(当显示该颜色的像素时,会完全替换对应点的图像颜色)。值 128 (0x80) 为半透明。
如我们所知,color 类型使用三个颜色分量描述颜色:红色 (Red)、绿色 (Green) 以及蓝色 (Blue),分量以 0x00BBGGRR 的格式存储在 4 字节整数 (uint) 中。每个分量是一个指定对应颜色饱和度的字节,范围 0 到 255(十六进制则为 0x00 到 0xFF)。最高字节为空。例如,白色包含所有颜色,因此白色的 color 含义等于 0xFFFFFF。
但在某些任务中,需要指定颜色透明度,以描述当叠加在某个背景(另一个已存在的图像)上时的图像显示方式。为此,引入了 alpha 通道的概念,该通道由一个额外字节编码。
含 alpha 通道(以 AA 表示)的 ARGB 颜色表示为 0xAARRGGBB。例如,值 0x80FFFF00 表示黄色(红色和绿色分量混合)半透明颜色。
当具有 alpha 通道的图像叠加到某个背景上时,获得最终的颜色:
Cresult = (Cforeground * alpha + Cbackground * (255 - alpha)) / 255 |
其中 C 分别取每个 R、G、B 分量的值。该公式供参考。使用具有 ARGB 颜色的内置函数时,自动应用透明度。
ColorToARGB 应用示例在 ConversionColor.mq5 中提供。辅助结构体 Argb 和联合体 ColorARGB 已添加到脚本中,以便于分析颜色分量。
struct Argb
|
该结构体用作联合体中的 split 类型字段,并提供按名称的 ARGB 分量访问。该联合体也具有字节数组 channels,允许你按索引访问分量。
void OnStart()
|
稍后我们讨论 print format 函数(在相应 章节讨论)。
没有内置函数可将 ARGB 转换回 color(因为通常不需要),但如果希望这样做,可使用以下宏:
#define ARGBToColor(U) (color) \
|