Aggiungere un effetto volume alle linee dell'indicatore - pagina 9

 

Gradiente orizzontale sul kanvas.

File:
gradient.mq5  5 kb
 

Leggermente migliorato il codice, e introdotto anche una variabile che è responsabile della velocità di rendering:

input uchar speed=5;             // visible effect

Cambiare la velocità di visualizzazione è fatto aggiornando la tela non dopo ogni disegno della linea, ma a intervalli.

La dimensione dello scarto è calcolata utilizzando l'operazione aritmetica "resto della divisione":

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

Qui ho applicato diversi colori: ho applicato un colore con trasparenza (canale alfa 255) al colore di sfondo (canale alfa 128). Ho una domanda - quale formula viene usata per calcolare il colore finale dei pixel per le modalità COLOR_FORMAT_ARGB_RAW e COLOR_FORMAT_ARGB_NORMALIZE.

Se fate riferimento all'articolo Calcolo del colore risultante, i calcoli non corrispondono.

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

Dove è sbagliato: le costanti di colore memorizzano i dati sbagliati o la funzione PrintFormat non funziona bene?

Ecco uno script che emette colori in forma di interi tramite 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));
  }
//+------------------------------------------------------------------+

Risultato di uscita:

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

PerchéclrRed è rappresentato come0x000000FF e non0x00FF0000? Perché il rosso è C'255,0,0'.

PerchéclrBlue è rappresentato come0x00FF0000 e non0x0000FF? Perché il blu è C'0,0,255'.

File:
 
Questo è corretto. È solo che ARGB ha un formato di memorizzazione diverso da Color.
 
TheXpert:
Questo è corretto. È solo che ARGB ha un diverso formato di memorizzazione dei dati rispetto a Color.

Il formato di registrazione dovrebbe essere lo stesso: prima il canale alfa (se c'è) poi RGB. Secondo l'aiuto tipo Colore record blu attraverso i letterali:

C'0x00,0x00,0xFF'// blu

Cioè, in rappresentazione intera, il colore blu (senza canale alfa) dovrebbe essere scritto come: 0x0000FF. Ma lo script di test emette il colore blu al contrario:

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

Si scopre che il colore è scritto al contrario nelle costanti di colore.

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

Si scopre che il colore è scritto al contrario nelle costanti di colore.

Sì. Questo ordine nel letterale non significa lo stesso ordine in Color
 

Con COLOR_FORMAT_ARGB_RAW, il metodoTransparentLevelSet con parametro "0" (trasparenza completa) produce una quasi-trasparenza, ma chiaramente non una trasparenza completa.

 
barabashkakvn:

Il metodo COLOR_FORMAT_ARGB_RAWTransparentLevelSet con il parametro "0" (trasparenza completa) rende la trasparenza vicina a quella completa ma ovviamente non completa.

Chiarimento: la trasparenza residua al livello di trasparenza "0" si osserva solo su x32. Non c'è trasparenza residua su x64:

x32


x64


Questo comportamento del kanvas in modalità COLOR_FORMAT_ARGB_RAW è un bug o una caratteristica del disegno nei sistemi x32 e x64?

 
barabashkakvn:

Chiarimento: la trasparenza residua al livello di trasparenza "0" si osserva solo su x32. Non c'è trasparenza residua su x64:

Questo comportamento del kanvas in modalità COLOR_FORMAT_ARGB_RAW è un bug o una caratteristica del disegno nei sistemi x32 e x64?

Service Desk è necessario... )))
Motivazione: