Ajout d'un effet de volume aux lignes de l'indicateur - page 9

 

Dégradé horizontal sur le kanvas.

Dossiers :
gradient.mq5  5 kb
 

Légèrement amélioré le code, et également introduit une variable qui est responsable de la vitesse de rendu :

input uchar speed=5;             // visible effect

La modification de la vitesse de visualisation se fait en mettant à jour le canevas non pas après chaque dessin de la ligne, mais à intervalles.

La taille de l'écart est calculée à l'aide de l'opération arithmétique "reste de la division" :

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

J'ai appliqué différentes couleurs ici : j'ai appliqué une couleur avec transparence (canal alpha 255) à la couleur de fond (canal alpha 128). J'ai une question : quelle formule est utilisée pour calculer la couleur finale des pixels pour les modes COLOR_FORMAT_ARGB_RAW et COLOR_FORMAT_ARGB_NORMALIZE ?

Si vous vous référez à l'article Calcul de la couleur résultante, les calculs ne correspondent pas.

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

Où se situe le problème : les constantes de couleur stockent-elles des données erronées ou la fonction PrintFormat fonctionne-t-elle mal ?

Voici un script qui produit des couleurs sous forme d'entiers via 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));
  }
//+------------------------------------------------------------------+

Résultat de sortie :

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

PourquoiclrRed est-il représenté par0x000000FF et non0x00FF0000? Parce que le rouge est C'255,0,0'.

PourquoiclrBlue est-il représenté par0x00FF0000 et non0x0000FF? Parce que le bleu est C'0,0,255'.

Dossiers :
 
C'est exact. C'est juste que l'ARGB a un format de stockage différent de la couleur.
 
TheXpert:
C'est exact. C'est juste que l'ARGB a un format de stockage de données différent de celui de la couleur.

Le format d'enregistrement doit être le même : d'abord le canal alpha (s'il y en a un) puis RVB. Selon le type d' aide Colorier l'enregistrement en bleu à travers les littéraux :

C '0x00,0x00,0xFF'// bleu

c'est-à-dire que dans la représentation des nombres entiers, la couleur bleue (sans canal alpha) doit être écrite comme suit : 0x0000FF. Mais le script de test produit la couleur bleue à l'envers :

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

Il s'avère que la couleur est écrite à l'envers dans les constantes de couleur.

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

Il s'avère que la couleur s'écrit à l'envers dans les constantes de couleur.

Oui. Cet ordre dans le littéral ne signifie pas le même ordre dans la couleur.
 

Avec COLOR_FORMAT_ARGB_RAW, la méthodeTransparentLevelSet avec le paramètre "0" (transparence totale) produit une quasi-transparence, mais clairement pas une transparence totale.

Dossiers :
 
barabashkakvn:

La méthode COLOR_FORMAT_ARGB_RAWTransparentLevelSet avec le paramètre "0" (transparence totale) rend la transparence proche de la transparence totale mais évidemment pas de la transparence totale.

Clarification : la transparence résiduelle au niveau de transparence "0" n'est observée que sur x32. Il n'y a pas de transparence résiduelle sur x64 :

x32


x64


Ce comportement du kanvas en mode COLOR_FORMAT_ARGB_RAW est-il un bogue ou une caractéristique du dessin dans les systèmes x32 et x64 ?

 
barabashkakvn:

Clarification : la transparence résiduelle au niveau de transparence "0" n'est observée que sur x32. Il n'y a pas de transparence résiduelle sur x64 :

Ce comportement du kanvas en mode COLOR_FORMAT_ARGB_RAW est-il un bogue ou une caractéristique du dessin dans les systèmes x32 et x64 ?

Service Desk est nécessaire... )))