为指标线添加音量效果 - 页 9

 

卡布上的水平梯度。

附加的文件:
gradient.mq5  5 kb
 

略微改进了代码,还引入了一个负责渲染速度的变量。

input uchar speed=5;             // visible effect

改变可视化的速度是通过更新画布来实现的,不是在每次画完线后,而是每隔一段时间就更新一次。

差距的大小是用算术运算"除法的余数 "来计算的。

      if(i%speed==0)
         canvas_.Update()
附加的文件:
gradient.mq5  5 kb
 

我在这里应用了不同的颜色:我在背景色(alpha通道255)上应用了一种具有透明度的颜色(alpha通道128)。我有一个问题--对于COLOR_FORMAT_ARGB_RAW和COLOR_FORMAT_ARGB_NORMALIZE模式,哪个公式是用来计算最终的像素颜色的。

如果你参考《计算结果的颜色》一文,计算结果并不一致。

Альфа-канал — Википедия
Альфа-канал — Википедия
  • ru.wikipedia.org
В компьютерной графике альфа-композиция обозначает процесс комбинирования изображения с фоном с целью создания эффекта частичной прозрачности. Этот метод часто применяется для многопроходной обработки изображения по частям с последующей комбинацией этих частей в единое двумерное результирующее изображение. Таким образом, альфа канал...
 

哪里出了问题:是颜色常数存储了错误的数据,还是PrintFormat功能 出了故障?

这里有一个通过PrintFormat输出整数形式的颜色的脚本。

//+------------------------------------------------------------------+
//|                                                  Script_test.mq5 |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- зададим прозрачность
   uchar alfa=0x80; // значение 0x80 означает 128/255=50 % прозрачности   
   //--- выведем преобразование в ARGB для цвета clrBlue
   PrintFormat("0x%.8X - clrBlue",clrBlue);
   PrintFormat("0x%.8X - clrBlue ARGB with alfa=0x80 (transparency 50%%)",ColorToARGB(clrBlue,alfa));
   //--- выведем преобразование в ARGB для цвета clrGreen
   PrintFormat("0x%.8X - clrGreen",clrGreen);
   PrintFormat("0x%.8X - clrGreen ARGB with alfa=0x80 (transparency 50%%)",ColorToARGB(clrGreen,alfa));
   //--- выведем преобразование в ARGB для цвета clrRed
   PrintFormat("0x%.8X - clrRed",clrRed);
   PrintFormat("0x%.8X - clrRed ARGB with alfa=0x0x80 (transparency 50%%)",ColorToARGB(clrRed,alfa));
  }
//+------------------------------------------------------------------+

输出结果。

2015.01.24 21:50:31.164 Script_test (GBPUSD,D1) 0x80FF0000 - clrRed ARGB with alfa=0x0x80 (transparency 50%)
2015.01.24 21:50:31.164 Script_test (GBPUSD,D1) 0x000000FF - clrRed
2015.01.24 21:50:31.164 Script_test (GBPUSD,D1) 0x80008000 - clrGreen ARGB with alfa=0x80 (transparency 50%)
2015.01.24 21:50:31.164 Script_test (GBPUSD,D1) 0x00008000 - clrGreen
2015.01.24 21:50:31.164 Script_test (GBPUSD,D1) 0x800000FF - clrBlue ARGB with alfa=0x80 (transparency 50%)
2015.01.24 21:50:31.164 Script_test (GBPUSD,D1) 0x00FF0000 - clrBlue

为什么clrRed表示0x000000FF而 不是0x00FF0000?因为红色是C'255,0,0'。

为什么clrBlue 被表示为0x00FF0000 不是0x0000FF?因为蓝色是C'0,0,255'。

附加的文件:
 
这一点是正确的。只是ARGB的存储格式与Color不同。
 
TheXpert:
这一点是正确的。只是与彩色相比,ARGB有不同的数据存储格式。

记录格式应该是一样的:首先是阿尔法通道(如果有的话),然后是RGB。根据帮助类型颜色 记录蓝色通过字面。

C'0x00,0x00,0xFF'// 蓝色

即在整数表示中,蓝色(不含阿尔法通道)应写为:0x0000FF。但测试脚本却把蓝色反过来输出。

2015.01.24 21:50:31.164 Script_test (GBPUSD,D1) 0x00FF0000 - clrBlue

事实证明,颜色在颜色常数中是倒着写的。

Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип color
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип color
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Тип color - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
barabashkakvn:

事实证明,颜色在颜色常数中是倒着写的。

是的,字面上的这个顺序并不意味着颜色上的相同顺序。
 

COLOR_FORMAT_ARGB_RAW 参数为 "0"(全透明)的TransparentLevelSet 方法 会产生接近透明的效果,但显然不是全透明。

附加的文件:
 
barabashkakvn:

COLOR_FORMAT_ARGB_RAW 参数为 "0"(全透明)的TransparentLevelSet 方法 会产生接近透明的效果,但显然不是全透明。

澄清:在透明度级别 "0 "下的残余透明度只在x32上观察到。在x64上没有残留的透明度。

x32


x64


这种在COLOR_FORMAT_ARGB_RAW 模式下的kanvas行为是一个bug,还是在x32和x64系统中绘图的一个特点?

 
barabashkakvn:

澄清:在透明度级别 "0 "下的残余透明度只在x32上观察到。在x64上没有残留的透明度。

这种在COLOR_FORMAT_ARGB_RAW 模式下的kanvas行为是一个bug,还是在x32和x64系统中绘图的一个特点?

需要服务台...)))