Añadir un efecto de volumen a las líneas indicadoras - página 9

 

Gradiente horizontal en el lienzo.

Archivos adjuntos:
gradient.mq5  5 kb
 

Se ha mejorado ligeramente el código, y también se ha introducido una variable que es responsable de la velocidad de renderizado:

input uchar speed=5;             // visible effect

El cambio de velocidad de visualización se realiza actualizando el lienzo no después de cada dibujo de la línea, sino a intervalos.

El tamaño del hueco se calcula mediante la operación aritmética "resto de la división":

      if(i%speed==0)
         canvas_.Update()
Archivos adjuntos:
gradient.mq5  5 kb
 

Aquí he aplicado diferentes colores: he aplicado un color con transparencia (canal alfa 255) al color de fondo (canal alfa 128). Tengo una pregunta: ¿qué fórmula se utiliza para calcular el color final del píxel para los modos COLOR_FORMAT_ARGB_RAW y COLOR_FORMAT_ARGB_NORMALIZE?

Si te refieres al artículo Cálculo del color resultante, los cálculos no coinciden.

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

¿Dónde está el error: las constantes de color almacenan datos erróneos o la función PrintFormat funciona mal?

Aquí hay un script que muestra los colores en forma de enteros a través de 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));
  }
//+------------------------------------------------------------------+

Resultado de la salida:

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

¿Por quéclrRed se representa como0x000000FF y no como0x00FF0000? Porque el rojo es C'255,0,0'.

¿Por quéclrBlue se representa como0x00FF0000 y no como0x0000FF? Porque el azul es C'0,0,255'.

Archivos adjuntos:
 
Esto es correcto. Es que ARGB tiene un formato de almacenamiento diferente al de Color.
 
TheXpert:
Esto es correcto. Es que ARGB tiene un formato de almacenamiento de datos diferente al de Color.

El formato de grabación debe ser el mismo: primero el canal alfa (si lo hay) y luego RGB. De acuerdo con la ayuda Tipo de registro de color azul a través de los literales:

C'0x00,0x00,0xFF'// azul

es decir, en representación entera, el color azul (sin canal alfa) debe escribirse como: 0x0000FF. Pero el script de prueba emite el color azul al revés:

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

Resulta que el color se escribe al revés en las constantes de color.

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

Resulta que el color se escribe al revés en las constantes de color.

Sí. Este orden en el literal no significa el mismo orden en Color
 

Con COLOR_FORMAT_ARGB_RAW, el métodoTransparentLevelSet con el parámetro "0" (transparencia total) produce una casi-transparencia, pero claramente no una transparencia total.

Archivos adjuntos:
 
barabashkakvn:

Con COLOR_FORMAT_ARGB_RAW, el métodoTransparentLevelSet con el parámetro "0" (transparencia total) produce una casi-transparencia pero claramente no una transparencia total.

Aclaración: la transparencia residual en el nivel de transparencia "0" sólo se observa en x32. No hay transparencia residual en x64:

x32


x64


¿Este comportamiento del kanvas en el modo COLOR_FORMAT_ARGB_RAW es un error o una característica del dibujo en sistemas x32 y x64?

 
barabashkakvn:

Aclaración: la transparencia residual en el nivel de transparencia "0" sólo se observa en x32. No hay transparencia residual en x64:

¿Este comportamiento del kanvas en el modo COLOR_FORMAT_ARGB_RAW es un error o una característica del dibujo en sistemas x32 y x64?

Se necesita Service Desk... )))
Razón de la queja: